http://linux-sound.bkbits.net/linux-sound
perex@suse.cz|ChangeSet|20040803181918|36096 perex

# This is a BitKeeper generated diff -Nru style patch.
#
# ChangeSet
#   2004/08/03 20:19:18+02:00 perex@suse.cz 
#   ALSA CVS update
#   au88x0 driver
#   Cleanup the private_data initialization
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# sound/pci/au88x0/au88x0_a3d.c
#   2004/08/03 13:08:53+02:00 perex@suse.cz +4 -8
#   ALSA CVS update
#   D:2004/08/03 19:08:53
#   C:au88x0 driver
#   F:pci/au88x0/au88x0_a3d.c:1.6->1.7 
#   L:Cleanup the private_data initialization
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# ChangeSet
#   2004/08/03 19:57:05+02:00 perex@suse.cz 
#   ALSA CVS update
#   USB generic driver
#   fix email address and license
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/usb/usbmidi.c
#   2004/08/03 10:24:22+02:00 perex@suse.cz +2 -2
#   ALSA CVS update
#   D:2004/08/03 16:24:22
#   C:USB generic driver
#   F:usb/usbmidi.c:1.32->1.33 
#   L:fix email address and license
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/08/03 19:56:02+02:00 perex@suse.cz 
#   ALSA CVS update
#   Documentation,Intel8x0 driver
#   Added buggy_irq module parameter to intel8x0 driver.
#   
#   On some (broken :) motherboards, unknown irq is triggered when the audio
#   is started.  This this option, the irq handler returns IRQ_HANDLED for
#   such an irq, so that the irq line won't be disabled.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/intel8x0.c
#   2004/08/03 10:17:02+02:00 perex@suse.cz +13 -11
#   ALSA CVS update
#   D:2004/08/03 16:17:01
#   C:Documentation,Intel8x0 driver
#   F:Documentation/ALSA-Configuration.txt:1.49->1.50 
#   F:pci/intel8x0.c:1.156->1.157 
#   L:Added buggy_irq module parameter to intel8x0 driver.
#   L:
#   L:On some (broken :) motherboards, unknown irq is triggered when the audio
#   L:is started.  This this option, the irq handler returns IRQ_HANDLED for
#   L:such an irq, so that the irq line won't be disabled.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# Documentation/sound/alsa/ALSA-Configuration.txt
#   2004/08/03 10:17:01+02:00 perex@suse.cz +2 -0
#   ALSA CVS update
#   D:2004/08/03 16:17:01
#   C:Documentation,Intel8x0 driver
#   F:Documentation/ALSA-Configuration.txt:1.49->1.50 
#   F:pci/intel8x0.c:1.156->1.157 
#   L:Added buggy_irq module parameter to intel8x0 driver.
#   L:
#   L:On some (broken :) motherboards, unknown irq is triggered when the audio
#   L:is started.  This this option, the irq handler returns IRQ_HANDLED for
#   L:such an irq, so that the irq line won't be disabled.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/08/03 19:54:52+02:00 perex@suse.cz 
#   ALSA CVS update
#   Documentation,USB,USB generic driver,USB USX2Y
#   Added snd-usb-usx2y driver for Tascam US-122/224/428 support.
#   Driver written by Karsten Wiese <annabellesgarden@yahoo.de>
#   
#   The shared code is split from usbaudio as snd-usb-lib module.
#   Currently, only MIDI part is included there.  In future, more
#   audio part will be shared, too.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/usb/usx2y/usx2y.h
#   2004/08/03 19:47:45+02:00 perex@suse.cz +49 -0
#   ALSA CVS update
#   D:2004/08/03 15:22:32
#   C:Documentation,USB,USB generic driver,USB USX2Y
#   F:Documentation/ALSA-Configuration.txt:1.48->1.49 
#   F:usb/Kconfig:1.4->1.5 
#   F:usb/Makefile:1.4->1.5 
#   F:usb/usbmidi.c:1.31->1.32 
#   F:usb/usx2y/Makefile:INITIAL->1.1 
#   F:usb/usx2y/usX2Yhwdep.c:INITIAL->1.1 
#   F:usb/usx2y/usX2Yhwdep.h:INITIAL->1.1 
#   F:usb/usx2y/usbus428ctldefs.h:INITIAL->1.1 
#   F:usb/usx2y/usbusx2y.c:INITIAL->1.1 
#   F:usb/usx2y/usbusx2y.h:INITIAL->1.1 
#   F:usb/usx2y/usbusx2yaudio.c:INITIAL->1.1 
#   F:usb/usx2y/usx2y.h:INITIAL->1.1 
#   L:Added snd-usb-usx2y driver for Tascam US-122/224/428 support.
#   L:Driver written by Karsten Wiese <annabellesgarden@yahoo.de>
#   L:
#   L:The shared code is split from usbaudio as snd-usb-lib module.
#   L:Currently, only MIDI part is included there.  In future, more
#   L:audio part will be shared, too.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/usb/usx2y/usbusx2yaudio.c
#   2004/08/03 19:47:36+02:00 perex@suse.cz +1026 -0
#   ALSA CVS update
#   D:2004/08/03 15:22:32
#   C:Documentation,USB,USB generic driver,USB USX2Y
#   F:Documentation/ALSA-Configuration.txt:1.48->1.49 
#   F:usb/Kconfig:1.4->1.5 
#   F:usb/Makefile:1.4->1.5 
#   F:usb/usbmidi.c:1.31->1.32 
#   F:usb/usx2y/Makefile:INITIAL->1.1 
#   F:usb/usx2y/usX2Yhwdep.c:INITIAL->1.1 
#   F:usb/usx2y/usX2Yhwdep.h:INITIAL->1.1 
#   F:usb/usx2y/usbus428ctldefs.h:INITIAL->1.1 
#   F:usb/usx2y/usbusx2y.c:INITIAL->1.1 
#   F:usb/usx2y/usbusx2y.h:INITIAL->1.1 
#   F:usb/usx2y/usbusx2yaudio.c:INITIAL->1.1 
#   F:usb/usx2y/usx2y.h:INITIAL->1.1 
#   L:Added snd-usb-usx2y driver for Tascam US-122/224/428 support.
#   L:Driver written by Karsten Wiese <annabellesgarden@yahoo.de>
#   L:
#   L:The shared code is split from usbaudio as snd-usb-lib module.
#   L:Currently, only MIDI part is included there.  In future, more
#   L:audio part will be shared, too.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/usb/usx2y/usbusx2y.h
#   2004/08/03 19:47:30+02:00 perex@suse.cz +61 -0
#   ALSA CVS update
#   D:2004/08/03 15:22:32
#   C:Documentation,USB,USB generic driver,USB USX2Y
#   F:Documentation/ALSA-Configuration.txt:1.48->1.49 
#   F:usb/Kconfig:1.4->1.5 
#   F:usb/Makefile:1.4->1.5 
#   F:usb/usbmidi.c:1.31->1.32 
#   F:usb/usx2y/Makefile:INITIAL->1.1 
#   F:usb/usx2y/usX2Yhwdep.c:INITIAL->1.1 
#   F:usb/usx2y/usX2Yhwdep.h:INITIAL->1.1 
#   F:usb/usx2y/usbus428ctldefs.h:INITIAL->1.1 
#   F:usb/usx2y/usbusx2y.c:INITIAL->1.1 
#   F:usb/usx2y/usbusx2y.h:INITIAL->1.1 
#   F:usb/usx2y/usbusx2yaudio.c:INITIAL->1.1 
#   F:usb/usx2y/usx2y.h:INITIAL->1.1 
#   L:Added snd-usb-usx2y driver for Tascam US-122/224/428 support.
#   L:Driver written by Karsten Wiese <annabellesgarden@yahoo.de>
#   L:
#   L:The shared code is split from usbaudio as snd-usb-lib module.
#   L:Currently, only MIDI part is included there.  In future, more
#   L:audio part will be shared, too.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/usb/usx2y/usbusx2y.c
#   2004/08/03 19:47:22+02:00 perex@suse.cz +434 -0
#   ALSA CVS update
#   D:2004/08/03 15:22:32
#   C:Documentation,USB,USB generic driver,USB USX2Y
#   F:Documentation/ALSA-Configuration.txt:1.48->1.49 
#   F:usb/Kconfig:1.4->1.5 
#   F:usb/Makefile:1.4->1.5 
#   F:usb/usbmidi.c:1.31->1.32 
#   F:usb/usx2y/Makefile:INITIAL->1.1 
#   F:usb/usx2y/usX2Yhwdep.c:INITIAL->1.1 
#   F:usb/usx2y/usX2Yhwdep.h:INITIAL->1.1 
#   F:usb/usx2y/usbus428ctldefs.h:INITIAL->1.1 
#   F:usb/usx2y/usbusx2y.c:INITIAL->1.1 
#   F:usb/usx2y/usbusx2y.h:INITIAL->1.1 
#   F:usb/usx2y/usbusx2yaudio.c:INITIAL->1.1 
#   F:usb/usx2y/usx2y.h:INITIAL->1.1 
#   L:Added snd-usb-usx2y driver for Tascam US-122/224/428 support.
#   L:Driver written by Karsten Wiese <annabellesgarden@yahoo.de>
#   L:
#   L:The shared code is split from usbaudio as snd-usb-lib module.
#   L:Currently, only MIDI part is included there.  In future, more
#   L:audio part will be shared, too.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/usb/usx2y/usbus428ctldefs.h
#   2004/08/03 19:47:17+02:00 perex@suse.cz +108 -0
#   ALSA CVS update
#   D:2004/08/03 15:22:32
#   C:Documentation,USB,USB generic driver,USB USX2Y
#   F:Documentation/ALSA-Configuration.txt:1.48->1.49 
#   F:usb/Kconfig:1.4->1.5 
#   F:usb/Makefile:1.4->1.5 
#   F:usb/usbmidi.c:1.31->1.32 
#   F:usb/usx2y/Makefile:INITIAL->1.1 
#   F:usb/usx2y/usX2Yhwdep.c:INITIAL->1.1 
#   F:usb/usx2y/usX2Yhwdep.h:INITIAL->1.1 
#   F:usb/usx2y/usbus428ctldefs.h:INITIAL->1.1 
#   F:usb/usx2y/usbusx2y.c:INITIAL->1.1 
#   F:usb/usx2y/usbusx2y.h:INITIAL->1.1 
#   F:usb/usx2y/usbusx2yaudio.c:INITIAL->1.1 
#   F:usb/usx2y/usx2y.h:INITIAL->1.1 
#   L:Added snd-usb-usx2y driver for Tascam US-122/224/428 support.
#   L:Driver written by Karsten Wiese <annabellesgarden@yahoo.de>
#   L:
#   L:The shared code is split from usbaudio as snd-usb-lib module.
#   L:Currently, only MIDI part is included there.  In future, more
#   L:audio part will be shared, too.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/usb/usx2y/usX2Yhwdep.h
#   2004/08/03 19:47:12+02:00 perex@suse.cz +6 -0
#   ALSA CVS update
#   D:2004/08/03 15:22:32
#   C:Documentation,USB,USB generic driver,USB USX2Y
#   F:Documentation/ALSA-Configuration.txt:1.48->1.49 
#   F:usb/Kconfig:1.4->1.5 
#   F:usb/Makefile:1.4->1.5 
#   F:usb/usbmidi.c:1.31->1.32 
#   F:usb/usx2y/Makefile:INITIAL->1.1 
#   F:usb/usx2y/usX2Yhwdep.c:INITIAL->1.1 
#   F:usb/usx2y/usX2Yhwdep.h:INITIAL->1.1 
#   F:usb/usx2y/usbus428ctldefs.h:INITIAL->1.1 
#   F:usb/usx2y/usbusx2y.c:INITIAL->1.1 
#   F:usb/usx2y/usbusx2y.h:INITIAL->1.1 
#   F:usb/usx2y/usbusx2yaudio.c:INITIAL->1.1 
#   F:usb/usx2y/usx2y.h:INITIAL->1.1 
#   L:Added snd-usb-usx2y driver for Tascam US-122/224/428 support.
#   L:Driver written by Karsten Wiese <annabellesgarden@yahoo.de>
#   L:
#   L:The shared code is split from usbaudio as snd-usb-lib module.
#   L:Currently, only MIDI part is included there.  In future, more
#   L:audio part will be shared, too.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/usb/usx2y/usX2Yhwdep.c
#   2004/08/03 19:47:05+02:00 perex@suse.cz +275 -0
#   ALSA CVS update
#   D:2004/08/03 15:22:32
#   C:Documentation,USB,USB generic driver,USB USX2Y
#   F:Documentation/ALSA-Configuration.txt:1.48->1.49 
#   F:usb/Kconfig:1.4->1.5 
#   F:usb/Makefile:1.4->1.5 
#   F:usb/usbmidi.c:1.31->1.32 
#   F:usb/usx2y/Makefile:INITIAL->1.1 
#   F:usb/usx2y/usX2Yhwdep.c:INITIAL->1.1 
#   F:usb/usx2y/usX2Yhwdep.h:INITIAL->1.1 
#   F:usb/usx2y/usbus428ctldefs.h:INITIAL->1.1 
#   F:usb/usx2y/usbusx2y.c:INITIAL->1.1 
#   F:usb/usx2y/usbusx2y.h:INITIAL->1.1 
#   F:usb/usx2y/usbusx2yaudio.c:INITIAL->1.1 
#   F:usb/usx2y/usx2y.h:INITIAL->1.1 
#   L:Added snd-usb-usx2y driver for Tascam US-122/224/428 support.
#   L:Driver written by Karsten Wiese <annabellesgarden@yahoo.de>
#   L:
#   L:The shared code is split from usbaudio as snd-usb-lib module.
#   L:Currently, only MIDI part is included there.  In future, more
#   L:audio part will be shared, too.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/usb/usx2y/usx2y.h
#   2004/08/03 19:47:45+02:00 perex@suse.cz +0 -0
#   BitKeeper file /home/perex/bk/linux-sound/work/sound/usb/usx2y/usx2y.h
# 
# sound/usb/usx2y/usbusx2yaudio.c
#   2004/08/03 19:47:36+02:00 perex@suse.cz +0 -0
#   BitKeeper file /home/perex/bk/linux-sound/work/sound/usb/usx2y/usbusx2yaudio.c
# 
# sound/usb/usx2y/usbusx2y.h
#   2004/08/03 19:47:30+02:00 perex@suse.cz +0 -0
#   BitKeeper file /home/perex/bk/linux-sound/work/sound/usb/usx2y/usbusx2y.h
# 
# sound/usb/usx2y/usbusx2y.c
#   2004/08/03 19:47:22+02:00 perex@suse.cz +0 -0
#   BitKeeper file /home/perex/bk/linux-sound/work/sound/usb/usx2y/usbusx2y.c
# 
# sound/usb/usx2y/usbus428ctldefs.h
#   2004/08/03 19:47:17+02:00 perex@suse.cz +0 -0
#   BitKeeper file /home/perex/bk/linux-sound/work/sound/usb/usx2y/usbus428ctldefs.h
# 
# sound/usb/usx2y/usX2Yhwdep.h
#   2004/08/03 19:47:12+02:00 perex@suse.cz +0 -0
#   BitKeeper file /home/perex/bk/linux-sound/work/sound/usb/usx2y/usX2Yhwdep.h
# 
# sound/usb/usx2y/usX2Yhwdep.c
#   2004/08/03 19:47:05+02:00 perex@suse.cz +0 -0
#   BitKeeper file /home/perex/bk/linux-sound/work/sound/usb/usx2y/usX2Yhwdep.c
# 
# sound/usb/usbmidi.c
#   2004/08/03 09:22:32+02:00 perex@suse.cz +10 -0
#   ALSA CVS update
#   D:2004/08/03 15:22:32
#   C:Documentation,USB,USB generic driver,USB USX2Y
#   F:Documentation/ALSA-Configuration.txt:1.48->1.49 
#   F:usb/Kconfig:1.4->1.5 
#   F:usb/Makefile:1.4->1.5 
#   F:usb/usbmidi.c:1.31->1.32 
#   F:usb/usx2y/Makefile:INITIAL->1.1 
#   F:usb/usx2y/usX2Yhwdep.c:INITIAL->1.1 
#   F:usb/usx2y/usX2Yhwdep.h:INITIAL->1.1 
#   F:usb/usx2y/usbus428ctldefs.h:INITIAL->1.1 
#   F:usb/usx2y/usbusx2y.c:INITIAL->1.1 
#   F:usb/usx2y/usbusx2y.h:INITIAL->1.1 
#   F:usb/usx2y/usbusx2yaudio.c:INITIAL->1.1 
#   F:usb/usx2y/usx2y.h:INITIAL->1.1 
#   L:Added snd-usb-usx2y driver for Tascam US-122/224/428 support.
#   L:Driver written by Karsten Wiese <annabellesgarden@yahoo.de>
#   L:
#   L:The shared code is split from usbaudio as snd-usb-lib module.
#   L:Currently, only MIDI part is included there.  In future, more
#   L:audio part will be shared, too.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/usb/Makefile
#   2004/08/03 09:22:32+02:00 perex@suse.cz +6 -2
#   ALSA CVS update
#   D:2004/08/03 15:22:32
#   C:Documentation,USB,USB generic driver,USB USX2Y
#   F:Documentation/ALSA-Configuration.txt:1.48->1.49 
#   F:usb/Kconfig:1.4->1.5 
#   F:usb/Makefile:1.4->1.5 
#   F:usb/usbmidi.c:1.31->1.32 
#   F:usb/usx2y/Makefile:INITIAL->1.1 
#   F:usb/usx2y/usX2Yhwdep.c:INITIAL->1.1 
#   F:usb/usx2y/usX2Yhwdep.h:INITIAL->1.1 
#   F:usb/usx2y/usbus428ctldefs.h:INITIAL->1.1 
#   F:usb/usx2y/usbusx2y.c:INITIAL->1.1 
#   F:usb/usx2y/usbusx2y.h:INITIAL->1.1 
#   F:usb/usx2y/usbusx2yaudio.c:INITIAL->1.1 
#   F:usb/usx2y/usx2y.h:INITIAL->1.1 
#   L:Added snd-usb-usx2y driver for Tascam US-122/224/428 support.
#   L:Driver written by Karsten Wiese <annabellesgarden@yahoo.de>
#   L:
#   L:The shared code is split from usbaudio as snd-usb-lib module.
#   L:Currently, only MIDI part is included there.  In future, more
#   L:audio part will be shared, too.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/usb/Kconfig
#   2004/08/03 09:22:32+02:00 perex@suse.cz +10 -0
#   ALSA CVS update
#   D:2004/08/03 15:22:32
#   C:Documentation,USB,USB generic driver,USB USX2Y
#   F:Documentation/ALSA-Configuration.txt:1.48->1.49 
#   F:usb/Kconfig:1.4->1.5 
#   F:usb/Makefile:1.4->1.5 
#   F:usb/usbmidi.c:1.31->1.32 
#   F:usb/usx2y/Makefile:INITIAL->1.1 
#   F:usb/usx2y/usX2Yhwdep.c:INITIAL->1.1 
#   F:usb/usx2y/usX2Yhwdep.h:INITIAL->1.1 
#   F:usb/usx2y/usbus428ctldefs.h:INITIAL->1.1 
#   F:usb/usx2y/usbusx2y.c:INITIAL->1.1 
#   F:usb/usx2y/usbusx2y.h:INITIAL->1.1 
#   F:usb/usx2y/usbusx2yaudio.c:INITIAL->1.1 
#   F:usb/usx2y/usx2y.h:INITIAL->1.1 
#   L:Added snd-usb-usx2y driver for Tascam US-122/224/428 support.
#   L:Driver written by Karsten Wiese <annabellesgarden@yahoo.de>
#   L:
#   L:The shared code is split from usbaudio as snd-usb-lib module.
#   L:Currently, only MIDI part is included there.  In future, more
#   L:audio part will be shared, too.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# Documentation/sound/alsa/ALSA-Configuration.txt
#   2004/08/03 09:22:32+02:00 perex@suse.cz +10 -0
#   ALSA CVS update
#   D:2004/08/03 15:22:32
#   C:Documentation,USB,USB generic driver,USB USX2Y
#   F:Documentation/ALSA-Configuration.txt:1.48->1.49 
#   F:usb/Kconfig:1.4->1.5 
#   F:usb/Makefile:1.4->1.5 
#   F:usb/usbmidi.c:1.31->1.32 
#   F:usb/usx2y/Makefile:INITIAL->1.1 
#   F:usb/usx2y/usX2Yhwdep.c:INITIAL->1.1 
#   F:usb/usx2y/usX2Yhwdep.h:INITIAL->1.1 
#   F:usb/usx2y/usbus428ctldefs.h:INITIAL->1.1 
#   F:usb/usx2y/usbusx2y.c:INITIAL->1.1 
#   F:usb/usx2y/usbusx2y.h:INITIAL->1.1 
#   F:usb/usx2y/usbusx2yaudio.c:INITIAL->1.1 
#   F:usb/usx2y/usx2y.h:INITIAL->1.1 
#   L:Added snd-usb-usx2y driver for Tascam US-122/224/428 support.
#   L:Driver written by Karsten Wiese <annabellesgarden@yahoo.de>
#   L:
#   L:The shared code is split from usbaudio as snd-usb-lib module.
#   L:Currently, only MIDI part is included there.  In future, more
#   L:audio part will be shared, too.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/usb/usx2y/Makefile
#   2004/08/03 19:46:59+02:00 perex@suse.cz +3 -0
#   ALSA CVS update
#   D:2004/08/03 15:22:32
#   C:Documentation,USB,USB generic driver,USB USX2Y
#   F:Documentation/ALSA-Configuration.txt:1.48->1.49 
#   F:usb/Kconfig:1.4->1.5 
#   F:usb/Makefile:1.4->1.5 
#   F:usb/usbmidi.c:1.31->1.32 
#   F:usb/usx2y/Makefile:INITIAL->1.1 
#   F:usb/usx2y/usX2Yhwdep.c:INITIAL->1.1 
#   F:usb/usx2y/usX2Yhwdep.h:INITIAL->1.1 
#   F:usb/usx2y/usbus428ctldefs.h:INITIAL->1.1 
#   F:usb/usx2y/usbusx2y.c:INITIAL->1.1 
#   F:usb/usx2y/usbusx2y.h:INITIAL->1.1 
#   F:usb/usx2y/usbusx2yaudio.c:INITIAL->1.1 
#   F:usb/usx2y/usx2y.h:INITIAL->1.1 
#   L:Added snd-usb-usx2y driver for Tascam US-122/224/428 support.
#   L:Driver written by Karsten Wiese <annabellesgarden@yahoo.de>
#   L:
#   L:The shared code is split from usbaudio as snd-usb-lib module.
#   L:Currently, only MIDI part is included there.  In future, more
#   L:audio part will be shared, too.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/usb/usx2y/Makefile
#   2004/08/03 19:46:59+02:00 perex@suse.cz +0 -0
#   BitKeeper file /home/perex/bk/linux-sound/work/sound/usb/usx2y/Makefile
# 
# ChangeSet
#   2004/08/03 19:53:42+02:00 perex@suse.cz 
#   ALSA CVS update
#   VIA82xx driver
#   Added the DXS whitelist entry for Acer Inspire 1353LM.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/via82xx.c
#   2004/08/02 09:24:38+02:00 perex@suse.cz +1 -0
#   ALSA CVS update
#   D:2004/08/02 15:24:38
#   C:VIA82xx driver
#   F:pci/via82xx.c:1.116->1.117 
#   L:Added the DXS whitelist entry for Acer Inspire 1353LM.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/08/03 14:07:05+02:00 perex@suse.cz 
#   From: Jaroslav Kysela <perex@suse.cz>
#   ALSA patch
#   Removed duplicate CK804_AUDIO from intel8x0.c
# 
# sound/pci/intel8x0.c
#   2004/08/03 14:06:31+02:00 perex@suse.cz +0 -4
#   Removed duplicate CK804_AUDIO
# 
# ChangeSet
#   2004/08/03 08:40:38+02:00 perex@suse.cz 
#   From: "Andrew Chew" <achew@nvidia.com>
#   
#   This patch updates include/linux/pci_ids.h with the CK804 audio controller
#   ID, and adds the CK804 audio controller to the sound/pci/intel8x0.c audio
#   driver.
#   
#   Signed-off-by: Andrew Morton <akpm@osdl.org>
# 
# sound/pci/intel8x0.c
#   2004/08/03 08:40:17+02:00 perex@suse.cz +4 -0
#   From: "Andrew Chew" <achew@nvidia.com>
#   
#   This patch updates include/linux/pci_ids.h with the CK804 audio controller
#   ID, and adds the CK804 audio controller to the sound/pci/intel8x0.c audio
#   driver.
#   
#   Signed-off-by: Andrew Morton <akpm@osdl.org>
# 
# include/linux/pci_ids.h
#   2004/08/03 08:40:17+02:00 perex@suse.cz +1 -0
#   From: "Andrew Chew" <achew@nvidia.com>
#   
#   This patch updates include/linux/pci_ids.h with the CK804 audio controller
#   ID, and adds the CK804 audio controller to the sound/pci/intel8x0.c audio
#   driver.
#   
#   Signed-off-by: Andrew Morton <akpm@osdl.org>
# 
# 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
# 
# ChangeSet
#   2004/08/02 16:55:05+02:00 perex@suse.cz 
#   ALSA CVS update
#   PPC PMAC driver
#   Bailed a long delay out of the spin_lock_irq.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/ppc/pmac.c
#   2004/08/02 07:11:06+02:00 perex@suse.cz +2 -0
#   ALSA CVS update
#   D:2004/08/02 13:11:06
#   C:PPC PMAC driver
#   F:ppc/pmac.c:1.35->1.36 
#   L:Bailed a long delay out of the spin_lock_irq.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/08/02 16:54:24+02:00 perex@suse.cz 
#   ALSA CVS update
#   PPC PMAC driver
#   pmac also apply the DMA stop work around to fix capture on iBook2
#   
#   the attached patch for the pmac driver fixes capture for at least all
#   iBook2s I have access to. Without the fix arround 33% percent of all
#   recordings are just white noise.
#   
#   Signed-off-by: Rene Rebe <rene.rebe@gmx.net>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/ppc/pmac.c
#   2004/08/02 06:46:06+02:00 perex@suse.cz +6 -6
#   ALSA CVS update
#   D:2004/08/02 12:46:06
#   C:PPC PMAC driver
#   F:ppc/pmac.c:1.34->1.35 
#   L:pmac also apply the DMA stop work around to fix capture on iBook2
#   L:
#   L:the attached patch for the pmac driver fixes capture for at least all
#   L:iBook2s I have access to. Without the fix arround 33% percent of all
#   L:recordings are just white noise.
#   Signed-off-by: Rene Rebe <rene.rebe@gmx.net>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/08/02 16:53:41+02:00 perex@suse.cz 
#   ALSA CVS update
#   PPC,PPC AWACS driver,PPC Beep,PPC PMAC driver,PPC PowerMac driver
#   Added the PCM beep support.
#   
#   enable_beep module option is back again (default = 1).
#   Beep is emulated via PCM playback when enabled.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/ppc/powermac.c
#   2004/08/02 05:06:38+02:00 perex@suse.cz +1 -14
#   ALSA CVS update
#   D:2004/08/02 11:06:38
#   C:PPC,PPC AWACS driver,PPC Beep,PPC PMAC driver,PPC PowerMac driver
#   F:ppc/Makefile:1.5->1.6 
#   F:ppc/awacs.c:1.24->1.25 
#   F:ppc/beep.c:INITIAL->1.1 
#   F:ppc/pmac.c:1.33->1.34 
#   F:ppc/pmac.h:1.15->1.16 
#   F:ppc/powermac.c:1.19->1.20 
#   L:Added the PCM beep support.
#   L:
#   L:enable_beep module option is back again (default = 1).
#   L:Beep is emulated via PCM playback when enabled.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/ppc/pmac.h
#   2004/08/02 05:06:38+02:00 perex@suse.cz +6 -5
#   ALSA CVS update
#   D:2004/08/02 11:06:38
#   C:PPC,PPC AWACS driver,PPC Beep,PPC PMAC driver,PPC PowerMac driver
#   F:ppc/Makefile:1.5->1.6 
#   F:ppc/awacs.c:1.24->1.25 
#   F:ppc/beep.c:INITIAL->1.1 
#   F:ppc/pmac.c:1.33->1.34 
#   F:ppc/pmac.h:1.15->1.16 
#   F:ppc/powermac.c:1.19->1.20 
#   L:Added the PCM beep support.
#   L:
#   L:enable_beep module option is back again (default = 1).
#   L:Beep is emulated via PCM playback when enabled.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/ppc/pmac.c
#   2004/08/02 05:06:38+02:00 perex@suse.cz +33 -2
#   ALSA CVS update
#   D:2004/08/02 11:06:38
#   C:PPC,PPC AWACS driver,PPC Beep,PPC PMAC driver,PPC PowerMac driver
#   F:ppc/Makefile:1.5->1.6 
#   F:ppc/awacs.c:1.24->1.25 
#   F:ppc/beep.c:INITIAL->1.1 
#   F:ppc/pmac.c:1.33->1.34 
#   F:ppc/pmac.h:1.15->1.16 
#   F:ppc/powermac.c:1.19->1.20 
#   L:Added the PCM beep support.
#   L:
#   L:enable_beep module option is back again (default = 1).
#   L:Beep is emulated via PCM playback when enabled.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/ppc/awacs.c
#   2004/08/02 05:06:38+02:00 perex@suse.cz +20 -1
#   ALSA CVS update
#   D:2004/08/02 11:06:38
#   C:PPC,PPC AWACS driver,PPC Beep,PPC PMAC driver,PPC PowerMac driver
#   F:ppc/Makefile:1.5->1.6 
#   F:ppc/awacs.c:1.24->1.25 
#   F:ppc/beep.c:INITIAL->1.1 
#   F:ppc/pmac.c:1.33->1.34 
#   F:ppc/pmac.h:1.15->1.16 
#   F:ppc/powermac.c:1.19->1.20 
#   L:Added the PCM beep support.
#   L:
#   L:enable_beep module option is back again (default = 1).
#   L:Beep is emulated via PCM playback when enabled.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/ppc/Makefile
#   2004/08/02 05:06:38+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/08/02 11:06:38
#   C:PPC,PPC AWACS driver,PPC Beep,PPC PMAC driver,PPC PowerMac driver
#   F:ppc/Makefile:1.5->1.6 
#   F:ppc/awacs.c:1.24->1.25 
#   F:ppc/beep.c:INITIAL->1.1 
#   F:ppc/pmac.c:1.33->1.34 
#   F:ppc/pmac.h:1.15->1.16 
#   F:ppc/powermac.c:1.19->1.20 
#   L:Added the PCM beep support.
#   L:
#   L:enable_beep module option is back again (default = 1).
#   L:Beep is emulated via PCM playback when enabled.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/ppc/beep.c
#   2004/08/02 16:06:03+02:00 perex@suse.cz +262 -0
#   ALSA CVS update
#   D:2004/08/02 11:06:38
#   C:PPC,PPC AWACS driver,PPC Beep,PPC PMAC driver,PPC PowerMac driver
#   F:ppc/Makefile:1.5->1.6 
#   F:ppc/awacs.c:1.24->1.25 
#   F:ppc/beep.c:INITIAL->1.1 
#   F:ppc/pmac.c:1.33->1.34 
#   F:ppc/pmac.h:1.15->1.16 
#   F:ppc/powermac.c:1.19->1.20 
#   L:Added the PCM beep support.
#   L:
#   L:enable_beep module option is back again (default = 1).
#   L:Beep is emulated via PCM playback when enabled.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/ppc/beep.c
#   2004/08/02 16:06:03+02:00 perex@suse.cz +0 -0
#   BitKeeper file /home/perex/bk/linux-sound/work/sound/ppc/beep.c
# 
# ChangeSet
#   2004/08/02 15:43:49+02:00 perex@suse.cz 
#   Merge
# 
# sound/pci/rme9652/hdsp.c
#   2004/08/02 15:43:26+02:00 perex@suse.cz +1 -2
#   SCCS merged
# 
# sound/pci/ice1712/ice1724.c
#   2004/08/02 15:40:06+02:00 perex@suse.cz +0 -0
#   SCCS merged
# 
# sound/core/control.c
#   2004/08/02 15:37:32+02:00 perex@suse.cz +1 -3
#   SCCS merged
# 
# sound/usb/usbmixer.c
#   2004/08/02 15:20:27+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/usb/usbaudio.c
#   2004/08/02 15:20:26+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/ppc/pmac.c
#   2004/08/02 15:20:26+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/ppc/Kconfig
#   2004/08/02 15:20:26+02:00 perex@suse.cz +0 -4
#   Auto merged
# 
# sound/pci/nm256/nm256.c
#   2004/08/02 15:20:25+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/pci/ice1712/ice1712.c
#   2004/08/02 15:20:25+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/pci/sonicvibes.c
#   2004/08/02 15:20:24+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/pci/maestro3.c
#   2004/08/02 15:20:24+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/pci/intel8x0m.c
#   2004/08/02 15:20:24+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/pci/es1968.c
#   2004/08/02 15:20:24+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/pci/azt3328.c
#   2004/08/02 15:20:23+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/isa/wavefront/wavefront_fx.c
#   2004/08/02 15:20:23+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/core/seq/seq_clientmgr.c
#   2004/08/02 15:20:23+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/core/oss/pcm_oss.c
#   2004/08/02 15:20:23+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/core/ioctl32/pcm32.c
#   2004/08/02 15:20:22+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# include/sound/asound.h
#   2004/08/02 15:20:22+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/02 14:53:29+02:00 perex@suse.cz 
#   Merge
# 
# sound/pci/ice1712/ice1724.c
#   2004/08/02 14:53:06+02:00 perex@suse.cz +0 -1
#   SCCS merged
# 
# sound/pci/au88x0/au88x0_a3d.c
#   2004/08/02 14:47:11+02:00 perex@suse.cz +0 -4
#   SCCS merged
# 
# sound/usb/usbmixer.c
#   2004/08/02 14:19:30+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/usb/usbaudio.c
#   2004/08/02 14:19:30+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/ppc/pmac.c
#   2004/08/02 14:19:29+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/pci/rme9652/hdsp.c
#   2004/08/02 14:19:29+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/pci/nm256/nm256.c
#   2004/08/02 14:19:29+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/pci/sonicvibes.c
#   2004/08/02 14:19:28+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/pci/ice1712/ice1712.c
#   2004/08/02 14:19:28+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/pci/au88x0/au88x0.h
#   2004/08/02 14:19:28+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/pci/maestro3.c
#   2004/08/02 14:19:27+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/pci/intel8x0m.c
#   2004/08/02 14:19:27+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/pci/es1968.c
#   2004/08/02 14:19:27+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/pci/azt3328.c
#   2004/08/02 14:19:27+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/isa/wavefront/wavefront_synth.c
#   2004/08/02 14:19:26+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/isa/sb/sb8_main.c
#   2004/08/02 14:19:26+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/isa/sb/emu8000_pcm.c
#   2004/08/02 14:19:26+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/isa/gus/gus_mem.c
#   2004/08/02 14:19:26+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/isa/Kconfig
#   2004/08/02 14:19:26+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/drivers/vx/vx_pcm.c
#   2004/08/02 14:19:26+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/drivers/serial-u16550.c
#   2004/08/02 14:19:26+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/core/seq/seq_clientmgr.c
#   2004/08/02 14:19:25+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/core/pcm.c
#   2004/08/02 14:19:25+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/core/oss/pcm_oss.c
#   2004/08/02 14:19:25+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/core/ioctl32/pcm32.c
#   2004/08/02 14:19:25+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/core/ioctl32/ioctl32.c
#   2004/08/02 14:19:25+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/core/control.c
#   2004/08/02 14:19:25+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# mm/slab.c
#   2004/08/02 14:19:24+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# include/sound/asound.h
#   2004/08/02 14:19:24+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/02 11:27:35+02:00 perex@suse.cz 
#   ALSA CVS update
#   IOCTL32 emulation
#   Added the wrapper for sync_ptr and hwsync ioctls.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/ioctl32/pcm32.c
#   2004/07/30 13:21:35+02:00 perex@suse.cz +43 -0
#   ALSA CVS update
#   D:2004/07/30 19:21:35
#   C:IOCTL32 emulation
#   F:core/ioctl32/pcm32.c:1.18->1.19 
#   L:Added the wrapper for sync_ptr and hwsync ioctls.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/08/02 11:26:23+02:00 perex@suse.cz 
#   ALSA CVS update
#   ICE1712 driver
#   Added the support of ZNF3-250 (supposed to be ZNF3-150 compatible).
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/vt1720_mobo.h
#   2004/07/30 10:28:49+02:00 perex@suse.cz +3 -1
#   ALSA CVS update
#   D:2004/07/30 16:28:49
#   C:ICE1712 driver
#   F:pci/ice1712/vt1720_mobo.c:1.1->1.2 
#   F:pci/ice1712/vt1720_mobo.h:1.1->1.2 
#   L:Added the support of ZNF3-250 (supposed to be ZNF3-150 compatible).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/vt1720_mobo.c
#   2004/07/30 10:28:49+02:00 perex@suse.cz +9 -0
#   ALSA CVS update
#   D:2004/07/30 16:28:49
#   C:ICE1712 driver
#   F:pci/ice1712/vt1720_mobo.c:1.1->1.2 
#   F:pci/ice1712/vt1720_mobo.h:1.1->1.2 
#   L:Added the support of ZNF3-250 (supposed to be ZNF3-150 compatible).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/08/02 11:25:26+02:00 perex@suse.cz 
#   ALSA CVS update
#   Intel8x0 driver
#   Added an ac97 quirk for ICH/AD1885 mobo.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/intel8x0.c
#   2004/07/30 10:27:34+02:00 perex@suse.cz +6 -0
#   ALSA CVS update
#   D:2004/07/30 16:27:34
#   C:Intel8x0 driver
#   F:pci/intel8x0.c:1.155->1.156 
#   L:Added an ac97 quirk for ICH/AD1885 mobo.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/08/02 11:24:30+02:00 perex@suse.cz 
#   ALSA CVS update
#   Intel8x0 driver
#   Fixed the handling of unknown irqs on ICH5.
#   
#   This patch fixes (hopefully) the handling of unkown irqs triggered
#   on some ICH5 mobo.  Also, free_irq() is moved before releasing
#   i/o ports to avoid hang-up at removal.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/intel8x0.c
#   2004/07/30 10:22:12+02:00 perex@suse.cz +9 -2
#   ALSA CVS update
#   D:2004/07/30 16:22:12
#   C:Intel8x0 driver
#   F:pci/intel8x0.c:1.154->1.155 
#   L:Fixed the handling of unknown irqs on ICH5.
#   L:
#   L:This patch fixes (hopefully) the handling of unkown irqs triggered
#   L:on some ICH5 mobo.  Also, free_irq() is moved before releasing
#   L:i/o ports to avoid hang-up at removal.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/08/02 11:23:29+02:00 perex@suse.cz 
#   ALSA CVS update
#   PCI drivers,Intel8x0-modem driver
#   Added the support of Nvidia modem.
#   
#   Signed-off-by: Sasha Khapyorsky <sashak@smlink.com>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/intel8x0m.c
#   2004/07/30 10:20:47+02:00 perex@suse.cz +6 -3
#   ALSA CVS update
#   D:2004/07/30 16:20:47
#   C:PCI drivers,Intel8x0-modem driver
#   F:pci/Kconfig:1.29->1.30 
#   F:pci/intel8x0m.c:1.14->1.15 
#   L:Added the support of Nvidia modem.
#   Signed-off-by: Sasha Khapyorsky <sashak@smlink.com>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/Kconfig
#   2004/07/30 10:20:47+02:00 perex@suse.cz +3 -3
#   ALSA CVS update
#   D:2004/07/30 16:20:47
#   C:PCI drivers,Intel8x0-modem driver
#   F:pci/Kconfig:1.29->1.30 
#   F:pci/intel8x0m.c:1.14->1.15 
#   L:Added the support of Nvidia modem.
#   Signed-off-by: Sasha Khapyorsky <sashak@smlink.com>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/08/02 11:22:30+02:00 perex@suse.cz 
#   ALSA CVS update
#   PARISC Harmony driver
#   Clean up DMA buffer allocation routines.
#   
#   - snd_dma_alloc_pages*() take the device type and device pointer
#     directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#     instance.
#   
#   - snd_dma_device struct is removed in each driver's instance (no longer
#     needed due to the change above).
#   
#   - snd_malloc_pages_fallback() is removed since it's no longer used.
#   
#   - The buffer reservation / preallocation in snd-page-alloc module is
#     performed only when the buffer id is given.  Normal PCM buffers won't
#     be reserved any more (unless the driver specifies).  The module keeps
#     the linked list of free-reserved buffers, instead of the whole buffers
#     Reservation is done via snd_dma_reserve_buf(), and retrieved via
#     snd_dma_get_reserved_buf()).
#   
#   - Other misc clean-ups/fixes.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/parisc/harmony.c
#   2004/07/30 08:23:01+02:00 perex@suse.cz +9 -3
#   ALSA CVS update
#   D:2004/07/30 14:23:01
#   C:PARISC Harmony driver
#   F:parisc/harmony.c:1.15->1.16 
#   L:Clean up DMA buffer allocation routines.
#   L:
#   L:- snd_dma_alloc_pages*() take the device type and device pointer
#   L:  directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#   L:  instance.
#   L:
#   L:- snd_dma_device struct is removed in each driver's instance (no longer
#   L:  needed due to the change above).
#   L:
#   L:- snd_malloc_pages_fallback() is removed since it's no longer used.
#   L:
#   L:- The buffer reservation / preallocation in snd-page-alloc module is
#   L:  performed only when the buffer id is given.  Normal PCM buffers won't
#   L:  be reserved any more (unless the driver specifies).  The module keeps
#   L:  the linked list of free-reserved buffers, instead of the whole buffers
#   L:  Reservation is done via snd_dma_reserve_buf(), and retrieved via
#   L:  snd_dma_get_reserved_buf()).
#   L:
#   L:- Other misc clean-ups/fixes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/08/02 11:21:26+02:00 perex@suse.cz 
#   ALSA CVS update
#   Memalloc module,PCM Midlevel,CS46xx driver,EMU10K1/EMU10K2 driver
#   ALSA Core,YMFPCI driver,Sound Scape driver,ATIIXP driver
#   ATIIXP-modem driver,BT87x driver,ENS1370/1+ driver,ES1968 driver
#   Intel8x0 driver,Intel8x0-modem driver,VIA82xx driver,KORG1212 driver
#   MIXART driver,RME HDSP driver,RME9652 driver,Trident driver
#   Clean up DMA buffer allocation routines.
#   
#   - snd_dma_alloc_pages*() take the device type and device pointer
#     directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#     instance.
#   
#   - snd_dma_device struct is removed in each driver's instance (no longer
#     needed due to the change above).
#   
#   - snd_malloc_pages_fallback() is removed since it's no longer used.
#   
#   - The buffer reservation / preallocation in snd-page-alloc module is
#     performed only when the buffer id is given.  Normal PCM buffers won't
#     be reserved any more (unless the driver specifies).  The module keeps
#     the linked list of free-reserved buffers, instead of the whole buffers
#     Reservation is done via snd_dma_reserve_buf(), and retrieved via
#     snd_dma_get_reserved_buf()).
#   
#   - Other misc clean-ups/fixes.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ymfpci/ymfpci_main.c
#   2004/07/30 07:57:27+02:00 perex@suse.cz +6 -8
#   ALSA CVS update
#   D:2004/07/30 13:57:16
#   C:Memalloc module,PCM Midlevel,CS46xx driver,EMU10K1/EMU10K2 driver
#   C:ALSA Core,YMFPCI driver,Sound Scape driver,ATIIXP driver
#   C:ATIIXP-modem driver,BT87x driver,ENS1370/1+ driver,ES1968 driver
#   C:Intel8x0 driver,Intel8x0-modem driver,VIA82xx driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Trident driver
#   F:core/memalloc.c:1.35->1.36 
#   F:core/pcm_memory.c:1.31->1.32 
#   F:core/sgbuf.c:1.7->1.8 
#   F:include/cs46xx.h:1.20->1.21 
#   F:include/emu10k1.h:1.44->1.45 
#   F:include/memalloc.h:1.5->1.6 
#   F:include/pcm.h:1.45->1.46 
#   F:include/ymfpci.h:1.15->1.16 
#   F:isa/sscape.c:1.15->1.16 
#   F:pci/atiixp.c:1.20->1.21 
#   F:pci/atiixp_modem.c:1.5->1.6 
#   F:pci/bt87x.c:1.10->1.11 
#   F:pci/ens1370.c:1.66->1.67 
#   F:pci/es1968.c:1.74->1.75 
#   F:pci/intel8x0.c:1.153->1.154 
#   F:pci/intel8x0m.c:1.13->1.14 
#   F:pci/via82xx.c:1.115->1.116 
#   F:pci/cs46xx/cs46xx_lib.c:1.81->1.82 
#   F:pci/emu10k1/emu10k1_main.c:1.37->1.38 
#   F:pci/emu10k1/emufx.c:1.57->1.58 
#   F:pci/emu10k1/memory.c:1.18->1.19 
#   F:pci/korg1212/korg1212.c:1.45->1.46 
#   F:pci/mixart/mixart.c:1.15->1.16 
#   F:pci/mixart/mixart.h:1.4->1.5 
#   F:pci/rme9652/hdsp.c:1.65->1.66 
#   F:pci/rme9652/rme9652.c:1.51->1.52 
#   F:pci/trident/trident_main.c:1.63->1.64 
#   F:pci/trident/trident_memory.c:1.16->1.17 
#   F:pci/trident/trident_synth.c:1.14->1.15 
#   F:pci/ymfpci/ymfpci_main.c:1.56->1.57 
#   L:Clean up DMA buffer allocation routines.
#   L:
#   L:- snd_dma_alloc_pages*() take the device type and device pointer
#   L:  directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#   L:  instance.
#   L:
#   L:- snd_dma_device struct is removed in each driver's instance (no longer
#   L:  needed due to the change above).
#   L:
#   L:- snd_malloc_pages_fallback() is removed since it's no longer used.
#   L:
#   L:- The buffer reservation / preallocation in snd-page-alloc module is
#   L:  performed only when the buffer id is given.  Normal PCM buffers won't
#   L:  be reserved any more (unless the driver specifies).  The module keeps
#   L:  the linked list of free-reserved buffers, instead of the whole buffers
#   L:  Reservation is done via snd_dma_reserve_buf(), and retrieved via
#   L:  snd_dma_get_reserved_buf()).
#   L:
#   L:- Other misc clean-ups/fixes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/via82xx.c
#   2004/07/30 07:57:24+02:00 perex@suse.cz +4 -9
#   ALSA CVS update
#   D:2004/07/30 13:57:16
#   C:Memalloc module,PCM Midlevel,CS46xx driver,EMU10K1/EMU10K2 driver
#   C:ALSA Core,YMFPCI driver,Sound Scape driver,ATIIXP driver
#   C:ATIIXP-modem driver,BT87x driver,ENS1370/1+ driver,ES1968 driver
#   C:Intel8x0 driver,Intel8x0-modem driver,VIA82xx driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Trident driver
#   F:core/memalloc.c:1.35->1.36 
#   F:core/pcm_memory.c:1.31->1.32 
#   F:core/sgbuf.c:1.7->1.8 
#   F:include/cs46xx.h:1.20->1.21 
#   F:include/emu10k1.h:1.44->1.45 
#   F:include/memalloc.h:1.5->1.6 
#   F:include/pcm.h:1.45->1.46 
#   F:include/ymfpci.h:1.15->1.16 
#   F:isa/sscape.c:1.15->1.16 
#   F:pci/atiixp.c:1.20->1.21 
#   F:pci/atiixp_modem.c:1.5->1.6 
#   F:pci/bt87x.c:1.10->1.11 
#   F:pci/ens1370.c:1.66->1.67 
#   F:pci/es1968.c:1.74->1.75 
#   F:pci/intel8x0.c:1.153->1.154 
#   F:pci/intel8x0m.c:1.13->1.14 
#   F:pci/via82xx.c:1.115->1.116 
#   F:pci/cs46xx/cs46xx_lib.c:1.81->1.82 
#   F:pci/emu10k1/emu10k1_main.c:1.37->1.38 
#   F:pci/emu10k1/emufx.c:1.57->1.58 
#   F:pci/emu10k1/memory.c:1.18->1.19 
#   F:pci/korg1212/korg1212.c:1.45->1.46 
#   F:pci/mixart/mixart.c:1.15->1.16 
#   F:pci/mixart/mixart.h:1.4->1.5 
#   F:pci/rme9652/hdsp.c:1.65->1.66 
#   F:pci/rme9652/rme9652.c:1.51->1.52 
#   F:pci/trident/trident_main.c:1.63->1.64 
#   F:pci/trident/trident_memory.c:1.16->1.17 
#   F:pci/trident/trident_synth.c:1.14->1.15 
#   F:pci/ymfpci/ymfpci_main.c:1.56->1.57 
#   L:Clean up DMA buffer allocation routines.
#   L:
#   L:- snd_dma_alloc_pages*() take the device type and device pointer
#   L:  directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#   L:  instance.
#   L:
#   L:- snd_dma_device struct is removed in each driver's instance (no longer
#   L:  needed due to the change above).
#   L:
#   L:- snd_malloc_pages_fallback() is removed since it's no longer used.
#   L:
#   L:- The buffer reservation / preallocation in snd-page-alloc module is
#   L:  performed only when the buffer id is given.  Normal PCM buffers won't
#   L:  be reserved any more (unless the driver specifies).  The module keeps
#   L:  the linked list of free-reserved buffers, instead of the whole buffers
#   L:  Reservation is done via snd_dma_reserve_buf(), and retrieved via
#   L:  snd_dma_get_reserved_buf()).
#   L:
#   L:- Other misc clean-ups/fixes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/trident/trident_synth.c
#   2004/07/30 07:57:27+02:00 perex@suse.cz +16 -9
#   ALSA CVS update
#   D:2004/07/30 13:57:16
#   C:Memalloc module,PCM Midlevel,CS46xx driver,EMU10K1/EMU10K2 driver
#   C:ALSA Core,YMFPCI driver,Sound Scape driver,ATIIXP driver
#   C:ATIIXP-modem driver,BT87x driver,ENS1370/1+ driver,ES1968 driver
#   C:Intel8x0 driver,Intel8x0-modem driver,VIA82xx driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Trident driver
#   F:core/memalloc.c:1.35->1.36 
#   F:core/pcm_memory.c:1.31->1.32 
#   F:core/sgbuf.c:1.7->1.8 
#   F:include/cs46xx.h:1.20->1.21 
#   F:include/emu10k1.h:1.44->1.45 
#   F:include/memalloc.h:1.5->1.6 
#   F:include/pcm.h:1.45->1.46 
#   F:include/ymfpci.h:1.15->1.16 
#   F:isa/sscape.c:1.15->1.16 
#   F:pci/atiixp.c:1.20->1.21 
#   F:pci/atiixp_modem.c:1.5->1.6 
#   F:pci/bt87x.c:1.10->1.11 
#   F:pci/ens1370.c:1.66->1.67 
#   F:pci/es1968.c:1.74->1.75 
#   F:pci/intel8x0.c:1.153->1.154 
#   F:pci/intel8x0m.c:1.13->1.14 
#   F:pci/via82xx.c:1.115->1.116 
#   F:pci/cs46xx/cs46xx_lib.c:1.81->1.82 
#   F:pci/emu10k1/emu10k1_main.c:1.37->1.38 
#   F:pci/emu10k1/emufx.c:1.57->1.58 
#   F:pci/emu10k1/memory.c:1.18->1.19 
#   F:pci/korg1212/korg1212.c:1.45->1.46 
#   F:pci/mixart/mixart.c:1.15->1.16 
#   F:pci/mixart/mixart.h:1.4->1.5 
#   F:pci/rme9652/hdsp.c:1.65->1.66 
#   F:pci/rme9652/rme9652.c:1.51->1.52 
#   F:pci/trident/trident_main.c:1.63->1.64 
#   F:pci/trident/trident_memory.c:1.16->1.17 
#   F:pci/trident/trident_synth.c:1.14->1.15 
#   F:pci/ymfpci/ymfpci_main.c:1.56->1.57 
#   L:Clean up DMA buffer allocation routines.
#   L:
#   L:- snd_dma_alloc_pages*() take the device type and device pointer
#   L:  directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#   L:  instance.
#   L:
#   L:- snd_dma_device struct is removed in each driver's instance (no longer
#   L:  needed due to the change above).
#   L:
#   L:- snd_malloc_pages_fallback() is removed since it's no longer used.
#   L:
#   L:- The buffer reservation / preallocation in snd-page-alloc module is
#   L:  performed only when the buffer id is given.  Normal PCM buffers won't
#   L:  be reserved any more (unless the driver specifies).  The module keeps
#   L:  the linked list of free-reserved buffers, instead of the whole buffers
#   L:  Reservation is done via snd_dma_reserve_buf(), and retrieved via
#   L:  snd_dma_get_reserved_buf()).
#   L:
#   L:- Other misc clean-ups/fixes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/trident/trident_memory.c
#   2004/07/30 07:57:27+02:00 perex@suse.cz +8 -4
#   ALSA CVS update
#   D:2004/07/30 13:57:16
#   C:Memalloc module,PCM Midlevel,CS46xx driver,EMU10K1/EMU10K2 driver
#   C:ALSA Core,YMFPCI driver,Sound Scape driver,ATIIXP driver
#   C:ATIIXP-modem driver,BT87x driver,ENS1370/1+ driver,ES1968 driver
#   C:Intel8x0 driver,Intel8x0-modem driver,VIA82xx driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Trident driver
#   F:core/memalloc.c:1.35->1.36 
#   F:core/pcm_memory.c:1.31->1.32 
#   F:core/sgbuf.c:1.7->1.8 
#   F:include/cs46xx.h:1.20->1.21 
#   F:include/emu10k1.h:1.44->1.45 
#   F:include/memalloc.h:1.5->1.6 
#   F:include/pcm.h:1.45->1.46 
#   F:include/ymfpci.h:1.15->1.16 
#   F:isa/sscape.c:1.15->1.16 
#   F:pci/atiixp.c:1.20->1.21 
#   F:pci/atiixp_modem.c:1.5->1.6 
#   F:pci/bt87x.c:1.10->1.11 
#   F:pci/ens1370.c:1.66->1.67 
#   F:pci/es1968.c:1.74->1.75 
#   F:pci/intel8x0.c:1.153->1.154 
#   F:pci/intel8x0m.c:1.13->1.14 
#   F:pci/via82xx.c:1.115->1.116 
#   F:pci/cs46xx/cs46xx_lib.c:1.81->1.82 
#   F:pci/emu10k1/emu10k1_main.c:1.37->1.38 
#   F:pci/emu10k1/emufx.c:1.57->1.58 
#   F:pci/emu10k1/memory.c:1.18->1.19 
#   F:pci/korg1212/korg1212.c:1.45->1.46 
#   F:pci/mixart/mixart.c:1.15->1.16 
#   F:pci/mixart/mixart.h:1.4->1.5 
#   F:pci/rme9652/hdsp.c:1.65->1.66 
#   F:pci/rme9652/rme9652.c:1.51->1.52 
#   F:pci/trident/trident_main.c:1.63->1.64 
#   F:pci/trident/trident_memory.c:1.16->1.17 
#   F:pci/trident/trident_synth.c:1.14->1.15 
#   F:pci/ymfpci/ymfpci_main.c:1.56->1.57 
#   L:Clean up DMA buffer allocation routines.
#   L:
#   L:- snd_dma_alloc_pages*() take the device type and device pointer
#   L:  directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#   L:  instance.
#   L:
#   L:- snd_dma_device struct is removed in each driver's instance (no longer
#   L:  needed due to the change above).
#   L:
#   L:- snd_malloc_pages_fallback() is removed since it's no longer used.
#   L:
#   L:- The buffer reservation / preallocation in snd-page-alloc module is
#   L:  performed only when the buffer id is given.  Normal PCM buffers won't
#   L:  be reserved any more (unless the driver specifies).  The module keeps
#   L:  the linked list of free-reserved buffers, instead of the whole buffers
#   L:  Reservation is done via snd_dma_reserve_buf(), and retrieved via
#   L:  snd_dma_get_reserved_buf()).
#   L:
#   L:- Other misc clean-ups/fixes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/trident/trident_main.c
#   2004/07/30 07:57:26+02:00 perex@suse.cz +6 -8
#   ALSA CVS update
#   D:2004/07/30 13:57:16
#   C:Memalloc module,PCM Midlevel,CS46xx driver,EMU10K1/EMU10K2 driver
#   C:ALSA Core,YMFPCI driver,Sound Scape driver,ATIIXP driver
#   C:ATIIXP-modem driver,BT87x driver,ENS1370/1+ driver,ES1968 driver
#   C:Intel8x0 driver,Intel8x0-modem driver,VIA82xx driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Trident driver
#   F:core/memalloc.c:1.35->1.36 
#   F:core/pcm_memory.c:1.31->1.32 
#   F:core/sgbuf.c:1.7->1.8 
#   F:include/cs46xx.h:1.20->1.21 
#   F:include/emu10k1.h:1.44->1.45 
#   F:include/memalloc.h:1.5->1.6 
#   F:include/pcm.h:1.45->1.46 
#   F:include/ymfpci.h:1.15->1.16 
#   F:isa/sscape.c:1.15->1.16 
#   F:pci/atiixp.c:1.20->1.21 
#   F:pci/atiixp_modem.c:1.5->1.6 
#   F:pci/bt87x.c:1.10->1.11 
#   F:pci/ens1370.c:1.66->1.67 
#   F:pci/es1968.c:1.74->1.75 
#   F:pci/intel8x0.c:1.153->1.154 
#   F:pci/intel8x0m.c:1.13->1.14 
#   F:pci/via82xx.c:1.115->1.116 
#   F:pci/cs46xx/cs46xx_lib.c:1.81->1.82 
#   F:pci/emu10k1/emu10k1_main.c:1.37->1.38 
#   F:pci/emu10k1/emufx.c:1.57->1.58 
#   F:pci/emu10k1/memory.c:1.18->1.19 
#   F:pci/korg1212/korg1212.c:1.45->1.46 
#   F:pci/mixart/mixart.c:1.15->1.16 
#   F:pci/mixart/mixart.h:1.4->1.5 
#   F:pci/rme9652/hdsp.c:1.65->1.66 
#   F:pci/rme9652/rme9652.c:1.51->1.52 
#   F:pci/trident/trident_main.c:1.63->1.64 
#   F:pci/trident/trident_memory.c:1.16->1.17 
#   F:pci/trident/trident_synth.c:1.14->1.15 
#   F:pci/ymfpci/ymfpci_main.c:1.56->1.57 
#   L:Clean up DMA buffer allocation routines.
#   L:
#   L:- snd_dma_alloc_pages*() take the device type and device pointer
#   L:  directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#   L:  instance.
#   L:
#   L:- snd_dma_device struct is removed in each driver's instance (no longer
#   L:  needed due to the change above).
#   L:
#   L:- snd_malloc_pages_fallback() is removed since it's no longer used.
#   L:
#   L:- The buffer reservation / preallocation in snd-page-alloc module is
#   L:  performed only when the buffer id is given.  Normal PCM buffers won't
#   L:  be reserved any more (unless the driver specifies).  The module keeps
#   L:  the linked list of free-reserved buffers, instead of the whole buffers
#   L:  Reservation is done via snd_dma_reserve_buf(), and retrieved via
#   L:  snd_dma_get_reserved_buf()).
#   L:
#   L:- Other misc clean-ups/fixes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/rme9652/rme9652.c
#   2004/07/30 07:57:26+02:00 perex@suse.cz +24 -76
#   ALSA CVS update
#   D:2004/07/30 13:57:16
#   C:Memalloc module,PCM Midlevel,CS46xx driver,EMU10K1/EMU10K2 driver
#   C:ALSA Core,YMFPCI driver,Sound Scape driver,ATIIXP driver
#   C:ATIIXP-modem driver,BT87x driver,ENS1370/1+ driver,ES1968 driver
#   C:Intel8x0 driver,Intel8x0-modem driver,VIA82xx driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Trident driver
#   F:core/memalloc.c:1.35->1.36 
#   F:core/pcm_memory.c:1.31->1.32 
#   F:core/sgbuf.c:1.7->1.8 
#   F:include/cs46xx.h:1.20->1.21 
#   F:include/emu10k1.h:1.44->1.45 
#   F:include/memalloc.h:1.5->1.6 
#   F:include/pcm.h:1.45->1.46 
#   F:include/ymfpci.h:1.15->1.16 
#   F:isa/sscape.c:1.15->1.16 
#   F:pci/atiixp.c:1.20->1.21 
#   F:pci/atiixp_modem.c:1.5->1.6 
#   F:pci/bt87x.c:1.10->1.11 
#   F:pci/ens1370.c:1.66->1.67 
#   F:pci/es1968.c:1.74->1.75 
#   F:pci/intel8x0.c:1.153->1.154 
#   F:pci/intel8x0m.c:1.13->1.14 
#   F:pci/via82xx.c:1.115->1.116 
#   F:pci/cs46xx/cs46xx_lib.c:1.81->1.82 
#   F:pci/emu10k1/emu10k1_main.c:1.37->1.38 
#   F:pci/emu10k1/emufx.c:1.57->1.58 
#   F:pci/emu10k1/memory.c:1.18->1.19 
#   F:pci/korg1212/korg1212.c:1.45->1.46 
#   F:pci/mixart/mixart.c:1.15->1.16 
#   F:pci/mixart/mixart.h:1.4->1.5 
#   F:pci/rme9652/hdsp.c:1.65->1.66 
#   F:pci/rme9652/rme9652.c:1.51->1.52 
#   F:pci/trident/trident_main.c:1.63->1.64 
#   F:pci/trident/trident_memory.c:1.16->1.17 
#   F:pci/trident/trident_synth.c:1.14->1.15 
#   F:pci/ymfpci/ymfpci_main.c:1.56->1.57 
#   L:Clean up DMA buffer allocation routines.
#   L:
#   L:- snd_dma_alloc_pages*() take the device type and device pointer
#   L:  directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#   L:  instance.
#   L:
#   L:- snd_dma_device struct is removed in each driver's instance (no longer
#   L:  needed due to the change above).
#   L:
#   L:- snd_malloc_pages_fallback() is removed since it's no longer used.
#   L:
#   L:- The buffer reservation / preallocation in snd-page-alloc module is
#   L:  performed only when the buffer id is given.  Normal PCM buffers won't
#   L:  be reserved any more (unless the driver specifies).  The module keeps
#   L:  the linked list of free-reserved buffers, instead of the whole buffers
#   L:  Reservation is done via snd_dma_reserve_buf(), and retrieved via
#   L:  snd_dma_get_reserved_buf()).
#   L:
#   L:- Other misc clean-ups/fixes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/rme9652/hdsp.c
#   2004/07/30 07:57:26+02:00 perex@suse.cz +25 -76
#   ALSA CVS update
#   D:2004/07/30 13:57:16
#   C:Memalloc module,PCM Midlevel,CS46xx driver,EMU10K1/EMU10K2 driver
#   C:ALSA Core,YMFPCI driver,Sound Scape driver,ATIIXP driver
#   C:ATIIXP-modem driver,BT87x driver,ENS1370/1+ driver,ES1968 driver
#   C:Intel8x0 driver,Intel8x0-modem driver,VIA82xx driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Trident driver
#   F:core/memalloc.c:1.35->1.36 
#   F:core/pcm_memory.c:1.31->1.32 
#   F:core/sgbuf.c:1.7->1.8 
#   F:include/cs46xx.h:1.20->1.21 
#   F:include/emu10k1.h:1.44->1.45 
#   F:include/memalloc.h:1.5->1.6 
#   F:include/pcm.h:1.45->1.46 
#   F:include/ymfpci.h:1.15->1.16 
#   F:isa/sscape.c:1.15->1.16 
#   F:pci/atiixp.c:1.20->1.21 
#   F:pci/atiixp_modem.c:1.5->1.6 
#   F:pci/bt87x.c:1.10->1.11 
#   F:pci/ens1370.c:1.66->1.67 
#   F:pci/es1968.c:1.74->1.75 
#   F:pci/intel8x0.c:1.153->1.154 
#   F:pci/intel8x0m.c:1.13->1.14 
#   F:pci/via82xx.c:1.115->1.116 
#   F:pci/cs46xx/cs46xx_lib.c:1.81->1.82 
#   F:pci/emu10k1/emu10k1_main.c:1.37->1.38 
#   F:pci/emu10k1/emufx.c:1.57->1.58 
#   F:pci/emu10k1/memory.c:1.18->1.19 
#   F:pci/korg1212/korg1212.c:1.45->1.46 
#   F:pci/mixart/mixart.c:1.15->1.16 
#   F:pci/mixart/mixart.h:1.4->1.5 
#   F:pci/rme9652/hdsp.c:1.65->1.66 
#   F:pci/rme9652/rme9652.c:1.51->1.52 
#   F:pci/trident/trident_main.c:1.63->1.64 
#   F:pci/trident/trident_memory.c:1.16->1.17 
#   F:pci/trident/trident_synth.c:1.14->1.15 
#   F:pci/ymfpci/ymfpci_main.c:1.56->1.57 
#   L:Clean up DMA buffer allocation routines.
#   L:
#   L:- snd_dma_alloc_pages*() take the device type and device pointer
#   L:  directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#   L:  instance.
#   L:
#   L:- snd_dma_device struct is removed in each driver's instance (no longer
#   L:  needed due to the change above).
#   L:
#   L:- snd_malloc_pages_fallback() is removed since it's no longer used.
#   L:
#   L:- The buffer reservation / preallocation in snd-page-alloc module is
#   L:  performed only when the buffer id is given.  Normal PCM buffers won't
#   L:  be reserved any more (unless the driver specifies).  The module keeps
#   L:  the linked list of free-reserved buffers, instead of the whole buffers
#   L:  Reservation is done via snd_dma_reserve_buf(), and retrieved via
#   L:  snd_dma_get_reserved_buf()).
#   L:
#   L:- Other misc clean-ups/fixes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/mixart/mixart.h
#   2004/07/30 07:57:26+02:00 perex@suse.cz +0 -1
#   ALSA CVS update
#   D:2004/07/30 13:57:16
#   C:Memalloc module,PCM Midlevel,CS46xx driver,EMU10K1/EMU10K2 driver
#   C:ALSA Core,YMFPCI driver,Sound Scape driver,ATIIXP driver
#   C:ATIIXP-modem driver,BT87x driver,ENS1370/1+ driver,ES1968 driver
#   C:Intel8x0 driver,Intel8x0-modem driver,VIA82xx driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Trident driver
#   F:core/memalloc.c:1.35->1.36 
#   F:core/pcm_memory.c:1.31->1.32 
#   F:core/sgbuf.c:1.7->1.8 
#   F:include/cs46xx.h:1.20->1.21 
#   F:include/emu10k1.h:1.44->1.45 
#   F:include/memalloc.h:1.5->1.6 
#   F:include/pcm.h:1.45->1.46 
#   F:include/ymfpci.h:1.15->1.16 
#   F:isa/sscape.c:1.15->1.16 
#   F:pci/atiixp.c:1.20->1.21 
#   F:pci/atiixp_modem.c:1.5->1.6 
#   F:pci/bt87x.c:1.10->1.11 
#   F:pci/ens1370.c:1.66->1.67 
#   F:pci/es1968.c:1.74->1.75 
#   F:pci/intel8x0.c:1.153->1.154 
#   F:pci/intel8x0m.c:1.13->1.14 
#   F:pci/via82xx.c:1.115->1.116 
#   F:pci/cs46xx/cs46xx_lib.c:1.81->1.82 
#   F:pci/emu10k1/emu10k1_main.c:1.37->1.38 
#   F:pci/emu10k1/emufx.c:1.57->1.58 
#   F:pci/emu10k1/memory.c:1.18->1.19 
#   F:pci/korg1212/korg1212.c:1.45->1.46 
#   F:pci/mixart/mixart.c:1.15->1.16 
#   F:pci/mixart/mixart.h:1.4->1.5 
#   F:pci/rme9652/hdsp.c:1.65->1.66 
#   F:pci/rme9652/rme9652.c:1.51->1.52 
#   F:pci/trident/trident_main.c:1.63->1.64 
#   F:pci/trident/trident_memory.c:1.16->1.17 
#   F:pci/trident/trident_synth.c:1.14->1.15 
#   F:pci/ymfpci/ymfpci_main.c:1.56->1.57 
#   L:Clean up DMA buffer allocation routines.
#   L:
#   L:- snd_dma_alloc_pages*() take the device type and device pointer
#   L:  directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#   L:  instance.
#   L:
#   L:- snd_dma_device struct is removed in each driver's instance (no longer
#   L:  needed due to the change above).
#   L:
#   L:- snd_malloc_pages_fallback() is removed since it's no longer used.
#   L:
#   L:- The buffer reservation / preallocation in snd-page-alloc module is
#   L:  performed only when the buffer id is given.  Normal PCM buffers won't
#   L:  be reserved any more (unless the driver specifies).  The module keeps
#   L:  the linked list of free-reserved buffers, instead of the whole buffers
#   L:  Reservation is done via snd_dma_reserve_buf(), and retrieved via
#   L:  snd_dma_get_reserved_buf()).
#   L:
#   L:- Other misc clean-ups/fixes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/mixart/mixart.c
#   2004/07/30 07:57:26+02:00 perex@suse.cz +8 -8
#   ALSA CVS update
#   D:2004/07/30 13:57:16
#   C:Memalloc module,PCM Midlevel,CS46xx driver,EMU10K1/EMU10K2 driver
#   C:ALSA Core,YMFPCI driver,Sound Scape driver,ATIIXP driver
#   C:ATIIXP-modem driver,BT87x driver,ENS1370/1+ driver,ES1968 driver
#   C:Intel8x0 driver,Intel8x0-modem driver,VIA82xx driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Trident driver
#   F:core/memalloc.c:1.35->1.36 
#   F:core/pcm_memory.c:1.31->1.32 
#   F:core/sgbuf.c:1.7->1.8 
#   F:include/cs46xx.h:1.20->1.21 
#   F:include/emu10k1.h:1.44->1.45 
#   F:include/memalloc.h:1.5->1.6 
#   F:include/pcm.h:1.45->1.46 
#   F:include/ymfpci.h:1.15->1.16 
#   F:isa/sscape.c:1.15->1.16 
#   F:pci/atiixp.c:1.20->1.21 
#   F:pci/atiixp_modem.c:1.5->1.6 
#   F:pci/bt87x.c:1.10->1.11 
#   F:pci/ens1370.c:1.66->1.67 
#   F:pci/es1968.c:1.74->1.75 
#   F:pci/intel8x0.c:1.153->1.154 
#   F:pci/intel8x0m.c:1.13->1.14 
#   F:pci/via82xx.c:1.115->1.116 
#   F:pci/cs46xx/cs46xx_lib.c:1.81->1.82 
#   F:pci/emu10k1/emu10k1_main.c:1.37->1.38 
#   F:pci/emu10k1/emufx.c:1.57->1.58 
#   F:pci/emu10k1/memory.c:1.18->1.19 
#   F:pci/korg1212/korg1212.c:1.45->1.46 
#   F:pci/mixart/mixart.c:1.15->1.16 
#   F:pci/mixart/mixart.h:1.4->1.5 
#   F:pci/rme9652/hdsp.c:1.65->1.66 
#   F:pci/rme9652/rme9652.c:1.51->1.52 
#   F:pci/trident/trident_main.c:1.63->1.64 
#   F:pci/trident/trident_memory.c:1.16->1.17 
#   F:pci/trident/trident_synth.c:1.14->1.15 
#   F:pci/ymfpci/ymfpci_main.c:1.56->1.57 
#   L:Clean up DMA buffer allocation routines.
#   L:
#   L:- snd_dma_alloc_pages*() take the device type and device pointer
#   L:  directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#   L:  instance.
#   L:
#   L:- snd_dma_device struct is removed in each driver's instance (no longer
#   L:  needed due to the change above).
#   L:
#   L:- snd_malloc_pages_fallback() is removed since it's no longer used.
#   L:
#   L:- The buffer reservation / preallocation in snd-page-alloc module is
#   L:  performed only when the buffer id is given.  Normal PCM buffers won't
#   L:  be reserved any more (unless the driver specifies).  The module keeps
#   L:  the linked list of free-reserved buffers, instead of the whole buffers
#   L:  Reservation is done via snd_dma_reserve_buf(), and retrieved via
#   L:  snd_dma_get_reserved_buf()).
#   L:
#   L:- Other misc clean-ups/fixes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/korg1212/korg1212.c
#   2004/07/30 07:57:25+02:00 perex@suse.cz +12 -18
#   ALSA CVS update
#   D:2004/07/30 13:57:16
#   C:Memalloc module,PCM Midlevel,CS46xx driver,EMU10K1/EMU10K2 driver
#   C:ALSA Core,YMFPCI driver,Sound Scape driver,ATIIXP driver
#   C:ATIIXP-modem driver,BT87x driver,ENS1370/1+ driver,ES1968 driver
#   C:Intel8x0 driver,Intel8x0-modem driver,VIA82xx driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Trident driver
#   F:core/memalloc.c:1.35->1.36 
#   F:core/pcm_memory.c:1.31->1.32 
#   F:core/sgbuf.c:1.7->1.8 
#   F:include/cs46xx.h:1.20->1.21 
#   F:include/emu10k1.h:1.44->1.45 
#   F:include/memalloc.h:1.5->1.6 
#   F:include/pcm.h:1.45->1.46 
#   F:include/ymfpci.h:1.15->1.16 
#   F:isa/sscape.c:1.15->1.16 
#   F:pci/atiixp.c:1.20->1.21 
#   F:pci/atiixp_modem.c:1.5->1.6 
#   F:pci/bt87x.c:1.10->1.11 
#   F:pci/ens1370.c:1.66->1.67 
#   F:pci/es1968.c:1.74->1.75 
#   F:pci/intel8x0.c:1.153->1.154 
#   F:pci/intel8x0m.c:1.13->1.14 
#   F:pci/via82xx.c:1.115->1.116 
#   F:pci/cs46xx/cs46xx_lib.c:1.81->1.82 
#   F:pci/emu10k1/emu10k1_main.c:1.37->1.38 
#   F:pci/emu10k1/emufx.c:1.57->1.58 
#   F:pci/emu10k1/memory.c:1.18->1.19 
#   F:pci/korg1212/korg1212.c:1.45->1.46 
#   F:pci/mixart/mixart.c:1.15->1.16 
#   F:pci/mixart/mixart.h:1.4->1.5 
#   F:pci/rme9652/hdsp.c:1.65->1.66 
#   F:pci/rme9652/rme9652.c:1.51->1.52 
#   F:pci/trident/trident_main.c:1.63->1.64 
#   F:pci/trident/trident_memory.c:1.16->1.17 
#   F:pci/trident/trident_synth.c:1.14->1.15 
#   F:pci/ymfpci/ymfpci_main.c:1.56->1.57 
#   L:Clean up DMA buffer allocation routines.
#   L:
#   L:- snd_dma_alloc_pages*() take the device type and device pointer
#   L:  directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#   L:  instance.
#   L:
#   L:- snd_dma_device struct is removed in each driver's instance (no longer
#   L:  needed due to the change above).
#   L:
#   L:- snd_malloc_pages_fallback() is removed since it's no longer used.
#   L:
#   L:- The buffer reservation / preallocation in snd-page-alloc module is
#   L:  performed only when the buffer id is given.  Normal PCM buffers won't
#   L:  be reserved any more (unless the driver specifies).  The module keeps
#   L:  the linked list of free-reserved buffers, instead of the whole buffers
#   L:  Reservation is done via snd_dma_reserve_buf(), and retrieved via
#   L:  snd_dma_get_reserved_buf()).
#   L:
#   L:- Other misc clean-ups/fixes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/intel8x0m.c
#   2004/07/30 07:57:24+02:00 perex@suse.cz +4 -6
#   ALSA CVS update
#   D:2004/07/30 13:57:16
#   C:Memalloc module,PCM Midlevel,CS46xx driver,EMU10K1/EMU10K2 driver
#   C:ALSA Core,YMFPCI driver,Sound Scape driver,ATIIXP driver
#   C:ATIIXP-modem driver,BT87x driver,ENS1370/1+ driver,ES1968 driver
#   C:Intel8x0 driver,Intel8x0-modem driver,VIA82xx driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Trident driver
#   F:core/memalloc.c:1.35->1.36 
#   F:core/pcm_memory.c:1.31->1.32 
#   F:core/sgbuf.c:1.7->1.8 
#   F:include/cs46xx.h:1.20->1.21 
#   F:include/emu10k1.h:1.44->1.45 
#   F:include/memalloc.h:1.5->1.6 
#   F:include/pcm.h:1.45->1.46 
#   F:include/ymfpci.h:1.15->1.16 
#   F:isa/sscape.c:1.15->1.16 
#   F:pci/atiixp.c:1.20->1.21 
#   F:pci/atiixp_modem.c:1.5->1.6 
#   F:pci/bt87x.c:1.10->1.11 
#   F:pci/ens1370.c:1.66->1.67 
#   F:pci/es1968.c:1.74->1.75 
#   F:pci/intel8x0.c:1.153->1.154 
#   F:pci/intel8x0m.c:1.13->1.14 
#   F:pci/via82xx.c:1.115->1.116 
#   F:pci/cs46xx/cs46xx_lib.c:1.81->1.82 
#   F:pci/emu10k1/emu10k1_main.c:1.37->1.38 
#   F:pci/emu10k1/emufx.c:1.57->1.58 
#   F:pci/emu10k1/memory.c:1.18->1.19 
#   F:pci/korg1212/korg1212.c:1.45->1.46 
#   F:pci/mixart/mixart.c:1.15->1.16 
#   F:pci/mixart/mixart.h:1.4->1.5 
#   F:pci/rme9652/hdsp.c:1.65->1.66 
#   F:pci/rme9652/rme9652.c:1.51->1.52 
#   F:pci/trident/trident_main.c:1.63->1.64 
#   F:pci/trident/trident_memory.c:1.16->1.17 
#   F:pci/trident/trident_synth.c:1.14->1.15 
#   F:pci/ymfpci/ymfpci_main.c:1.56->1.57 
#   L:Clean up DMA buffer allocation routines.
#   L:
#   L:- snd_dma_alloc_pages*() take the device type and device pointer
#   L:  directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#   L:  instance.
#   L:
#   L:- snd_dma_device struct is removed in each driver's instance (no longer
#   L:  needed due to the change above).
#   L:
#   L:- snd_malloc_pages_fallback() is removed since it's no longer used.
#   L:
#   L:- The buffer reservation / preallocation in snd-page-alloc module is
#   L:  performed only when the buffer id is given.  Normal PCM buffers won't
#   L:  be reserved any more (unless the driver specifies).  The module keeps
#   L:  the linked list of free-reserved buffers, instead of the whole buffers
#   L:  Reservation is done via snd_dma_reserve_buf(), and retrieved via
#   L:  snd_dma_get_reserved_buf()).
#   L:
#   L:- Other misc clean-ups/fixes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/intel8x0.c
#   2004/07/30 07:57:24+02:00 perex@suse.cz +4 -8
#   ALSA CVS update
#   D:2004/07/30 13:57:16
#   C:Memalloc module,PCM Midlevel,CS46xx driver,EMU10K1/EMU10K2 driver
#   C:ALSA Core,YMFPCI driver,Sound Scape driver,ATIIXP driver
#   C:ATIIXP-modem driver,BT87x driver,ENS1370/1+ driver,ES1968 driver
#   C:Intel8x0 driver,Intel8x0-modem driver,VIA82xx driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Trident driver
#   F:core/memalloc.c:1.35->1.36 
#   F:core/pcm_memory.c:1.31->1.32 
#   F:core/sgbuf.c:1.7->1.8 
#   F:include/cs46xx.h:1.20->1.21 
#   F:include/emu10k1.h:1.44->1.45 
#   F:include/memalloc.h:1.5->1.6 
#   F:include/pcm.h:1.45->1.46 
#   F:include/ymfpci.h:1.15->1.16 
#   F:isa/sscape.c:1.15->1.16 
#   F:pci/atiixp.c:1.20->1.21 
#   F:pci/atiixp_modem.c:1.5->1.6 
#   F:pci/bt87x.c:1.10->1.11 
#   F:pci/ens1370.c:1.66->1.67 
#   F:pci/es1968.c:1.74->1.75 
#   F:pci/intel8x0.c:1.153->1.154 
#   F:pci/intel8x0m.c:1.13->1.14 
#   F:pci/via82xx.c:1.115->1.116 
#   F:pci/cs46xx/cs46xx_lib.c:1.81->1.82 
#   F:pci/emu10k1/emu10k1_main.c:1.37->1.38 
#   F:pci/emu10k1/emufx.c:1.57->1.58 
#   F:pci/emu10k1/memory.c:1.18->1.19 
#   F:pci/korg1212/korg1212.c:1.45->1.46 
#   F:pci/mixart/mixart.c:1.15->1.16 
#   F:pci/mixart/mixart.h:1.4->1.5 
#   F:pci/rme9652/hdsp.c:1.65->1.66 
#   F:pci/rme9652/rme9652.c:1.51->1.52 
#   F:pci/trident/trident_main.c:1.63->1.64 
#   F:pci/trident/trident_memory.c:1.16->1.17 
#   F:pci/trident/trident_synth.c:1.14->1.15 
#   F:pci/ymfpci/ymfpci_main.c:1.56->1.57 
#   L:Clean up DMA buffer allocation routines.
#   L:
#   L:- snd_dma_alloc_pages*() take the device type and device pointer
#   L:  directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#   L:  instance.
#   L:
#   L:- snd_dma_device struct is removed in each driver's instance (no longer
#   L:  needed due to the change above).
#   L:
#   L:- snd_malloc_pages_fallback() is removed since it's no longer used.
#   L:
#   L:- The buffer reservation / preallocation in snd-page-alloc module is
#   L:  performed only when the buffer id is given.  Normal PCM buffers won't
#   L:  be reserved any more (unless the driver specifies).  The module keeps
#   L:  the linked list of free-reserved buffers, instead of the whole buffers
#   L:  Reservation is done via snd_dma_reserve_buf(), and retrieved via
#   L:  snd_dma_get_reserved_buf()).
#   L:
#   L:- Other misc clean-ups/fixes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/es1968.c
#   2004/07/30 07:57:24+02:00 perex@suse.cz +8 -13
#   ALSA CVS update
#   D:2004/07/30 13:57:16
#   C:Memalloc module,PCM Midlevel,CS46xx driver,EMU10K1/EMU10K2 driver
#   C:ALSA Core,YMFPCI driver,Sound Scape driver,ATIIXP driver
#   C:ATIIXP-modem driver,BT87x driver,ENS1370/1+ driver,ES1968 driver
#   C:Intel8x0 driver,Intel8x0-modem driver,VIA82xx driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Trident driver
#   F:core/memalloc.c:1.35->1.36 
#   F:core/pcm_memory.c:1.31->1.32 
#   F:core/sgbuf.c:1.7->1.8 
#   F:include/cs46xx.h:1.20->1.21 
#   F:include/emu10k1.h:1.44->1.45 
#   F:include/memalloc.h:1.5->1.6 
#   F:include/pcm.h:1.45->1.46 
#   F:include/ymfpci.h:1.15->1.16 
#   F:isa/sscape.c:1.15->1.16 
#   F:pci/atiixp.c:1.20->1.21 
#   F:pci/atiixp_modem.c:1.5->1.6 
#   F:pci/bt87x.c:1.10->1.11 
#   F:pci/ens1370.c:1.66->1.67 
#   F:pci/es1968.c:1.74->1.75 
#   F:pci/intel8x0.c:1.153->1.154 
#   F:pci/intel8x0m.c:1.13->1.14 
#   F:pci/via82xx.c:1.115->1.116 
#   F:pci/cs46xx/cs46xx_lib.c:1.81->1.82 
#   F:pci/emu10k1/emu10k1_main.c:1.37->1.38 
#   F:pci/emu10k1/emufx.c:1.57->1.58 
#   F:pci/emu10k1/memory.c:1.18->1.19 
#   F:pci/korg1212/korg1212.c:1.45->1.46 
#   F:pci/mixart/mixart.c:1.15->1.16 
#   F:pci/mixart/mixart.h:1.4->1.5 
#   F:pci/rme9652/hdsp.c:1.65->1.66 
#   F:pci/rme9652/rme9652.c:1.51->1.52 
#   F:pci/trident/trident_main.c:1.63->1.64 
#   F:pci/trident/trident_memory.c:1.16->1.17 
#   F:pci/trident/trident_synth.c:1.14->1.15 
#   F:pci/ymfpci/ymfpci_main.c:1.56->1.57 
#   L:Clean up DMA buffer allocation routines.
#   L:
#   L:- snd_dma_alloc_pages*() take the device type and device pointer
#   L:  directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#   L:  instance.
#   L:
#   L:- snd_dma_device struct is removed in each driver's instance (no longer
#   L:  needed due to the change above).
#   L:
#   L:- snd_malloc_pages_fallback() is removed since it's no longer used.
#   L:
#   L:- The buffer reservation / preallocation in snd-page-alloc module is
#   L:  performed only when the buffer id is given.  Normal PCM buffers won't
#   L:  be reserved any more (unless the driver specifies).  The module keeps
#   L:  the linked list of free-reserved buffers, instead of the whole buffers
#   L:  Reservation is done via snd_dma_reserve_buf(), and retrieved via
#   L:  snd_dma_get_reserved_buf()).
#   L:
#   L:- Other misc clean-ups/fixes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ens1370.c
#   2004/07/30 07:57:24+02:00 perex@suse.cz +3 -6
#   ALSA CVS update
#   D:2004/07/30 13:57:16
#   C:Memalloc module,PCM Midlevel,CS46xx driver,EMU10K1/EMU10K2 driver
#   C:ALSA Core,YMFPCI driver,Sound Scape driver,ATIIXP driver
#   C:ATIIXP-modem driver,BT87x driver,ENS1370/1+ driver,ES1968 driver
#   C:Intel8x0 driver,Intel8x0-modem driver,VIA82xx driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Trident driver
#   F:core/memalloc.c:1.35->1.36 
#   F:core/pcm_memory.c:1.31->1.32 
#   F:core/sgbuf.c:1.7->1.8 
#   F:include/cs46xx.h:1.20->1.21 
#   F:include/emu10k1.h:1.44->1.45 
#   F:include/memalloc.h:1.5->1.6 
#   F:include/pcm.h:1.45->1.46 
#   F:include/ymfpci.h:1.15->1.16 
#   F:isa/sscape.c:1.15->1.16 
#   F:pci/atiixp.c:1.20->1.21 
#   F:pci/atiixp_modem.c:1.5->1.6 
#   F:pci/bt87x.c:1.10->1.11 
#   F:pci/ens1370.c:1.66->1.67 
#   F:pci/es1968.c:1.74->1.75 
#   F:pci/intel8x0.c:1.153->1.154 
#   F:pci/intel8x0m.c:1.13->1.14 
#   F:pci/via82xx.c:1.115->1.116 
#   F:pci/cs46xx/cs46xx_lib.c:1.81->1.82 
#   F:pci/emu10k1/emu10k1_main.c:1.37->1.38 
#   F:pci/emu10k1/emufx.c:1.57->1.58 
#   F:pci/emu10k1/memory.c:1.18->1.19 
#   F:pci/korg1212/korg1212.c:1.45->1.46 
#   F:pci/mixart/mixart.c:1.15->1.16 
#   F:pci/mixart/mixart.h:1.4->1.5 
#   F:pci/rme9652/hdsp.c:1.65->1.66 
#   F:pci/rme9652/rme9652.c:1.51->1.52 
#   F:pci/trident/trident_main.c:1.63->1.64 
#   F:pci/trident/trident_memory.c:1.16->1.17 
#   F:pci/trident/trident_synth.c:1.14->1.15 
#   F:pci/ymfpci/ymfpci_main.c:1.56->1.57 
#   L:Clean up DMA buffer allocation routines.
#   L:
#   L:- snd_dma_alloc_pages*() take the device type and device pointer
#   L:  directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#   L:  instance.
#   L:
#   L:- snd_dma_device struct is removed in each driver's instance (no longer
#   L:  needed due to the change above).
#   L:
#   L:- snd_malloc_pages_fallback() is removed since it's no longer used.
#   L:
#   L:- The buffer reservation / preallocation in snd-page-alloc module is
#   L:  performed only when the buffer id is given.  Normal PCM buffers won't
#   L:  be reserved any more (unless the driver specifies).  The module keeps
#   L:  the linked list of free-reserved buffers, instead of the whole buffers
#   L:  Reservation is done via snd_dma_reserve_buf(), and retrieved via
#   L:  snd_dma_get_reserved_buf()).
#   L:
#   L:- Other misc clean-ups/fixes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/emu10k1/memory.c
#   2004/07/30 07:57:25+02:00 perex@suse.cz +8 -4
#   ALSA CVS update
#   D:2004/07/30 13:57:16
#   C:Memalloc module,PCM Midlevel,CS46xx driver,EMU10K1/EMU10K2 driver
#   C:ALSA Core,YMFPCI driver,Sound Scape driver,ATIIXP driver
#   C:ATIIXP-modem driver,BT87x driver,ENS1370/1+ driver,ES1968 driver
#   C:Intel8x0 driver,Intel8x0-modem driver,VIA82xx driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Trident driver
#   F:core/memalloc.c:1.35->1.36 
#   F:core/pcm_memory.c:1.31->1.32 
#   F:core/sgbuf.c:1.7->1.8 
#   F:include/cs46xx.h:1.20->1.21 
#   F:include/emu10k1.h:1.44->1.45 
#   F:include/memalloc.h:1.5->1.6 
#   F:include/pcm.h:1.45->1.46 
#   F:include/ymfpci.h:1.15->1.16 
#   F:isa/sscape.c:1.15->1.16 
#   F:pci/atiixp.c:1.20->1.21 
#   F:pci/atiixp_modem.c:1.5->1.6 
#   F:pci/bt87x.c:1.10->1.11 
#   F:pci/ens1370.c:1.66->1.67 
#   F:pci/es1968.c:1.74->1.75 
#   F:pci/intel8x0.c:1.153->1.154 
#   F:pci/intel8x0m.c:1.13->1.14 
#   F:pci/via82xx.c:1.115->1.116 
#   F:pci/cs46xx/cs46xx_lib.c:1.81->1.82 
#   F:pci/emu10k1/emu10k1_main.c:1.37->1.38 
#   F:pci/emu10k1/emufx.c:1.57->1.58 
#   F:pci/emu10k1/memory.c:1.18->1.19 
#   F:pci/korg1212/korg1212.c:1.45->1.46 
#   F:pci/mixart/mixart.c:1.15->1.16 
#   F:pci/mixart/mixart.h:1.4->1.5 
#   F:pci/rme9652/hdsp.c:1.65->1.66 
#   F:pci/rme9652/rme9652.c:1.51->1.52 
#   F:pci/trident/trident_main.c:1.63->1.64 
#   F:pci/trident/trident_memory.c:1.16->1.17 
#   F:pci/trident/trident_synth.c:1.14->1.15 
#   F:pci/ymfpci/ymfpci_main.c:1.56->1.57 
#   L:Clean up DMA buffer allocation routines.
#   L:
#   L:- snd_dma_alloc_pages*() take the device type and device pointer
#   L:  directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#   L:  instance.
#   L:
#   L:- snd_dma_device struct is removed in each driver's instance (no longer
#   L:  needed due to the change above).
#   L:
#   L:- snd_malloc_pages_fallback() is removed since it's no longer used.
#   L:
#   L:- The buffer reservation / preallocation in snd-page-alloc module is
#   L:  performed only when the buffer id is given.  Normal PCM buffers won't
#   L:  be reserved any more (unless the driver specifies).  The module keeps
#   L:  the linked list of free-reserved buffers, instead of the whole buffers
#   L:  Reservation is done via snd_dma_reserve_buf(), and retrieved via
#   L:  snd_dma_get_reserved_buf()).
#   L:
#   L:- Other misc clean-ups/fixes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/emu10k1/emufx.c
#   2004/07/30 07:57:25+02:00 perex@suse.cz +3 -2
#   ALSA CVS update
#   D:2004/07/30 13:57:16
#   C:Memalloc module,PCM Midlevel,CS46xx driver,EMU10K1/EMU10K2 driver
#   C:ALSA Core,YMFPCI driver,Sound Scape driver,ATIIXP driver
#   C:ATIIXP-modem driver,BT87x driver,ENS1370/1+ driver,ES1968 driver
#   C:Intel8x0 driver,Intel8x0-modem driver,VIA82xx driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Trident driver
#   F:core/memalloc.c:1.35->1.36 
#   F:core/pcm_memory.c:1.31->1.32 
#   F:core/sgbuf.c:1.7->1.8 
#   F:include/cs46xx.h:1.20->1.21 
#   F:include/emu10k1.h:1.44->1.45 
#   F:include/memalloc.h:1.5->1.6 
#   F:include/pcm.h:1.45->1.46 
#   F:include/ymfpci.h:1.15->1.16 
#   F:isa/sscape.c:1.15->1.16 
#   F:pci/atiixp.c:1.20->1.21 
#   F:pci/atiixp_modem.c:1.5->1.6 
#   F:pci/bt87x.c:1.10->1.11 
#   F:pci/ens1370.c:1.66->1.67 
#   F:pci/es1968.c:1.74->1.75 
#   F:pci/intel8x0.c:1.153->1.154 
#   F:pci/intel8x0m.c:1.13->1.14 
#   F:pci/via82xx.c:1.115->1.116 
#   F:pci/cs46xx/cs46xx_lib.c:1.81->1.82 
#   F:pci/emu10k1/emu10k1_main.c:1.37->1.38 
#   F:pci/emu10k1/emufx.c:1.57->1.58 
#   F:pci/emu10k1/memory.c:1.18->1.19 
#   F:pci/korg1212/korg1212.c:1.45->1.46 
#   F:pci/mixart/mixart.c:1.15->1.16 
#   F:pci/mixart/mixart.h:1.4->1.5 
#   F:pci/rme9652/hdsp.c:1.65->1.66 
#   F:pci/rme9652/rme9652.c:1.51->1.52 
#   F:pci/trident/trident_main.c:1.63->1.64 
#   F:pci/trident/trident_memory.c:1.16->1.17 
#   F:pci/trident/trident_synth.c:1.14->1.15 
#   F:pci/ymfpci/ymfpci_main.c:1.56->1.57 
#   L:Clean up DMA buffer allocation routines.
#   L:
#   L:- snd_dma_alloc_pages*() take the device type and device pointer
#   L:  directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#   L:  instance.
#   L:
#   L:- snd_dma_device struct is removed in each driver's instance (no longer
#   L:  needed due to the change above).
#   L:
#   L:- snd_malloc_pages_fallback() is removed since it's no longer used.
#   L:
#   L:- The buffer reservation / preallocation in snd-page-alloc module is
#   L:  performed only when the buffer id is given.  Normal PCM buffers won't
#   L:  be reserved any more (unless the driver specifies).  The module keeps
#   L:  the linked list of free-reserved buffers, instead of the whole buffers
#   L:  Reservation is done via snd_dma_reserve_buf(), and retrieved via
#   L:  snd_dma_get_reserved_buf()).
#   L:
#   L:- Other misc clean-ups/fixes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/emu10k1/emu10k1_main.c
#   2004/07/30 07:57:25+02:00 perex@suse.cz +6 -8
#   ALSA CVS update
#   D:2004/07/30 13:57:16
#   C:Memalloc module,PCM Midlevel,CS46xx driver,EMU10K1/EMU10K2 driver
#   C:ALSA Core,YMFPCI driver,Sound Scape driver,ATIIXP driver
#   C:ATIIXP-modem driver,BT87x driver,ENS1370/1+ driver,ES1968 driver
#   C:Intel8x0 driver,Intel8x0-modem driver,VIA82xx driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Trident driver
#   F:core/memalloc.c:1.35->1.36 
#   F:core/pcm_memory.c:1.31->1.32 
#   F:core/sgbuf.c:1.7->1.8 
#   F:include/cs46xx.h:1.20->1.21 
#   F:include/emu10k1.h:1.44->1.45 
#   F:include/memalloc.h:1.5->1.6 
#   F:include/pcm.h:1.45->1.46 
#   F:include/ymfpci.h:1.15->1.16 
#   F:isa/sscape.c:1.15->1.16 
#   F:pci/atiixp.c:1.20->1.21 
#   F:pci/atiixp_modem.c:1.5->1.6 
#   F:pci/bt87x.c:1.10->1.11 
#   F:pci/ens1370.c:1.66->1.67 
#   F:pci/es1968.c:1.74->1.75 
#   F:pci/intel8x0.c:1.153->1.154 
#   F:pci/intel8x0m.c:1.13->1.14 
#   F:pci/via82xx.c:1.115->1.116 
#   F:pci/cs46xx/cs46xx_lib.c:1.81->1.82 
#   F:pci/emu10k1/emu10k1_main.c:1.37->1.38 
#   F:pci/emu10k1/emufx.c:1.57->1.58 
#   F:pci/emu10k1/memory.c:1.18->1.19 
#   F:pci/korg1212/korg1212.c:1.45->1.46 
#   F:pci/mixart/mixart.c:1.15->1.16 
#   F:pci/mixart/mixart.h:1.4->1.5 
#   F:pci/rme9652/hdsp.c:1.65->1.66 
#   F:pci/rme9652/rme9652.c:1.51->1.52 
#   F:pci/trident/trident_main.c:1.63->1.64 
#   F:pci/trident/trident_memory.c:1.16->1.17 
#   F:pci/trident/trident_synth.c:1.14->1.15 
#   F:pci/ymfpci/ymfpci_main.c:1.56->1.57 
#   L:Clean up DMA buffer allocation routines.
#   L:
#   L:- snd_dma_alloc_pages*() take the device type and device pointer
#   L:  directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#   L:  instance.
#   L:
#   L:- snd_dma_device struct is removed in each driver's instance (no longer
#   L:  needed due to the change above).
#   L:
#   L:- snd_malloc_pages_fallback() is removed since it's no longer used.
#   L:
#   L:- The buffer reservation / preallocation in snd-page-alloc module is
#   L:  performed only when the buffer id is given.  Normal PCM buffers won't
#   L:  be reserved any more (unless the driver specifies).  The module keeps
#   L:  the linked list of free-reserved buffers, instead of the whole buffers
#   L:  Reservation is done via snd_dma_reserve_buf(), and retrieved via
#   L:  snd_dma_get_reserved_buf()).
#   L:
#   L:- Other misc clean-ups/fixes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/cs46xx/cs46xx_lib.c
#   2004/07/30 07:57:24+02:00 perex@suse.cz +6 -8
#   ALSA CVS update
#   D:2004/07/30 13:57:16
#   C:Memalloc module,PCM Midlevel,CS46xx driver,EMU10K1/EMU10K2 driver
#   C:ALSA Core,YMFPCI driver,Sound Scape driver,ATIIXP driver
#   C:ATIIXP-modem driver,BT87x driver,ENS1370/1+ driver,ES1968 driver
#   C:Intel8x0 driver,Intel8x0-modem driver,VIA82xx driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Trident driver
#   F:core/memalloc.c:1.35->1.36 
#   F:core/pcm_memory.c:1.31->1.32 
#   F:core/sgbuf.c:1.7->1.8 
#   F:include/cs46xx.h:1.20->1.21 
#   F:include/emu10k1.h:1.44->1.45 
#   F:include/memalloc.h:1.5->1.6 
#   F:include/pcm.h:1.45->1.46 
#   F:include/ymfpci.h:1.15->1.16 
#   F:isa/sscape.c:1.15->1.16 
#   F:pci/atiixp.c:1.20->1.21 
#   F:pci/atiixp_modem.c:1.5->1.6 
#   F:pci/bt87x.c:1.10->1.11 
#   F:pci/ens1370.c:1.66->1.67 
#   F:pci/es1968.c:1.74->1.75 
#   F:pci/intel8x0.c:1.153->1.154 
#   F:pci/intel8x0m.c:1.13->1.14 
#   F:pci/via82xx.c:1.115->1.116 
#   F:pci/cs46xx/cs46xx_lib.c:1.81->1.82 
#   F:pci/emu10k1/emu10k1_main.c:1.37->1.38 
#   F:pci/emu10k1/emufx.c:1.57->1.58 
#   F:pci/emu10k1/memory.c:1.18->1.19 
#   F:pci/korg1212/korg1212.c:1.45->1.46 
#   F:pci/mixart/mixart.c:1.15->1.16 
#   F:pci/mixart/mixart.h:1.4->1.5 
#   F:pci/rme9652/hdsp.c:1.65->1.66 
#   F:pci/rme9652/rme9652.c:1.51->1.52 
#   F:pci/trident/trident_main.c:1.63->1.64 
#   F:pci/trident/trident_memory.c:1.16->1.17 
#   F:pci/trident/trident_synth.c:1.14->1.15 
#   F:pci/ymfpci/ymfpci_main.c:1.56->1.57 
#   L:Clean up DMA buffer allocation routines.
#   L:
#   L:- snd_dma_alloc_pages*() take the device type and device pointer
#   L:  directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#   L:  instance.
#   L:
#   L:- snd_dma_device struct is removed in each driver's instance (no longer
#   L:  needed due to the change above).
#   L:
#   L:- snd_malloc_pages_fallback() is removed since it's no longer used.
#   L:
#   L:- The buffer reservation / preallocation in snd-page-alloc module is
#   L:  performed only when the buffer id is given.  Normal PCM buffers won't
#   L:  be reserved any more (unless the driver specifies).  The module keeps
#   L:  the linked list of free-reserved buffers, instead of the whole buffers
#   L:  Reservation is done via snd_dma_reserve_buf(), and retrieved via
#   L:  snd_dma_get_reserved_buf()).
#   L:
#   L:- Other misc clean-ups/fixes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/bt87x.c
#   2004/07/30 07:57:24+02:00 perex@suse.cz +3 -6
#   ALSA CVS update
#   D:2004/07/30 13:57:16
#   C:Memalloc module,PCM Midlevel,CS46xx driver,EMU10K1/EMU10K2 driver
#   C:ALSA Core,YMFPCI driver,Sound Scape driver,ATIIXP driver
#   C:ATIIXP-modem driver,BT87x driver,ENS1370/1+ driver,ES1968 driver
#   C:Intel8x0 driver,Intel8x0-modem driver,VIA82xx driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Trident driver
#   F:core/memalloc.c:1.35->1.36 
#   F:core/pcm_memory.c:1.31->1.32 
#   F:core/sgbuf.c:1.7->1.8 
#   F:include/cs46xx.h:1.20->1.21 
#   F:include/emu10k1.h:1.44->1.45 
#   F:include/memalloc.h:1.5->1.6 
#   F:include/pcm.h:1.45->1.46 
#   F:include/ymfpci.h:1.15->1.16 
#   F:isa/sscape.c:1.15->1.16 
#   F:pci/atiixp.c:1.20->1.21 
#   F:pci/atiixp_modem.c:1.5->1.6 
#   F:pci/bt87x.c:1.10->1.11 
#   F:pci/ens1370.c:1.66->1.67 
#   F:pci/es1968.c:1.74->1.75 
#   F:pci/intel8x0.c:1.153->1.154 
#   F:pci/intel8x0m.c:1.13->1.14 
#   F:pci/via82xx.c:1.115->1.116 
#   F:pci/cs46xx/cs46xx_lib.c:1.81->1.82 
#   F:pci/emu10k1/emu10k1_main.c:1.37->1.38 
#   F:pci/emu10k1/emufx.c:1.57->1.58 
#   F:pci/emu10k1/memory.c:1.18->1.19 
#   F:pci/korg1212/korg1212.c:1.45->1.46 
#   F:pci/mixart/mixart.c:1.15->1.16 
#   F:pci/mixart/mixart.h:1.4->1.5 
#   F:pci/rme9652/hdsp.c:1.65->1.66 
#   F:pci/rme9652/rme9652.c:1.51->1.52 
#   F:pci/trident/trident_main.c:1.63->1.64 
#   F:pci/trident/trident_memory.c:1.16->1.17 
#   F:pci/trident/trident_synth.c:1.14->1.15 
#   F:pci/ymfpci/ymfpci_main.c:1.56->1.57 
#   L:Clean up DMA buffer allocation routines.
#   L:
#   L:- snd_dma_alloc_pages*() take the device type and device pointer
#   L:  directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#   L:  instance.
#   L:
#   L:- snd_dma_device struct is removed in each driver's instance (no longer
#   L:  needed due to the change above).
#   L:
#   L:- snd_malloc_pages_fallback() is removed since it's no longer used.
#   L:
#   L:- The buffer reservation / preallocation in snd-page-alloc module is
#   L:  performed only when the buffer id is given.  Normal PCM buffers won't
#   L:  be reserved any more (unless the driver specifies).  The module keeps
#   L:  the linked list of free-reserved buffers, instead of the whole buffers
#   L:  Reservation is done via snd_dma_reserve_buf(), and retrieved via
#   L:  snd_dma_get_reserved_buf()).
#   L:
#   L:- Other misc clean-ups/fixes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/atiixp_modem.c
#   2004/07/30 07:57:24+02:00 perex@suse.cz +3 -6
#   ALSA CVS update
#   D:2004/07/30 13:57:16
#   C:Memalloc module,PCM Midlevel,CS46xx driver,EMU10K1/EMU10K2 driver
#   C:ALSA Core,YMFPCI driver,Sound Scape driver,ATIIXP driver
#   C:ATIIXP-modem driver,BT87x driver,ENS1370/1+ driver,ES1968 driver
#   C:Intel8x0 driver,Intel8x0-modem driver,VIA82xx driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Trident driver
#   F:core/memalloc.c:1.35->1.36 
#   F:core/pcm_memory.c:1.31->1.32 
#   F:core/sgbuf.c:1.7->1.8 
#   F:include/cs46xx.h:1.20->1.21 
#   F:include/emu10k1.h:1.44->1.45 
#   F:include/memalloc.h:1.5->1.6 
#   F:include/pcm.h:1.45->1.46 
#   F:include/ymfpci.h:1.15->1.16 
#   F:isa/sscape.c:1.15->1.16 
#   F:pci/atiixp.c:1.20->1.21 
#   F:pci/atiixp_modem.c:1.5->1.6 
#   F:pci/bt87x.c:1.10->1.11 
#   F:pci/ens1370.c:1.66->1.67 
#   F:pci/es1968.c:1.74->1.75 
#   F:pci/intel8x0.c:1.153->1.154 
#   F:pci/intel8x0m.c:1.13->1.14 
#   F:pci/via82xx.c:1.115->1.116 
#   F:pci/cs46xx/cs46xx_lib.c:1.81->1.82 
#   F:pci/emu10k1/emu10k1_main.c:1.37->1.38 
#   F:pci/emu10k1/emufx.c:1.57->1.58 
#   F:pci/emu10k1/memory.c:1.18->1.19 
#   F:pci/korg1212/korg1212.c:1.45->1.46 
#   F:pci/mixart/mixart.c:1.15->1.16 
#   F:pci/mixart/mixart.h:1.4->1.5 
#   F:pci/rme9652/hdsp.c:1.65->1.66 
#   F:pci/rme9652/rme9652.c:1.51->1.52 
#   F:pci/trident/trident_main.c:1.63->1.64 
#   F:pci/trident/trident_memory.c:1.16->1.17 
#   F:pci/trident/trident_synth.c:1.14->1.15 
#   F:pci/ymfpci/ymfpci_main.c:1.56->1.57 
#   L:Clean up DMA buffer allocation routines.
#   L:
#   L:- snd_dma_alloc_pages*() take the device type and device pointer
#   L:  directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#   L:  instance.
#   L:
#   L:- snd_dma_device struct is removed in each driver's instance (no longer
#   L:  needed due to the change above).
#   L:
#   L:- snd_malloc_pages_fallback() is removed since it's no longer used.
#   L:
#   L:- The buffer reservation / preallocation in snd-page-alloc module is
#   L:  performed only when the buffer id is given.  Normal PCM buffers won't
#   L:  be reserved any more (unless the driver specifies).  The module keeps
#   L:  the linked list of free-reserved buffers, instead of the whole buffers
#   L:  Reservation is done via snd_dma_reserve_buf(), and retrieved via
#   L:  snd_dma_get_reserved_buf()).
#   L:
#   L:- Other misc clean-ups/fixes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/atiixp.c
#   2004/07/30 07:57:24+02:00 perex@suse.cz +3 -6
#   ALSA CVS update
#   D:2004/07/30 13:57:16
#   C:Memalloc module,PCM Midlevel,CS46xx driver,EMU10K1/EMU10K2 driver
#   C:ALSA Core,YMFPCI driver,Sound Scape driver,ATIIXP driver
#   C:ATIIXP-modem driver,BT87x driver,ENS1370/1+ driver,ES1968 driver
#   C:Intel8x0 driver,Intel8x0-modem driver,VIA82xx driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Trident driver
#   F:core/memalloc.c:1.35->1.36 
#   F:core/pcm_memory.c:1.31->1.32 
#   F:core/sgbuf.c:1.7->1.8 
#   F:include/cs46xx.h:1.20->1.21 
#   F:include/emu10k1.h:1.44->1.45 
#   F:include/memalloc.h:1.5->1.6 
#   F:include/pcm.h:1.45->1.46 
#   F:include/ymfpci.h:1.15->1.16 
#   F:isa/sscape.c:1.15->1.16 
#   F:pci/atiixp.c:1.20->1.21 
#   F:pci/atiixp_modem.c:1.5->1.6 
#   F:pci/bt87x.c:1.10->1.11 
#   F:pci/ens1370.c:1.66->1.67 
#   F:pci/es1968.c:1.74->1.75 
#   F:pci/intel8x0.c:1.153->1.154 
#   F:pci/intel8x0m.c:1.13->1.14 
#   F:pci/via82xx.c:1.115->1.116 
#   F:pci/cs46xx/cs46xx_lib.c:1.81->1.82 
#   F:pci/emu10k1/emu10k1_main.c:1.37->1.38 
#   F:pci/emu10k1/emufx.c:1.57->1.58 
#   F:pci/emu10k1/memory.c:1.18->1.19 
#   F:pci/korg1212/korg1212.c:1.45->1.46 
#   F:pci/mixart/mixart.c:1.15->1.16 
#   F:pci/mixart/mixart.h:1.4->1.5 
#   F:pci/rme9652/hdsp.c:1.65->1.66 
#   F:pci/rme9652/rme9652.c:1.51->1.52 
#   F:pci/trident/trident_main.c:1.63->1.64 
#   F:pci/trident/trident_memory.c:1.16->1.17 
#   F:pci/trident/trident_synth.c:1.14->1.15 
#   F:pci/ymfpci/ymfpci_main.c:1.56->1.57 
#   L:Clean up DMA buffer allocation routines.
#   L:
#   L:- snd_dma_alloc_pages*() take the device type and device pointer
#   L:  directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#   L:  instance.
#   L:
#   L:- snd_dma_device struct is removed in each driver's instance (no longer
#   L:  needed due to the change above).
#   L:
#   L:- snd_malloc_pages_fallback() is removed since it's no longer used.
#   L:
#   L:- The buffer reservation / preallocation in snd-page-alloc module is
#   L:  performed only when the buffer id is given.  Normal PCM buffers won't
#   L:  be reserved any more (unless the driver specifies).  The module keeps
#   L:  the linked list of free-reserved buffers, instead of the whole buffers
#   L:  Reservation is done via snd_dma_reserve_buf(), and retrieved via
#   L:  snd_dma_get_reserved_buf()).
#   L:
#   L:- Other misc clean-ups/fixes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/sscape.c
#   2004/07/30 07:57:24+02:00 perex@suse.cz +4 -12
#   ALSA CVS update
#   D:2004/07/30 13:57:16
#   C:Memalloc module,PCM Midlevel,CS46xx driver,EMU10K1/EMU10K2 driver
#   C:ALSA Core,YMFPCI driver,Sound Scape driver,ATIIXP driver
#   C:ATIIXP-modem driver,BT87x driver,ENS1370/1+ driver,ES1968 driver
#   C:Intel8x0 driver,Intel8x0-modem driver,VIA82xx driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Trident driver
#   F:core/memalloc.c:1.35->1.36 
#   F:core/pcm_memory.c:1.31->1.32 
#   F:core/sgbuf.c:1.7->1.8 
#   F:include/cs46xx.h:1.20->1.21 
#   F:include/emu10k1.h:1.44->1.45 
#   F:include/memalloc.h:1.5->1.6 
#   F:include/pcm.h:1.45->1.46 
#   F:include/ymfpci.h:1.15->1.16 
#   F:isa/sscape.c:1.15->1.16 
#   F:pci/atiixp.c:1.20->1.21 
#   F:pci/atiixp_modem.c:1.5->1.6 
#   F:pci/bt87x.c:1.10->1.11 
#   F:pci/ens1370.c:1.66->1.67 
#   F:pci/es1968.c:1.74->1.75 
#   F:pci/intel8x0.c:1.153->1.154 
#   F:pci/intel8x0m.c:1.13->1.14 
#   F:pci/via82xx.c:1.115->1.116 
#   F:pci/cs46xx/cs46xx_lib.c:1.81->1.82 
#   F:pci/emu10k1/emu10k1_main.c:1.37->1.38 
#   F:pci/emu10k1/emufx.c:1.57->1.58 
#   F:pci/emu10k1/memory.c:1.18->1.19 
#   F:pci/korg1212/korg1212.c:1.45->1.46 
#   F:pci/mixart/mixart.c:1.15->1.16 
#   F:pci/mixart/mixart.h:1.4->1.5 
#   F:pci/rme9652/hdsp.c:1.65->1.66 
#   F:pci/rme9652/rme9652.c:1.51->1.52 
#   F:pci/trident/trident_main.c:1.63->1.64 
#   F:pci/trident/trident_memory.c:1.16->1.17 
#   F:pci/trident/trident_synth.c:1.14->1.15 
#   F:pci/ymfpci/ymfpci_main.c:1.56->1.57 
#   L:Clean up DMA buffer allocation routines.
#   L:
#   L:- snd_dma_alloc_pages*() take the device type and device pointer
#   L:  directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#   L:  instance.
#   L:
#   L:- snd_dma_device struct is removed in each driver's instance (no longer
#   L:  needed due to the change above).
#   L:
#   L:- snd_malloc_pages_fallback() is removed since it's no longer used.
#   L:
#   L:- The buffer reservation / preallocation in snd-page-alloc module is
#   L:  performed only when the buffer id is given.  Normal PCM buffers won't
#   L:  be reserved any more (unless the driver specifies).  The module keeps
#   L:  the linked list of free-reserved buffers, instead of the whole buffers
#   L:  Reservation is done via snd_dma_reserve_buf(), and retrieved via
#   L:  snd_dma_get_reserved_buf()).
#   L:
#   L:- Other misc clean-ups/fixes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/sgbuf.c
#   2004/07/30 07:57:23+02:00 perex@suse.cz +6 -5
#   ALSA CVS update
#   D:2004/07/30 13:57:16
#   C:Memalloc module,PCM Midlevel,CS46xx driver,EMU10K1/EMU10K2 driver
#   C:ALSA Core,YMFPCI driver,Sound Scape driver,ATIIXP driver
#   C:ATIIXP-modem driver,BT87x driver,ENS1370/1+ driver,ES1968 driver
#   C:Intel8x0 driver,Intel8x0-modem driver,VIA82xx driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Trident driver
#   F:core/memalloc.c:1.35->1.36 
#   F:core/pcm_memory.c:1.31->1.32 
#   F:core/sgbuf.c:1.7->1.8 
#   F:include/cs46xx.h:1.20->1.21 
#   F:include/emu10k1.h:1.44->1.45 
#   F:include/memalloc.h:1.5->1.6 
#   F:include/pcm.h:1.45->1.46 
#   F:include/ymfpci.h:1.15->1.16 
#   F:isa/sscape.c:1.15->1.16 
#   F:pci/atiixp.c:1.20->1.21 
#   F:pci/atiixp_modem.c:1.5->1.6 
#   F:pci/bt87x.c:1.10->1.11 
#   F:pci/ens1370.c:1.66->1.67 
#   F:pci/es1968.c:1.74->1.75 
#   F:pci/intel8x0.c:1.153->1.154 
#   F:pci/intel8x0m.c:1.13->1.14 
#   F:pci/via82xx.c:1.115->1.116 
#   F:pci/cs46xx/cs46xx_lib.c:1.81->1.82 
#   F:pci/emu10k1/emu10k1_main.c:1.37->1.38 
#   F:pci/emu10k1/emufx.c:1.57->1.58 
#   F:pci/emu10k1/memory.c:1.18->1.19 
#   F:pci/korg1212/korg1212.c:1.45->1.46 
#   F:pci/mixart/mixart.c:1.15->1.16 
#   F:pci/mixart/mixart.h:1.4->1.5 
#   F:pci/rme9652/hdsp.c:1.65->1.66 
#   F:pci/rme9652/rme9652.c:1.51->1.52 
#   F:pci/trident/trident_main.c:1.63->1.64 
#   F:pci/trident/trident_memory.c:1.16->1.17 
#   F:pci/trident/trident_synth.c:1.14->1.15 
#   F:pci/ymfpci/ymfpci_main.c:1.56->1.57 
#   L:Clean up DMA buffer allocation routines.
#   L:
#   L:- snd_dma_alloc_pages*() take the device type and device pointer
#   L:  directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#   L:  instance.
#   L:
#   L:- snd_dma_device struct is removed in each driver's instance (no longer
#   L:  needed due to the change above).
#   L:
#   L:- snd_malloc_pages_fallback() is removed since it's no longer used.
#   L:
#   L:- The buffer reservation / preallocation in snd-page-alloc module is
#   L:  performed only when the buffer id is given.  Normal PCM buffers won't
#   L:  be reserved any more (unless the driver specifies).  The module keeps
#   L:  the linked list of free-reserved buffers, instead of the whole buffers
#   L:  Reservation is done via snd_dma_reserve_buf(), and retrieved via
#   L:  snd_dma_get_reserved_buf()).
#   L:
#   L:- Other misc clean-ups/fixes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/pcm_memory.c
#   2004/07/30 07:57:23+02:00 perex@suse.cz +30 -39
#   ALSA CVS update
#   D:2004/07/30 13:57:16
#   C:Memalloc module,PCM Midlevel,CS46xx driver,EMU10K1/EMU10K2 driver
#   C:ALSA Core,YMFPCI driver,Sound Scape driver,ATIIXP driver
#   C:ATIIXP-modem driver,BT87x driver,ENS1370/1+ driver,ES1968 driver
#   C:Intel8x0 driver,Intel8x0-modem driver,VIA82xx driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Trident driver
#   F:core/memalloc.c:1.35->1.36 
#   F:core/pcm_memory.c:1.31->1.32 
#   F:core/sgbuf.c:1.7->1.8 
#   F:include/cs46xx.h:1.20->1.21 
#   F:include/emu10k1.h:1.44->1.45 
#   F:include/memalloc.h:1.5->1.6 
#   F:include/pcm.h:1.45->1.46 
#   F:include/ymfpci.h:1.15->1.16 
#   F:isa/sscape.c:1.15->1.16 
#   F:pci/atiixp.c:1.20->1.21 
#   F:pci/atiixp_modem.c:1.5->1.6 
#   F:pci/bt87x.c:1.10->1.11 
#   F:pci/ens1370.c:1.66->1.67 
#   F:pci/es1968.c:1.74->1.75 
#   F:pci/intel8x0.c:1.153->1.154 
#   F:pci/intel8x0m.c:1.13->1.14 
#   F:pci/via82xx.c:1.115->1.116 
#   F:pci/cs46xx/cs46xx_lib.c:1.81->1.82 
#   F:pci/emu10k1/emu10k1_main.c:1.37->1.38 
#   F:pci/emu10k1/emufx.c:1.57->1.58 
#   F:pci/emu10k1/memory.c:1.18->1.19 
#   F:pci/korg1212/korg1212.c:1.45->1.46 
#   F:pci/mixart/mixart.c:1.15->1.16 
#   F:pci/mixart/mixart.h:1.4->1.5 
#   F:pci/rme9652/hdsp.c:1.65->1.66 
#   F:pci/rme9652/rme9652.c:1.51->1.52 
#   F:pci/trident/trident_main.c:1.63->1.64 
#   F:pci/trident/trident_memory.c:1.16->1.17 
#   F:pci/trident/trident_synth.c:1.14->1.15 
#   F:pci/ymfpci/ymfpci_main.c:1.56->1.57 
#   L:Clean up DMA buffer allocation routines.
#   L:
#   L:- snd_dma_alloc_pages*() take the device type and device pointer
#   L:  directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#   L:  instance.
#   L:
#   L:- snd_dma_device struct is removed in each driver's instance (no longer
#   L:  needed due to the change above).
#   L:
#   L:- snd_malloc_pages_fallback() is removed since it's no longer used.
#   L:
#   L:- The buffer reservation / preallocation in snd-page-alloc module is
#   L:  performed only when the buffer id is given.  Normal PCM buffers won't
#   L:  be reserved any more (unless the driver specifies).  The module keeps
#   L:  the linked list of free-reserved buffers, instead of the whole buffers
#   L:  Reservation is done via snd_dma_reserve_buf(), and retrieved via
#   L:  snd_dma_get_reserved_buf()).
#   L:
#   L:- Other misc clean-ups/fixes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/memalloc.c
#   2004/07/30 07:57:16+02:00 perex@suse.cz +72 -274
#   ALSA CVS update
#   D:2004/07/30 13:57:16
#   C:Memalloc module,PCM Midlevel,CS46xx driver,EMU10K1/EMU10K2 driver
#   C:ALSA Core,YMFPCI driver,Sound Scape driver,ATIIXP driver
#   C:ATIIXP-modem driver,BT87x driver,ENS1370/1+ driver,ES1968 driver
#   C:Intel8x0 driver,Intel8x0-modem driver,VIA82xx driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Trident driver
#   F:core/memalloc.c:1.35->1.36 
#   F:core/pcm_memory.c:1.31->1.32 
#   F:core/sgbuf.c:1.7->1.8 
#   F:include/cs46xx.h:1.20->1.21 
#   F:include/emu10k1.h:1.44->1.45 
#   F:include/memalloc.h:1.5->1.6 
#   F:include/pcm.h:1.45->1.46 
#   F:include/ymfpci.h:1.15->1.16 
#   F:isa/sscape.c:1.15->1.16 
#   F:pci/atiixp.c:1.20->1.21 
#   F:pci/atiixp_modem.c:1.5->1.6 
#   F:pci/bt87x.c:1.10->1.11 
#   F:pci/ens1370.c:1.66->1.67 
#   F:pci/es1968.c:1.74->1.75 
#   F:pci/intel8x0.c:1.153->1.154 
#   F:pci/intel8x0m.c:1.13->1.14 
#   F:pci/via82xx.c:1.115->1.116 
#   F:pci/cs46xx/cs46xx_lib.c:1.81->1.82 
#   F:pci/emu10k1/emu10k1_main.c:1.37->1.38 
#   F:pci/emu10k1/emufx.c:1.57->1.58 
#   F:pci/emu10k1/memory.c:1.18->1.19 
#   F:pci/korg1212/korg1212.c:1.45->1.46 
#   F:pci/mixart/mixart.c:1.15->1.16 
#   F:pci/mixart/mixart.h:1.4->1.5 
#   F:pci/rme9652/hdsp.c:1.65->1.66 
#   F:pci/rme9652/rme9652.c:1.51->1.52 
#   F:pci/trident/trident_main.c:1.63->1.64 
#   F:pci/trident/trident_memory.c:1.16->1.17 
#   F:pci/trident/trident_synth.c:1.14->1.15 
#   F:pci/ymfpci/ymfpci_main.c:1.56->1.57 
#   L:Clean up DMA buffer allocation routines.
#   L:
#   L:- snd_dma_alloc_pages*() take the device type and device pointer
#   L:  directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#   L:  instance.
#   L:
#   L:- snd_dma_device struct is removed in each driver's instance (no longer
#   L:  needed due to the change above).
#   L:
#   L:- snd_malloc_pages_fallback() is removed since it's no longer used.
#   L:
#   L:- The buffer reservation / preallocation in snd-page-alloc module is
#   L:  performed only when the buffer id is given.  Normal PCM buffers won't
#   L:  be reserved any more (unless the driver specifies).  The module keeps
#   L:  the linked list of free-reserved buffers, instead of the whole buffers
#   L:  Reservation is done via snd_dma_reserve_buf(), and retrieved via
#   L:  snd_dma_get_reserved_buf()).
#   L:
#   L:- Other misc clean-ups/fixes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/ymfpci.h
#   2004/07/30 07:57:24+02:00 perex@suse.cz +0 -1
#   ALSA CVS update
#   D:2004/07/30 13:57:16
#   C:Memalloc module,PCM Midlevel,CS46xx driver,EMU10K1/EMU10K2 driver
#   C:ALSA Core,YMFPCI driver,Sound Scape driver,ATIIXP driver
#   C:ATIIXP-modem driver,BT87x driver,ENS1370/1+ driver,ES1968 driver
#   C:Intel8x0 driver,Intel8x0-modem driver,VIA82xx driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Trident driver
#   F:core/memalloc.c:1.35->1.36 
#   F:core/pcm_memory.c:1.31->1.32 
#   F:core/sgbuf.c:1.7->1.8 
#   F:include/cs46xx.h:1.20->1.21 
#   F:include/emu10k1.h:1.44->1.45 
#   F:include/memalloc.h:1.5->1.6 
#   F:include/pcm.h:1.45->1.46 
#   F:include/ymfpci.h:1.15->1.16 
#   F:isa/sscape.c:1.15->1.16 
#   F:pci/atiixp.c:1.20->1.21 
#   F:pci/atiixp_modem.c:1.5->1.6 
#   F:pci/bt87x.c:1.10->1.11 
#   F:pci/ens1370.c:1.66->1.67 
#   F:pci/es1968.c:1.74->1.75 
#   F:pci/intel8x0.c:1.153->1.154 
#   F:pci/intel8x0m.c:1.13->1.14 
#   F:pci/via82xx.c:1.115->1.116 
#   F:pci/cs46xx/cs46xx_lib.c:1.81->1.82 
#   F:pci/emu10k1/emu10k1_main.c:1.37->1.38 
#   F:pci/emu10k1/emufx.c:1.57->1.58 
#   F:pci/emu10k1/memory.c:1.18->1.19 
#   F:pci/korg1212/korg1212.c:1.45->1.46 
#   F:pci/mixart/mixart.c:1.15->1.16 
#   F:pci/mixart/mixart.h:1.4->1.5 
#   F:pci/rme9652/hdsp.c:1.65->1.66 
#   F:pci/rme9652/rme9652.c:1.51->1.52 
#   F:pci/trident/trident_main.c:1.63->1.64 
#   F:pci/trident/trident_memory.c:1.16->1.17 
#   F:pci/trident/trident_synth.c:1.14->1.15 
#   F:pci/ymfpci/ymfpci_main.c:1.56->1.57 
#   L:Clean up DMA buffer allocation routines.
#   L:
#   L:- snd_dma_alloc_pages*() take the device type and device pointer
#   L:  directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#   L:  instance.
#   L:
#   L:- snd_dma_device struct is removed in each driver's instance (no longer
#   L:  needed due to the change above).
#   L:
#   L:- snd_malloc_pages_fallback() is removed since it's no longer used.
#   L:
#   L:- The buffer reservation / preallocation in snd-page-alloc module is
#   L:  performed only when the buffer id is given.  Normal PCM buffers won't
#   L:  be reserved any more (unless the driver specifies).  The module keeps
#   L:  the linked list of free-reserved buffers, instead of the whole buffers
#   L:  Reservation is done via snd_dma_reserve_buf(), and retrieved via
#   L:  snd_dma_get_reserved_buf()).
#   L:
#   L:- Other misc clean-ups/fixes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/pcm.h
#   2004/07/30 07:57:24+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/30 13:57:16
#   C:Memalloc module,PCM Midlevel,CS46xx driver,EMU10K1/EMU10K2 driver
#   C:ALSA Core,YMFPCI driver,Sound Scape driver,ATIIXP driver
#   C:ATIIXP-modem driver,BT87x driver,ENS1370/1+ driver,ES1968 driver
#   C:Intel8x0 driver,Intel8x0-modem driver,VIA82xx driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Trident driver
#   F:core/memalloc.c:1.35->1.36 
#   F:core/pcm_memory.c:1.31->1.32 
#   F:core/sgbuf.c:1.7->1.8 
#   F:include/cs46xx.h:1.20->1.21 
#   F:include/emu10k1.h:1.44->1.45 
#   F:include/memalloc.h:1.5->1.6 
#   F:include/pcm.h:1.45->1.46 
#   F:include/ymfpci.h:1.15->1.16 
#   F:isa/sscape.c:1.15->1.16 
#   F:pci/atiixp.c:1.20->1.21 
#   F:pci/atiixp_modem.c:1.5->1.6 
#   F:pci/bt87x.c:1.10->1.11 
#   F:pci/ens1370.c:1.66->1.67 
#   F:pci/es1968.c:1.74->1.75 
#   F:pci/intel8x0.c:1.153->1.154 
#   F:pci/intel8x0m.c:1.13->1.14 
#   F:pci/via82xx.c:1.115->1.116 
#   F:pci/cs46xx/cs46xx_lib.c:1.81->1.82 
#   F:pci/emu10k1/emu10k1_main.c:1.37->1.38 
#   F:pci/emu10k1/emufx.c:1.57->1.58 
#   F:pci/emu10k1/memory.c:1.18->1.19 
#   F:pci/korg1212/korg1212.c:1.45->1.46 
#   F:pci/mixart/mixart.c:1.15->1.16 
#   F:pci/mixart/mixart.h:1.4->1.5 
#   F:pci/rme9652/hdsp.c:1.65->1.66 
#   F:pci/rme9652/rme9652.c:1.51->1.52 
#   F:pci/trident/trident_main.c:1.63->1.64 
#   F:pci/trident/trident_memory.c:1.16->1.17 
#   F:pci/trident/trident_synth.c:1.14->1.15 
#   F:pci/ymfpci/ymfpci_main.c:1.56->1.57 
#   L:Clean up DMA buffer allocation routines.
#   L:
#   L:- snd_dma_alloc_pages*() take the device type and device pointer
#   L:  directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#   L:  instance.
#   L:
#   L:- snd_dma_device struct is removed in each driver's instance (no longer
#   L:  needed due to the change above).
#   L:
#   L:- snd_malloc_pages_fallback() is removed since it's no longer used.
#   L:
#   L:- The buffer reservation / preallocation in snd-page-alloc module is
#   L:  performed only when the buffer id is given.  Normal PCM buffers won't
#   L:  be reserved any more (unless the driver specifies).  The module keeps
#   L:  the linked list of free-reserved buffers, instead of the whole buffers
#   L:  Reservation is done via snd_dma_reserve_buf(), and retrieved via
#   L:  snd_dma_get_reserved_buf()).
#   L:
#   L:- Other misc clean-ups/fixes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/memalloc.h
#   2004/07/30 07:57:24+02:00 perex@suse.cz +11 -10
#   ALSA CVS update
#   D:2004/07/30 13:57:16
#   C:Memalloc module,PCM Midlevel,CS46xx driver,EMU10K1/EMU10K2 driver
#   C:ALSA Core,YMFPCI driver,Sound Scape driver,ATIIXP driver
#   C:ATIIXP-modem driver,BT87x driver,ENS1370/1+ driver,ES1968 driver
#   C:Intel8x0 driver,Intel8x0-modem driver,VIA82xx driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Trident driver
#   F:core/memalloc.c:1.35->1.36 
#   F:core/pcm_memory.c:1.31->1.32 
#   F:core/sgbuf.c:1.7->1.8 
#   F:include/cs46xx.h:1.20->1.21 
#   F:include/emu10k1.h:1.44->1.45 
#   F:include/memalloc.h:1.5->1.6 
#   F:include/pcm.h:1.45->1.46 
#   F:include/ymfpci.h:1.15->1.16 
#   F:isa/sscape.c:1.15->1.16 
#   F:pci/atiixp.c:1.20->1.21 
#   F:pci/atiixp_modem.c:1.5->1.6 
#   F:pci/bt87x.c:1.10->1.11 
#   F:pci/ens1370.c:1.66->1.67 
#   F:pci/es1968.c:1.74->1.75 
#   F:pci/intel8x0.c:1.153->1.154 
#   F:pci/intel8x0m.c:1.13->1.14 
#   F:pci/via82xx.c:1.115->1.116 
#   F:pci/cs46xx/cs46xx_lib.c:1.81->1.82 
#   F:pci/emu10k1/emu10k1_main.c:1.37->1.38 
#   F:pci/emu10k1/emufx.c:1.57->1.58 
#   F:pci/emu10k1/memory.c:1.18->1.19 
#   F:pci/korg1212/korg1212.c:1.45->1.46 
#   F:pci/mixart/mixart.c:1.15->1.16 
#   F:pci/mixart/mixart.h:1.4->1.5 
#   F:pci/rme9652/hdsp.c:1.65->1.66 
#   F:pci/rme9652/rme9652.c:1.51->1.52 
#   F:pci/trident/trident_main.c:1.63->1.64 
#   F:pci/trident/trident_memory.c:1.16->1.17 
#   F:pci/trident/trident_synth.c:1.14->1.15 
#   F:pci/ymfpci/ymfpci_main.c:1.56->1.57 
#   L:Clean up DMA buffer allocation routines.
#   L:
#   L:- snd_dma_alloc_pages*() take the device type and device pointer
#   L:  directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#   L:  instance.
#   L:
#   L:- snd_dma_device struct is removed in each driver's instance (no longer
#   L:  needed due to the change above).
#   L:
#   L:- snd_malloc_pages_fallback() is removed since it's no longer used.
#   L:
#   L:- The buffer reservation / preallocation in snd-page-alloc module is
#   L:  performed only when the buffer id is given.  Normal PCM buffers won't
#   L:  be reserved any more (unless the driver specifies).  The module keeps
#   L:  the linked list of free-reserved buffers, instead of the whole buffers
#   L:  Reservation is done via snd_dma_reserve_buf(), and retrieved via
#   L:  snd_dma_get_reserved_buf()).
#   L:
#   L:- Other misc clean-ups/fixes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/emu10k1.h
#   2004/07/30 07:57:24+02:00 perex@suse.cz +0 -1
#   ALSA CVS update
#   D:2004/07/30 13:57:16
#   C:Memalloc module,PCM Midlevel,CS46xx driver,EMU10K1/EMU10K2 driver
#   C:ALSA Core,YMFPCI driver,Sound Scape driver,ATIIXP driver
#   C:ATIIXP-modem driver,BT87x driver,ENS1370/1+ driver,ES1968 driver
#   C:Intel8x0 driver,Intel8x0-modem driver,VIA82xx driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Trident driver
#   F:core/memalloc.c:1.35->1.36 
#   F:core/pcm_memory.c:1.31->1.32 
#   F:core/sgbuf.c:1.7->1.8 
#   F:include/cs46xx.h:1.20->1.21 
#   F:include/emu10k1.h:1.44->1.45 
#   F:include/memalloc.h:1.5->1.6 
#   F:include/pcm.h:1.45->1.46 
#   F:include/ymfpci.h:1.15->1.16 
#   F:isa/sscape.c:1.15->1.16 
#   F:pci/atiixp.c:1.20->1.21 
#   F:pci/atiixp_modem.c:1.5->1.6 
#   F:pci/bt87x.c:1.10->1.11 
#   F:pci/ens1370.c:1.66->1.67 
#   F:pci/es1968.c:1.74->1.75 
#   F:pci/intel8x0.c:1.153->1.154 
#   F:pci/intel8x0m.c:1.13->1.14 
#   F:pci/via82xx.c:1.115->1.116 
#   F:pci/cs46xx/cs46xx_lib.c:1.81->1.82 
#   F:pci/emu10k1/emu10k1_main.c:1.37->1.38 
#   F:pci/emu10k1/emufx.c:1.57->1.58 
#   F:pci/emu10k1/memory.c:1.18->1.19 
#   F:pci/korg1212/korg1212.c:1.45->1.46 
#   F:pci/mixart/mixart.c:1.15->1.16 
#   F:pci/mixart/mixart.h:1.4->1.5 
#   F:pci/rme9652/hdsp.c:1.65->1.66 
#   F:pci/rme9652/rme9652.c:1.51->1.52 
#   F:pci/trident/trident_main.c:1.63->1.64 
#   F:pci/trident/trident_memory.c:1.16->1.17 
#   F:pci/trident/trident_synth.c:1.14->1.15 
#   F:pci/ymfpci/ymfpci_main.c:1.56->1.57 
#   L:Clean up DMA buffer allocation routines.
#   L:
#   L:- snd_dma_alloc_pages*() take the device type and device pointer
#   L:  directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#   L:  instance.
#   L:
#   L:- snd_dma_device struct is removed in each driver's instance (no longer
#   L:  needed due to the change above).
#   L:
#   L:- snd_malloc_pages_fallback() is removed since it's no longer used.
#   L:
#   L:- The buffer reservation / preallocation in snd-page-alloc module is
#   L:  performed only when the buffer id is given.  Normal PCM buffers won't
#   L:  be reserved any more (unless the driver specifies).  The module keeps
#   L:  the linked list of free-reserved buffers, instead of the whole buffers
#   L:  Reservation is done via snd_dma_reserve_buf(), and retrieved via
#   L:  snd_dma_get_reserved_buf()).
#   L:
#   L:- Other misc clean-ups/fixes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/cs46xx.h
#   2004/07/30 07:57:24+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/07/30 13:57:16
#   C:Memalloc module,PCM Midlevel,CS46xx driver,EMU10K1/EMU10K2 driver
#   C:ALSA Core,YMFPCI driver,Sound Scape driver,ATIIXP driver
#   C:ATIIXP-modem driver,BT87x driver,ENS1370/1+ driver,ES1968 driver
#   C:Intel8x0 driver,Intel8x0-modem driver,VIA82xx driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Trident driver
#   F:core/memalloc.c:1.35->1.36 
#   F:core/pcm_memory.c:1.31->1.32 
#   F:core/sgbuf.c:1.7->1.8 
#   F:include/cs46xx.h:1.20->1.21 
#   F:include/emu10k1.h:1.44->1.45 
#   F:include/memalloc.h:1.5->1.6 
#   F:include/pcm.h:1.45->1.46 
#   F:include/ymfpci.h:1.15->1.16 
#   F:isa/sscape.c:1.15->1.16 
#   F:pci/atiixp.c:1.20->1.21 
#   F:pci/atiixp_modem.c:1.5->1.6 
#   F:pci/bt87x.c:1.10->1.11 
#   F:pci/ens1370.c:1.66->1.67 
#   F:pci/es1968.c:1.74->1.75 
#   F:pci/intel8x0.c:1.153->1.154 
#   F:pci/intel8x0m.c:1.13->1.14 
#   F:pci/via82xx.c:1.115->1.116 
#   F:pci/cs46xx/cs46xx_lib.c:1.81->1.82 
#   F:pci/emu10k1/emu10k1_main.c:1.37->1.38 
#   F:pci/emu10k1/emufx.c:1.57->1.58 
#   F:pci/emu10k1/memory.c:1.18->1.19 
#   F:pci/korg1212/korg1212.c:1.45->1.46 
#   F:pci/mixart/mixart.c:1.15->1.16 
#   F:pci/mixart/mixart.h:1.4->1.5 
#   F:pci/rme9652/hdsp.c:1.65->1.66 
#   F:pci/rme9652/rme9652.c:1.51->1.52 
#   F:pci/trident/trident_main.c:1.63->1.64 
#   F:pci/trident/trident_memory.c:1.16->1.17 
#   F:pci/trident/trident_synth.c:1.14->1.15 
#   F:pci/ymfpci/ymfpci_main.c:1.56->1.57 
#   L:Clean up DMA buffer allocation routines.
#   L:
#   L:- snd_dma_alloc_pages*() take the device type and device pointer
#   L:  directly as arguments.  snd_dma_free_pages() takes only dma_buffer
#   L:  instance.
#   L:
#   L:- snd_dma_device struct is removed in each driver's instance (no longer
#   L:  needed due to the change above).
#   L:
#   L:- snd_malloc_pages_fallback() is removed since it's no longer used.
#   L:
#   L:- The buffer reservation / preallocation in snd-page-alloc module is
#   L:  performed only when the buffer id is given.  Normal PCM buffers won't
#   L:  be reserved any more (unless the driver specifies).  The module keeps
#   L:  the linked list of free-reserved buffers, instead of the whole buffers
#   L:  Reservation is done via snd_dma_reserve_buf(), and retrieved via
#   L:  snd_dma_get_reserved_buf()).
#   L:
#   L:- Other misc clean-ups/fixes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/08/02 11:20:13+02:00 perex@suse.cz 
#   ALSA CVS update
#   AC97 Codec Core,ATIIXP driver,ATIIXP-modem driver,Intel8x0 driver
#   Intel8x0-modem driver
#   Fixed the reset problem of shared audio/modem drivers.
#   
#   This patch fixes the problem that the shared audio/modem drivers reset
#   the codecs with each other at loading time.
#   Currently, intel8x0 and atiixp drivers are supported.
#   The other drivers (if any) should add the new shared type in ac97_codec.h.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/intel8x0m.c
#   2004/07/29 10:09:35+02:00 perex@suse.cz +1 -0
#   ALSA CVS update
#   D:2004/07/29 16:09:34
#   C:AC97 Codec Core,ATIIXP driver,ATIIXP-modem driver,Intel8x0 driver
#   C:Intel8x0-modem driver
#   F:include/ac97_codec.h:1.49->1.50 
#   F:pci/atiixp.c:1.19->1.20 
#   F:pci/atiixp_modem.c:1.4->1.5 
#   F:pci/intel8x0.c:1.152->1.153 
#   F:pci/intel8x0m.c:1.12->1.13 
#   F:pci/ac97/ac97_codec.c:1.141->1.142 
#   L:Fixed the reset problem of shared audio/modem drivers.
#   L:
#   L:This patch fixes the problem that the shared audio/modem drivers reset
#   L:the codecs with each other at loading time.
#   L:Currently, intel8x0 and atiixp drivers are supported.
#   L:The other drivers (if any) should add the new shared type in ac97_codec.h.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/intel8x0.c
#   2004/07/29 10:09:35+02:00 perex@suse.cz +1 -0
#   ALSA CVS update
#   D:2004/07/29 16:09:34
#   C:AC97 Codec Core,ATIIXP driver,ATIIXP-modem driver,Intel8x0 driver
#   C:Intel8x0-modem driver
#   F:include/ac97_codec.h:1.49->1.50 
#   F:pci/atiixp.c:1.19->1.20 
#   F:pci/atiixp_modem.c:1.4->1.5 
#   F:pci/intel8x0.c:1.152->1.153 
#   F:pci/intel8x0m.c:1.12->1.13 
#   F:pci/ac97/ac97_codec.c:1.141->1.142 
#   L:Fixed the reset problem of shared audio/modem drivers.
#   L:
#   L:This patch fixes the problem that the shared audio/modem drivers reset
#   L:the codecs with each other at loading time.
#   L:Currently, intel8x0 and atiixp drivers are supported.
#   L:The other drivers (if any) should add the new shared type in ac97_codec.h.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/atiixp_modem.c
#   2004/07/29 10:09:35+02:00 perex@suse.cz +1 -0
#   ALSA CVS update
#   D:2004/07/29 16:09:34
#   C:AC97 Codec Core,ATIIXP driver,ATIIXP-modem driver,Intel8x0 driver
#   C:Intel8x0-modem driver
#   F:include/ac97_codec.h:1.49->1.50 
#   F:pci/atiixp.c:1.19->1.20 
#   F:pci/atiixp_modem.c:1.4->1.5 
#   F:pci/intel8x0.c:1.152->1.153 
#   F:pci/intel8x0m.c:1.12->1.13 
#   F:pci/ac97/ac97_codec.c:1.141->1.142 
#   L:Fixed the reset problem of shared audio/modem drivers.
#   L:
#   L:This patch fixes the problem that the shared audio/modem drivers reset
#   L:the codecs with each other at loading time.
#   L:Currently, intel8x0 and atiixp drivers are supported.
#   L:The other drivers (if any) should add the new shared type in ac97_codec.h.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/atiixp.c
#   2004/07/29 10:09:35+02:00 perex@suse.cz +1 -0
#   ALSA CVS update
#   D:2004/07/29 16:09:34
#   C:AC97 Codec Core,ATIIXP driver,ATIIXP-modem driver,Intel8x0 driver
#   C:Intel8x0-modem driver
#   F:include/ac97_codec.h:1.49->1.50 
#   F:pci/atiixp.c:1.19->1.20 
#   F:pci/atiixp_modem.c:1.4->1.5 
#   F:pci/intel8x0.c:1.152->1.153 
#   F:pci/intel8x0m.c:1.12->1.13 
#   F:pci/ac97/ac97_codec.c:1.141->1.142 
#   L:Fixed the reset problem of shared audio/modem drivers.
#   L:
#   L:This patch fixes the problem that the shared audio/modem drivers reset
#   L:the codecs with each other at loading time.
#   L:Currently, intel8x0 and atiixp drivers are supported.
#   L:The other drivers (if any) should add the new shared type in ac97_codec.h.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ac97/ac97_codec.c
#   2004/07/29 10:09:35+02:00 perex@suse.cz +37 -1
#   ALSA CVS update
#   D:2004/07/29 16:09:34
#   C:AC97 Codec Core,ATIIXP driver,ATIIXP-modem driver,Intel8x0 driver
#   C:Intel8x0-modem driver
#   F:include/ac97_codec.h:1.49->1.50 
#   F:pci/atiixp.c:1.19->1.20 
#   F:pci/atiixp_modem.c:1.4->1.5 
#   F:pci/intel8x0.c:1.152->1.153 
#   F:pci/intel8x0m.c:1.12->1.13 
#   F:pci/ac97/ac97_codec.c:1.141->1.142 
#   L:Fixed the reset problem of shared audio/modem drivers.
#   L:
#   L:This patch fixes the problem that the shared audio/modem drivers reset
#   L:the codecs with each other at loading time.
#   L:Currently, intel8x0 and atiixp drivers are supported.
#   L:The other drivers (if any) should add the new shared type in ac97_codec.h.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/ac97_codec.h
#   2004/07/29 10:09:34+02:00 perex@suse.cz +9 -0
#   ALSA CVS update
#   D:2004/07/29 16:09:34
#   C:AC97 Codec Core,ATIIXP driver,ATIIXP-modem driver,Intel8x0 driver
#   C:Intel8x0-modem driver
#   F:include/ac97_codec.h:1.49->1.50 
#   F:pci/atiixp.c:1.19->1.20 
#   F:pci/atiixp_modem.c:1.4->1.5 
#   F:pci/intel8x0.c:1.152->1.153 
#   F:pci/intel8x0m.c:1.12->1.13 
#   F:pci/ac97/ac97_codec.c:1.141->1.142 
#   L:Fixed the reset problem of shared audio/modem drivers.
#   L:
#   L:This patch fixes the problem that the shared audio/modem drivers reset
#   L:the codecs with each other at loading time.
#   L:Currently, intel8x0 and atiixp drivers are supported.
#   L:The other drivers (if any) should add the new shared type in ac97_codec.h.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/08/02 11:19:14+02:00 perex@suse.cz 
#   ALSA CVS update
#   Intel8x0 driver
#   Added the support of MCP04.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/intel8x0.c
#   2004/07/29 08:29:38+02:00 perex@suse.cz +2 -0
#   ALSA CVS update
#   D:2004/07/29 14:29:38
#   C:Intel8x0 driver
#   F:pci/intel8x0.c:1.151->1.152 
#   L:Added the support of MCP04.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/08/02 11:18:18+02:00 perex@suse.cz 
#   ALSA CVS update
#   Intel8x0 driver
#   Added the support of nVidia CK804.
#   
#   Signed-off-by: Andrew Chew <achew@nvidia.com>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/intel8x0.c
#   2004/07/28 12:31:03+02:00 perex@suse.cz +5 -0
#   ALSA CVS update
#   D:2004/07/28 18:31:03
#   C:Intel8x0 driver
#   F:pci/intel8x0.c:1.150->1.151 
#   L:Added the support of nVidia CK804.
#   Signed-off-by: Andrew Chew <achew@nvidia.com>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/08/02 11:17:24+02:00 perex@suse.cz 
#   ALSA CVS update
#   VIA82xx driver
#   Added the quirk entry for ECS L7VMM2 uATX.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/via82xx.c
#   2004/07/28 08:19:34+02:00 perex@suse.cz +7 -0
#   ALSA CVS update
#   D:2004/07/28 14:19:34
#   C:VIA82xx driver
#   F:pci/via82xx.c:1.114->1.115 
#   L:Added the quirk entry for ECS L7VMM2 uATX.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/29 15:07:46+02:00 perex@suse.cz 
#   ALSA CVS update
#   ICE1712 driver,ICE1724 driver
#   Added the support of Pontis MS300 to snd-ice1724 driver.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/pontis.h
#   2004/07/28 15:13:57+02:00 perex@suse.cz +33 -0
#   ALSA CVS update
#   D:2004/07/28 14:13:52
#   C:ICE1712 driver,ICE1724 driver
#   F:pci/ice1712/Makefile:1.12->1.13 
#   F:pci/ice1712/ice1724.c:1.41->1.42 
#   F:pci/ice1712/pontis.c:INITIAL->1.1 
#   F:pci/ice1712/pontis.h:INITIAL->1.1 
#   L:Added the support of Pontis MS300 to snd-ice1724 driver.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/pontis.h
#   2004/07/28 15:13:57+02:00 perex@suse.cz +0 -0
#   BitKeeper file /home/perex/bk/linux-sound/work/sound/pci/ice1712/pontis.h
# 
# sound/pci/ice1712/ice1724.c
#   2004/07/28 08:13:52+02:00 perex@suse.cz +3 -0
#   ALSA CVS update
#   D:2004/07/28 14:13:52
#   C:ICE1712 driver,ICE1724 driver
#   F:pci/ice1712/Makefile:1.12->1.13 
#   F:pci/ice1712/ice1724.c:1.41->1.42 
#   F:pci/ice1712/pontis.c:INITIAL->1.1 
#   F:pci/ice1712/pontis.h:INITIAL->1.1 
#   L:Added the support of Pontis MS300 to snd-ice1724 driver.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/Makefile
#   2004/07/28 08:13:52+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/28 14:13:52
#   C:ICE1712 driver,ICE1724 driver
#   F:pci/ice1712/Makefile:1.12->1.13 
#   F:pci/ice1712/ice1724.c:1.41->1.42 
#   F:pci/ice1712/pontis.c:INITIAL->1.1 
#   F:pci/ice1712/pontis.h:INITIAL->1.1 
#   L:Added the support of Pontis MS300 to snd-ice1724 driver.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/pontis.c
#   2004/07/28 15:13:50+02:00 perex@suse.cz +839 -0
#   ALSA CVS update
#   D:2004/07/28 14:13:52
#   C:ICE1712 driver,ICE1724 driver
#   F:pci/ice1712/Makefile:1.12->1.13 
#   F:pci/ice1712/ice1724.c:1.41->1.42 
#   F:pci/ice1712/pontis.c:INITIAL->1.1 
#   F:pci/ice1712/pontis.h:INITIAL->1.1 
#   L:Added the support of Pontis MS300 to snd-ice1724 driver.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/pontis.c
#   2004/07/28 15:13:50+02:00 perex@suse.cz +0 -0
#   BitKeeper file /home/perex/bk/linux-sound/work/sound/pci/ice1712/pontis.c
# 
# ChangeSet
#   2004/07/29 15:07:03+02:00 perex@suse.cz 
#   ALSA CVS update
#   ALSA<-OSS emulation
#   Fixed a typo in the last change, resulting in the infinite loop.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/oss/pcm_oss.c
#   2004/07/28 08:09:10+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/28 14:09:10
#   C:ALSA<-OSS emulation
#   F:core/oss/pcm_oss.c:1.75->1.76 
#   L:Fixed a typo in the last change, resulting in the infinite loop.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 14:40:11+02:00 perex@suse.cz 
#   Merge
# 
# sound/core/control.c
#   2004/07/28 14:39:53+02:00 perex@suse.cz +0 -3
#   SCCS merged
# 
# sound/isa/gus/interwave.c
#   2004/07/28 14:33:10+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/07/28 14:02:21+02:00 perex@suse.cz 
#   Merge
# 
# sound/isa/gus/interwave.c
#   2004/07/28 14:02:03+02:00 perex@suse.cz +0 -2
#   SCCS merged
# 
# ChangeSet
#   2004/07/28 11:58:20+02:00 perex@suse.cz 
#   ALSA CVS update
#   VIA82xx driver
#   Fixed the check of invalid DMA position.
#   
#   The workaround for buggy mobo to correct the DMA position is fixed
#   so that it works properly on normal chips.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/via82xx.c
#   2004/07/27 10:33:20+02:00 perex@suse.cz +17 -10
#   ALSA CVS update
#   D:2004/07/27 16:33:20
#   C:VIA82xx driver
#   F:pci/via82xx.c:1.113->1.114 
#   L:Fixed the check of invalid DMA position.
#   L:
#   L:The workaround for buggy mobo to correct the DMA position is fixed
#   L:so that it works properly on normal chips.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:57:41+02:00 perex@suse.cz 
#   ALSA CVS update
#   ICE1712 driver
#   Added the (experimental) support of Terratec Phase 88.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/ews.h
#   2004/07/27 07:57:36+02:00 perex@suse.cz +3 -1
#   ALSA CVS update
#   D:2004/07/27 13:57:36
#   C:ICE1712 driver
#   F:pci/ice1712/ews.c:1.18->1.19 
#   F:pci/ice1712/ews.h:1.3->1.4 
#   L:Added the (experimental) support of Terratec Phase 88.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/ews.c
#   2004/07/27 07:57:36+02:00 perex@suse.cz +14 -0
#   ALSA CVS update
#   D:2004/07/27 13:57:36
#   C:ICE1712 driver
#   F:pci/ice1712/ews.c:1.18->1.19 
#   F:pci/ice1712/ews.h:1.3->1.4 
#   L:Added the (experimental) support of Terratec Phase 88.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:57:02+02:00 perex@suse.cz 
#   ALSA CVS update
#   RME32 driver
#   Fixed the address mask to get the correct DMA pointer value.
#   
#   Signed-off-by: Pilo Chambert <pilo.c@wanadoo.fr>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/rme32.c
#   2004/07/27 07:43:15+02:00 perex@suse.cz +5 -4
#   ALSA CVS update
#   D:2004/07/27 13:43:15
#   C:RME32 driver
#   F:pci/rme32.c:1.43->1.44 
#   L:Fixed the address mask to get the correct DMA pointer value.
#   Signed-off-by: Pilo Chambert <pilo.c@wanadoo.fr>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:56:22+02:00 perex@suse.cz 
#   ALSA CVS update
#   RME32 driver
#   Fixed the fullduplex mode.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/rme32.c
#   2004/07/27 07:33:45+02:00 perex@suse.cz +24 -3
#   ALSA CVS update
#   D:2004/07/27 13:33:45
#   C:RME32 driver
#   F:pci/rme32.c:1.42->1.43 
#   L:Fixed the fullduplex mode.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:55:42+02:00 perex@suse.cz 
#   ALSA CVS update
#   PCM Midlevel
#   Notify PCM buffer overrun of the intermidate buffer on capture.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/pcm-indirect.h
#   2004/07/27 07:32:38+02:00 perex@suse.cz +4 -0
#   ALSA CVS update
#   D:2004/07/27 13:32:38
#   C:PCM Midlevel
#   F:include/pcm-indirect.h:1.2->1.3 
#   L:Notify PCM buffer overrun of the intermidate buffer on capture.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:55:03+02:00 perex@suse.cz 
#   ALSA CVS update
#   PCM Midlevel
#   Fixed/improved XRUN detection
#   
#   - don't print XRUN message in the case of draining.
#   - pointer callback can return SNDRV_PCM_POS_XRUN to notify the middle layer.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/pcm_lib.c
#   2004/07/27 07:31:03+02:00 perex@suse.cz +29 -13
#   ALSA CVS update
#   D:2004/07/27 13:31:03
#   C:PCM Midlevel
#   F:core/pcm_lib.c:1.56->1.57 
#   F:include/pcm.h:1.44->1.45 
#   L:Fixed/improved XRUN detection
#   L:
#   L:- don't print XRUN message in the case of draining.
#   L:- pointer callback can return SNDRV_PCM_POS_XRUN to notify the middle layer.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/pcm.h
#   2004/07/27 07:31:04+02:00 perex@suse.cz +2 -0
#   ALSA CVS update
#   D:2004/07/27 13:31:03
#   C:PCM Midlevel
#   F:core/pcm_lib.c:1.56->1.57 
#   F:include/pcm.h:1.44->1.45 
#   L:Fixed/improved XRUN detection
#   L:
#   L:- don't print XRUN message in the case of draining.
#   L:- pointer callback can return SNDRV_PCM_POS_XRUN to notify the middle layer.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:54:20+02:00 perex@suse.cz 
#   ALSA CVS update
#   Control Midlevel,HWDEP Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel
#   Timer Midlevel,ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer
#   Unlock BKL in ioctl callback to avoid the long preempt-disabling.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/timer.c
#   2004/07/27 07:28:36+02:00 perex@suse.cz +14 -2
#   ALSA CVS update
#   D:2004/07/27 13:28:36
#   C:Control Midlevel,HWDEP Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer
#   F:core/control.c:1.47->1.48 
#   F:core/hwdep.c:1.26->1.27 
#   F:core/info.c:1.46->1.47 
#   F:core/pcm_native.c:1.101->1.102 
#   F:core/rawmidi.c:1.46->1.47 
#   F:core/timer.c:1.61->1.62 
#   F:core/oss/mixer_oss.c:1.34->1.35 
#   F:core/oss/pcm_oss.c:1.74->1.75 
#   F:core/seq/seq_clientmgr.c:1.31->1.32 
#   F:core/seq/oss/seq_oss.c:1.15->1.16 
#   L:Unlock BKL in ioctl callback to avoid the long preempt-disabling.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/seq_clientmgr.c
#   2004/07/27 07:28:37+02:00 perex@suse.cz +7 -1
#   ALSA CVS update
#   D:2004/07/27 13:28:36
#   C:Control Midlevel,HWDEP Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer
#   F:core/control.c:1.47->1.48 
#   F:core/hwdep.c:1.26->1.27 
#   F:core/info.c:1.46->1.47 
#   F:core/pcm_native.c:1.101->1.102 
#   F:core/rawmidi.c:1.46->1.47 
#   F:core/timer.c:1.61->1.62 
#   F:core/oss/mixer_oss.c:1.34->1.35 
#   F:core/oss/pcm_oss.c:1.74->1.75 
#   F:core/seq/seq_clientmgr.c:1.31->1.32 
#   F:core/seq/oss/seq_oss.c:1.15->1.16 
#   L:Unlock BKL in ioctl callback to avoid the long preempt-disabling.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/oss/seq_oss.c
#   2004/07/27 07:28:37+02:00 perex@suse.cz +7 -1
#   ALSA CVS update
#   D:2004/07/27 13:28:36
#   C:Control Midlevel,HWDEP Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer
#   F:core/control.c:1.47->1.48 
#   F:core/hwdep.c:1.26->1.27 
#   F:core/info.c:1.46->1.47 
#   F:core/pcm_native.c:1.101->1.102 
#   F:core/rawmidi.c:1.46->1.47 
#   F:core/timer.c:1.61->1.62 
#   F:core/oss/mixer_oss.c:1.34->1.35 
#   F:core/oss/pcm_oss.c:1.74->1.75 
#   F:core/seq/seq_clientmgr.c:1.31->1.32 
#   F:core/seq/oss/seq_oss.c:1.15->1.16 
#   L:Unlock BKL in ioctl callback to avoid the long preempt-disabling.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/rawmidi.c
#   2004/07/27 07:28:36+02:00 perex@suse.cz +14 -2
#   ALSA CVS update
#   D:2004/07/27 13:28:36
#   C:Control Midlevel,HWDEP Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer
#   F:core/control.c:1.47->1.48 
#   F:core/hwdep.c:1.26->1.27 
#   F:core/info.c:1.46->1.47 
#   F:core/pcm_native.c:1.101->1.102 
#   F:core/rawmidi.c:1.46->1.47 
#   F:core/timer.c:1.61->1.62 
#   F:core/oss/mixer_oss.c:1.34->1.35 
#   F:core/oss/pcm_oss.c:1.74->1.75 
#   F:core/seq/seq_clientmgr.c:1.31->1.32 
#   F:core/seq/oss/seq_oss.c:1.15->1.16 
#   L:Unlock BKL in ioctl callback to avoid the long preempt-disabling.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/pcm_native.c
#   2004/07/27 07:28:36+02:00 perex@suse.cz +13 -2
#   ALSA CVS update
#   D:2004/07/27 13:28:36
#   C:Control Midlevel,HWDEP Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer
#   F:core/control.c:1.47->1.48 
#   F:core/hwdep.c:1.26->1.27 
#   F:core/info.c:1.46->1.47 
#   F:core/pcm_native.c:1.101->1.102 
#   F:core/rawmidi.c:1.46->1.47 
#   F:core/timer.c:1.61->1.62 
#   F:core/oss/mixer_oss.c:1.34->1.35 
#   F:core/oss/pcm_oss.c:1.74->1.75 
#   F:core/seq/seq_clientmgr.c:1.31->1.32 
#   F:core/seq/oss/seq_oss.c:1.15->1.16 
#   L:Unlock BKL in ioctl callback to avoid the long preempt-disabling.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/oss/pcm_oss.c
#   2004/07/27 07:28:37+02:00 perex@suse.cz +14 -2
#   ALSA CVS update
#   D:2004/07/27 13:28:36
#   C:Control Midlevel,HWDEP Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer
#   F:core/control.c:1.47->1.48 
#   F:core/hwdep.c:1.26->1.27 
#   F:core/info.c:1.46->1.47 
#   F:core/pcm_native.c:1.101->1.102 
#   F:core/rawmidi.c:1.46->1.47 
#   F:core/timer.c:1.61->1.62 
#   F:core/oss/mixer_oss.c:1.34->1.35 
#   F:core/oss/pcm_oss.c:1.74->1.75 
#   F:core/seq/seq_clientmgr.c:1.31->1.32 
#   F:core/seq/oss/seq_oss.c:1.15->1.16 
#   L:Unlock BKL in ioctl callback to avoid the long preempt-disabling.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/oss/mixer_oss.c
#   2004/07/27 07:28:37+02:00 perex@suse.cz +8 -1
#   ALSA CVS update
#   D:2004/07/27 13:28:36
#   C:Control Midlevel,HWDEP Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer
#   F:core/control.c:1.47->1.48 
#   F:core/hwdep.c:1.26->1.27 
#   F:core/info.c:1.46->1.47 
#   F:core/pcm_native.c:1.101->1.102 
#   F:core/rawmidi.c:1.46->1.47 
#   F:core/timer.c:1.61->1.62 
#   F:core/oss/mixer_oss.c:1.34->1.35 
#   F:core/oss/pcm_oss.c:1.74->1.75 
#   F:core/seq/seq_clientmgr.c:1.31->1.32 
#   F:core/seq/oss/seq_oss.c:1.15->1.16 
#   L:Unlock BKL in ioctl callback to avoid the long preempt-disabling.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/info.c
#   2004/07/27 07:28:36+02:00 perex@suse.cz +13 -2
#   ALSA CVS update
#   D:2004/07/27 13:28:36
#   C:Control Midlevel,HWDEP Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer
#   F:core/control.c:1.47->1.48 
#   F:core/hwdep.c:1.26->1.27 
#   F:core/info.c:1.46->1.47 
#   F:core/pcm_native.c:1.101->1.102 
#   F:core/rawmidi.c:1.46->1.47 
#   F:core/timer.c:1.61->1.62 
#   F:core/oss/mixer_oss.c:1.34->1.35 
#   F:core/oss/pcm_oss.c:1.74->1.75 
#   F:core/seq/seq_clientmgr.c:1.31->1.32 
#   F:core/seq/oss/seq_oss.c:1.15->1.16 
#   L:Unlock BKL in ioctl callback to avoid the long preempt-disabling.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/hwdep.c
#   2004/07/27 07:28:36+02:00 perex@suse.cz +14 -2
#   ALSA CVS update
#   D:2004/07/27 13:28:36
#   C:Control Midlevel,HWDEP Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer
#   F:core/control.c:1.47->1.48 
#   F:core/hwdep.c:1.26->1.27 
#   F:core/info.c:1.46->1.47 
#   F:core/pcm_native.c:1.101->1.102 
#   F:core/rawmidi.c:1.46->1.47 
#   F:core/timer.c:1.61->1.62 
#   F:core/oss/mixer_oss.c:1.34->1.35 
#   F:core/oss/pcm_oss.c:1.74->1.75 
#   F:core/seq/seq_clientmgr.c:1.31->1.32 
#   F:core/seq/oss/seq_oss.c:1.15->1.16 
#   L:Unlock BKL in ioctl callback to avoid the long preempt-disabling.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/control.c
#   2004/07/27 07:28:36+02:00 perex@suse.cz +14 -2
#   ALSA CVS update
#   D:2004/07/27 13:28:36
#   C:Control Midlevel,HWDEP Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,ALSA<-OSS emulation,ALSA sequencer,ALSA<-OSS sequencer
#   F:core/control.c:1.47->1.48 
#   F:core/hwdep.c:1.26->1.27 
#   F:core/info.c:1.46->1.47 
#   F:core/pcm_native.c:1.101->1.102 
#   F:core/rawmidi.c:1.46->1.47 
#   F:core/timer.c:1.61->1.62 
#   F:core/oss/mixer_oss.c:1.34->1.35 
#   F:core/oss/pcm_oss.c:1.74->1.75 
#   F:core/seq/seq_clientmgr.c:1.31->1.32 
#   F:core/seq/oss/seq_oss.c:1.15->1.16 
#   L:Unlock BKL in ioctl callback to avoid the long preempt-disabling.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:53:36+02:00 perex@suse.cz 
#   ALSA CVS update
#   ALSA Core
#   Clean up: removed ifdefs and obsolete codes.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/sound.c
#   2004/07/27 07:27:18+02:00 perex@suse.cz +0 -32
#   ALSA CVS update
#   D:2004/07/27 13:27:18
#   C:ALSA Core
#   F:core/info_oss.c:1.10->1.11 
#   F:core/sound.c:1.65->1.66 
#   F:include/core.h:1.56->1.57 
#   F:include/info.h:1.16->1.17 
#   L:Clean up: removed ifdefs and obsolete codes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/info_oss.c
#   2004/07/27 07:27:18+02:00 perex@suse.cz +0 -12
#   ALSA CVS update
#   D:2004/07/27 13:27:18
#   C:ALSA Core
#   F:core/info_oss.c:1.10->1.11 
#   F:core/sound.c:1.65->1.66 
#   F:include/core.h:1.56->1.57 
#   F:include/info.h:1.16->1.17 
#   L:Clean up: removed ifdefs and obsolete codes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/info.h
#   2004/07/27 07:27:18+02:00 perex@suse.cz +4 -1
#   ALSA CVS update
#   D:2004/07/27 13:27:18
#   C:ALSA Core
#   F:core/info_oss.c:1.10->1.11 
#   F:core/sound.c:1.65->1.66 
#   F:include/core.h:1.56->1.57 
#   F:include/info.h:1.16->1.17 
#   L:Clean up: removed ifdefs and obsolete codes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/core.h
#   2004/07/27 07:27:18+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/27 13:27:18
#   C:ALSA Core
#   F:core/info_oss.c:1.10->1.11 
#   F:core/sound.c:1.65->1.66 
#   F:include/core.h:1.56->1.57 
#   F:include/info.h:1.16->1.17 
#   L:Clean up: removed ifdefs and obsolete codes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:52:54+02:00 perex@suse.cz 
#   ALSA CVS update
#   ALSA Core
#   Added unlikely() to the debug check macros.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/core.h
#   2004/07/27 07:22:34+02:00 perex@suse.cz +2 -2
#   ALSA CVS update
#   D:2004/07/27 13:22:34
#   C:ALSA Core
#   F:include/core.h:1.55->1.56 
#   L:Added unlikely() to the debug check macros.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:52:15+02:00 perex@suse.cz 
#   ALSA CVS update
#   ICE1712 driver
#   Added master volume control.
#   
#   The master volume control is added again, this time with
#   the digital attenuation so that it works independently from
#   the DAC volumes.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/aureon.c
#   2004/07/27 07:15:17+02:00 perex@suse.cz +174 -92
#   ALSA CVS update
#   D:2004/07/27 13:15:17
#   C:ICE1712 driver
#   F:pci/ice1712/aureon.c:1.12->1.13 
#   L:Added master volume control.
#   L:
#   L:The master volume control is added again, this time with
#   L:the digital attenuation so that it works independently from
#   L:the DAC volumes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:51:35+02:00 perex@suse.cz 
#   ALSA CVS update
#   ALSA Core,MIXART driver
#   Removed the obsolete NONATOMIC_OPS flag.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/mixart/mixart.c
#   2004/07/27 07:13:50+02:00 perex@suse.cz +2 -4
#   ALSA CVS update
#   D:2004/07/27 13:13:50
#   C:ALSA Core,MIXART driver
#   F:include/asound.h:1.42->1.43 
#   F:pci/mixart/mixart.c:1.14->1.15 
#   L:Removed the obsolete NONATOMIC_OPS flag.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/asound.h
#   2004/07/27 07:13:50+02:00 perex@suse.cz +0 -1
#   ALSA CVS update
#   D:2004/07/27 13:13:50
#   C:ALSA Core,MIXART driver
#   F:include/asound.h:1.42->1.43 
#   F:pci/mixart/mixart.c:1.14->1.15 
#   L:Removed the obsolete NONATOMIC_OPS flag.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:50:56+02:00 perex@suse.cz 
#   ALSA CVS update
#   PPC PowerMac driver
#   Fixed typo.
#   
#   Signed-off-by: Nicolas Kaiser <nikai@nikai.net>
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# sound/ppc/powermac.c
#   2004/07/27 02:02:26+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/27 08:02:26
#   C:PPC PowerMac driver
#   F:ppc/powermac.c:1.18->1.19 
#   L:Fixed typo.
#   Signed-off-by: Nicolas Kaiser <nikai@nikai.net>
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# ChangeSet
#   2004/07/28 11:50:16+02:00 perex@suse.cz 
#   ALSA CVS update
#   PPC PMAC driver
#   Fixed typo.
#   
#   Signed-off-by: Nicolas Kaiser <nikai@nikai.net>
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# sound/ppc/pmac.h
#   2004/07/27 01:35:53+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/27 07:35:53
#   C:PPC PMAC driver
#   F:ppc/pmac.h:1.14->1.15 
#   L:Fixed typo.
#   Signed-off-by: Nicolas Kaiser <nikai@nikai.net>
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# ChangeSet
#   2004/07/28 11:49:37+02:00 perex@suse.cz 
#   ALSA CVS update
#   ALSA Core
#   use list_for_each() in core/memory.c
#   
#   Signed-off-by: Domen Puncer <domen@coderock.org>
#   Signed-off-by: Maximilian Attems <janitor@sternwelten.at>
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# sound/core/memory.c
#   2004/07/26 06:57:39+02:00 perex@suse.cz +2 -4
#   ALSA CVS update
#   D:2004/07/26 12:57:39
#   C:ALSA Core
#   F:core/memory.c:1.30->1.31 
#   L:use list_for_each() in core/memory.c
#   Signed-off-by: Domen Puncer <domen@coderock.org>
#   Signed-off-by: Maximilian Attems <janitor@sternwelten.at>
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# ChangeSet
#   2004/07/28 11:48:57+02:00 perex@suse.cz 
#   ALSA CVS update
#   PPC
#   The alsa driver for powermacs requires i2c support.
#   
#   Signed-off-by: Olaf Hering <olh@suse.de>
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# sound/ppc/Kconfig
#   2004/07/26 06:55:56+02:00 perex@suse.cz +4 -1
#   ALSA CVS update
#   D:2004/07/26 12:55:56
#   C:PPC
#   F:ppc/Kconfig:1.2->1.3 
#   L:The alsa driver for powermacs requires i2c support.
#   Signed-off-by: Olaf Hering <olh@suse.de>
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# ChangeSet
#   2004/07/28 11:48:18+02:00 perex@suse.cz 
#   ALSA CVS update
#   BT87x driver
#   use exact values of analog clock rate
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/bt87x.c
#   2004/07/21 02:19:09+02:00 perex@suse.cz +12 -11
#   ALSA CVS update
#   D:2004/07/21 08:19:09
#   C:BT87x driver
#   F:pci/bt87x.c:1.9->1.10 
#   L:use exact values of analog clock rate
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/07/28 11:47:31+02:00 perex@suse.cz 
#   ALSA CVS update
#   Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   Common EMU synth
#   use ARRAY_SIZE() instead of sizeof() computations
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/synth/emux/emux_nrpn.c
#   2004/07/20 10:54:28+02:00 perex@suse.cz +3 -11
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/sparc/cs4231.c
#   2004/07/20 10:54:28+02:00 perex@suse.cz +1 -3
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/sparc/amd7930.c
#   2004/07/20 10:54:28+02:00 perex@suse.cz +2 -5
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/ppc/daca.c
#   2004/07/20 10:54:28+02:00 perex@suse.cz +1 -3
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/ppc/burgundy.c
#   2004/07/20 10:54:28+02:00 perex@suse.cz +1 -3
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/ppc/awacs.c
#   2004/07/20 10:54:28+02:00 perex@suse.cz +5 -7
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/ymfpci/ymfpci_main.c
#   2004/07/20 10:54:27+02:00 perex@suse.cz +1 -3
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/sonicvibes.c
#   2004/07/20 10:54:25+02:00 perex@suse.cz +2 -6
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/rme9652/rme9652.c
#   2004/07/20 10:54:27+02:00 perex@suse.cz +2 -6
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/rme9652/hdsp.c
#   2004/07/20 10:54:27+02:00 perex@suse.cz +4 -12
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/rme96.c
#   2004/07/20 10:54:25+02:00 perex@suse.cz +1 -3
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/rme32.c
#   2004/07/20 10:54:25+02:00 perex@suse.cz +1 -3
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/nm256/nm256.c
#   2004/07/20 10:54:26+02:00 perex@suse.cz +2 -3
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/maestro3.c
#   2004/07/20 10:54:24+02:00 perex@suse.cz +2 -2
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/korg1212/korg1212.c
#   2004/07/20 10:54:26+02:00 perex@suse.cz +1 -3
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/intel8x0.c
#   2004/07/20 10:54:24+02:00 perex@suse.cz +2 -6
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/ice1712/ice1712.c
#   2004/07/20 10:54:25+02:00 perex@suse.cz +1 -3
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/fm801.c
#   2004/07/20 10:54:24+02:00 perex@suse.cz +3 -5
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/cs46xx/dsp_spos.c
#   2004/07/20 10:54:25+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/cs46xx/cs46xx_lib.c
#   2004/07/20 10:54:25+02:00 perex@suse.cz +1 -3
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/cs4281.c
#   2004/07/20 10:54:23+02:00 perex@suse.cz +2 -4
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/cmipci.c
#   2004/07/20 10:54:23+02:00 perex@suse.cz +6 -8
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/azt3328.c
#   2004/07/20 10:54:23+02:00 perex@suse.cz +1 -3
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/ac97/ak4531_codec.c
#   2004/07/20 10:54:25+02:00 perex@suse.cz +1 -3
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/parisc/harmony.c
#   2004/07/20 10:54:23+02:00 perex@suse.cz +2 -4
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/isa/sb/emu8000_local.h
#   2004/07/20 10:54:23+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/isa/sb/emu8000.c
#   2004/07/20 10:54:23+02:00 perex@suse.cz +4 -6
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/isa/opti9xx/opti92x-ad1848.c
#   2004/07/20 10:54:22+02:00 perex@suse.cz +2 -4
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/isa/opl3sa2.c
#   2004/07/20 10:54:21+02:00 perex@suse.cz +2 -6
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/isa/gus/interwave.c
#   2004/07/20 10:54:22+02:00 perex@suse.cz +3 -5
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/isa/gus/gus_mixer.c
#   2004/07/20 10:54:22+02:00 perex@suse.cz +2 -6
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/isa/es1688/es1688_lib.c
#   2004/07/20 10:54:22+02:00 perex@suse.cz +1 -3
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/isa/cs423x/cs4236_lib.c
#   2004/07/20 10:54:22+02:00 perex@suse.cz +6 -18
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/isa/cs423x/cs4231_lib.c
#   2004/07/20 10:54:22+02:00 perex@suse.cz +1 -3
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/isa/ad1816a/ad1816a_lib.c
#   2004/07/20 10:54:21+02:00 perex@suse.cz +1 -3
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/i2c/tea6330t.c
#   2004/07/20 10:54:12+02:00 perex@suse.cz +1 -3
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/i2c/l3/uda1341.c
#   2004/07/20 10:54:13+02:00 perex@suse.cz +2 -4
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/i2c/cs8427.c
#   2004/07/20 10:54:12+02:00 perex@suse.cz +1 -3
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/drivers/dummy.c
#   2004/07/20 10:54:12+02:00 perex@suse.cz +1 -3
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/core/pcm_native.c
#   2004/07/20 10:54:09+02:00 perex@suse.cz +4 -5
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/core/pcm_lib.c
#   2004/07/20 10:54:09+02:00 perex@suse.cz +2 -2
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/core/oss/pcm_plugin.c
#   2004/07/20 10:54:11+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/core/oss/mixer_oss.c
#   2004/07/20 10:54:10+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/core/ioctl32/pcm32.c
#   2004/07/20 10:54:10+02:00 perex@suse.cz +3 -3
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/arm/sa11xx-uda1341.c
#   2004/07/20 10:54:09+02:00 perex@suse.cz +2 -4
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
#   2004/07/20 10:54:09+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/20 16:54:09
#   C:Documentation,SA11xx UDA1341 driver,PCM Midlevel,IOCTL32 emulation
#   C:ALSA<-OSS emulation,Generic drivers,I2C cs8427,I2C tea6330t,L3 drivers
#   C:OPL3SA2 driver,AD1816A driver,CS4231 driver,CS4236+ driver
#   C:ES1688 driver,GUS Library,AMD InterWave driver,Opti9xx drivers
#   C:EMU8000 driver,PARISC Harmony driver,AZT3328 driver,CMIPCI driver
#   C:CS4281 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,AK4531 codec,CS46xx driver
#   C:ICE1712 driver,KORG1212 driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,YMFPCI driver,PPC AWACS driver,PPC Burgundy driver
#   C:PPC DACA driver,SPARC AMD7930 driver,SPARC cs4231 driver
#   C:Common EMU synth
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.36->1.37 
#   F:arm/sa11xx-uda1341.c:1.17->1.18 
#   F:core/pcm_lib.c:1.55->1.56 
#   F:core/pcm_native.c:1.100->1.101 
#   F:core/ioctl32/pcm32.c:1.17->1.18 
#   F:core/oss/mixer_oss.c:1.33->1.34 
#   F:core/oss/pcm_plugin.c:1.21->1.22 
#   F:drivers/dummy.c:1.31->1.32 
#   F:i2c/cs8427.c:1.20->1.21 
#   F:i2c/tea6330t.c:1.9->1.10 
#   F:i2c/l3/uda1341.c:1.12->1.13 
#   F:isa/opl3sa2.c:1.37->1.38 
#   F:isa/ad1816a/ad1816a_lib.c:1.23->1.24 
#   F:isa/cs423x/cs4231_lib.c:1.42->1.43 
#   F:isa/cs423x/cs4236_lib.c:1.11->1.12 
#   F:isa/es1688/es1688_lib.c:1.26->1.27 
#   F:isa/gus/gus_mixer.c:1.9->1.10 
#   F:isa/gus/interwave.c:1.35->1.36 
#   F:isa/opti9xx/opti92x-ad1848.c:1.47->1.48 
#   F:isa/sb/emu8000.c:1.22->1.23 
#   F:isa/sb/emu8000_local.h:1.5->1.6 
#   F:parisc/harmony.c:1.14->1.15 
#   F:pci/azt3328.c:1.17->1.18 
#   F:pci/cmipci.c:1.72->1.73 
#   F:pci/cs4281.c:1.61->1.62 
#   F:pci/fm801.c:1.51->1.52 
#   F:pci/intel8x0.c:1.149->1.150 
#   F:pci/maestro3.c:1.58->1.59 
#   F:pci/rme32.c:1.41->1.42 
#   F:pci/rme96.c:1.41->1.42 
#   F:pci/sonicvibes.c:1.39->1.40 
#   F:pci/ac97/ak4531_codec.c:1.12->1.13 
#   F:pci/cs46xx/cs46xx_lib.c:1.80->1.81 
#   F:pci/cs46xx/dsp_spos.c:1.25->1.26 
#   F:pci/ice1712/ice1712.c:1.59->1.60 
#   F:pci/korg1212/korg1212.c:1.44->1.45 
#   F:pci/nm256/nm256.c:1.47->1.48 
#   F:pci/rme9652/hdsp.c:1.64->1.65 
#   F:pci/rme9652/rme9652.c:1.50->1.51 
#   F:pci/ymfpci/ymfpci_main.c:1.55->1.56 
#   F:ppc/awacs.c:1.23->1.24 
#   F:ppc/burgundy.c:1.12->1.13 
#   F:ppc/daca.c:1.12->1.13 
#   F:sparc/amd7930.c:1.11->1.12 
#   F:sparc/cs4231.c:1.15->1.16 
#   F:synth/emux/emux_nrpn.c:1.6->1.7 
#   L:use ARRAY_SIZE() instead of sizeof() computations
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/07/28 11:46:40+02:00 perex@suse.cz 
#   ALSA CVS update
#   ALI5451 driver
#   Added the missing snd_power_change_state() in the resume callback.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ali5451/ali5451.c
#   2004/07/16 04:48:16+02:00 perex@suse.cz +1 -0
#   ALSA CVS update
#   D:2004/07/16 10:48:16
#   C:ALI5451 driver
#   F:pci/ali5451/ali5451.c:1.55->1.56 
#   L:Added the missing snd_power_change_state() in the resume callback.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:46:00+02:00 perex@suse.cz 
#   ALSA CVS update
#   ALSA Core,ATIIXP driver,ATIIXP-modem driver,Intel8x0 driver
#   VIA82xx driver
#   Clean up the suspend/resume: save/restore of pci state
#   
#   PCI status is restored in the common resume callback.
#   (Stored in the saved_config array of pci_dev struct.)
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/via82xx.c
#   2004/07/15 10:25:22+02:00 perex@suse.cz +0 -3
#   ALSA CVS update
#   D:2004/07/15 16:25:21
#   C:ALSA Core,ATIIXP driver,ATIIXP-modem driver,Intel8x0 driver
#   C:VIA82xx driver
#   F:core/init.c:1.47->1.48 
#   F:pci/atiixp.c:1.18->1.19 
#   F:pci/atiixp_modem.c:1.3->1.4 
#   F:pci/intel8x0.c:1.148->1.149 
#   F:pci/via82xx.c:1.112->1.113 
#   L:Clean up the suspend/resume: save/restore of pci state
#   L:
#   L:PCI status is restored in the common resume callback.
#   L:(Stored in the saved_config array of pci_dev struct.)
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/intel8x0.c
#   2004/07/15 10:25:22+02:00 perex@suse.cz +0 -6
#   ALSA CVS update
#   D:2004/07/15 16:25:21
#   C:ALSA Core,ATIIXP driver,ATIIXP-modem driver,Intel8x0 driver
#   C:VIA82xx driver
#   F:core/init.c:1.47->1.48 
#   F:pci/atiixp.c:1.18->1.19 
#   F:pci/atiixp_modem.c:1.3->1.4 
#   F:pci/intel8x0.c:1.148->1.149 
#   F:pci/via82xx.c:1.112->1.113 
#   L:Clean up the suspend/resume: save/restore of pci state
#   L:
#   L:PCI status is restored in the common resume callback.
#   L:(Stored in the saved_config array of pci_dev struct.)
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/atiixp_modem.c
#   2004/07/15 10:25:22+02:00 perex@suse.cz +0 -6
#   ALSA CVS update
#   D:2004/07/15 16:25:21
#   C:ALSA Core,ATIIXP driver,ATIIXP-modem driver,Intel8x0 driver
#   C:VIA82xx driver
#   F:core/init.c:1.47->1.48 
#   F:pci/atiixp.c:1.18->1.19 
#   F:pci/atiixp_modem.c:1.3->1.4 
#   F:pci/intel8x0.c:1.148->1.149 
#   F:pci/via82xx.c:1.112->1.113 
#   L:Clean up the suspend/resume: save/restore of pci state
#   L:
#   L:PCI status is restored in the common resume callback.
#   L:(Stored in the saved_config array of pci_dev struct.)
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/atiixp.c
#   2004/07/15 10:25:22+02:00 perex@suse.cz +0 -6
#   ALSA CVS update
#   D:2004/07/15 16:25:21
#   C:ALSA Core,ATIIXP driver,ATIIXP-modem driver,Intel8x0 driver
#   C:VIA82xx driver
#   F:core/init.c:1.47->1.48 
#   F:pci/atiixp.c:1.18->1.19 
#   F:pci/atiixp_modem.c:1.3->1.4 
#   F:pci/intel8x0.c:1.148->1.149 
#   F:pci/via82xx.c:1.112->1.113 
#   L:Clean up the suspend/resume: save/restore of pci state
#   L:
#   L:PCI status is restored in the common resume callback.
#   L:(Stored in the saved_config array of pci_dev struct.)
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/init.c
#   2004/07/15 10:25:21+02:00 perex@suse.cz +2 -0
#   ALSA CVS update
#   D:2004/07/15 16:25:21
#   C:ALSA Core,ATIIXP driver,ATIIXP-modem driver,Intel8x0 driver
#   C:VIA82xx driver
#   F:core/init.c:1.47->1.48 
#   F:pci/atiixp.c:1.18->1.19 
#   F:pci/atiixp_modem.c:1.3->1.4 
#   F:pci/intel8x0.c:1.148->1.149 
#   F:pci/via82xx.c:1.112->1.113 
#   L:Clean up the suspend/resume: save/restore of pci state
#   L:
#   L:PCI status is restored in the common resume callback.
#   L:(Stored in the saved_config array of pci_dev struct.)
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:45:19+02:00 perex@suse.cz 
#   ALSA CVS update
#   Documentation
#   Changed the description of PCI resource allocation to use pci_request_regions().
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
#   2004/07/15 08:46:13+02:00 perex@suse.cz +60 -53
#   ALSA CVS update
#   D:2004/07/15 14:46:13
#   C:Documentation
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.35->1.36 
#   L:Changed the description of PCI resource allocation to use pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:44:34+02:00 perex@suse.cz 
#   ALSA CVS update
#   EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   Clean up the PCI resource allocation.
#   
#   Replaced the manual resource allocations with request_[mem_]region()
#   with pci_request_regions().
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/vx222/vx222.h
#   2004/07/15 08:43:28+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/vx222/vx222.c
#   2004/07/15 08:43:28+02:00 perex@suse.cz +8 -20
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/via82xx.c
#   2004/07/15 08:43:27+02:00 perex@suse.cz +7 -12
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/trident/trident_main.c
#   2004/07/15 08:43:28+02:00 perex@suse.cz +6 -10
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/sonicvibes.c
#   2004/07/15 08:43:27+02:00 perex@suse.cz +10 -42
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/rme9652/rme9652.c
#   2004/07/15 08:43:28+02:00 perex@suse.cz +7 -12
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/rme9652/hdsp.c
#   2004/07/15 08:43:28+02:00 perex@suse.cz +5 -13
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/rme96.c
#   2004/07/15 08:43:27+02:00 perex@suse.cz +6 -11
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/rme32.c
#   2004/07/15 08:43:27+02:00 perex@suse.cz +6 -11
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/mixart/mixart.c
#   2004/07/15 08:43:28+02:00 perex@suse.cz +7 -15
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/maestro3.c
#   2004/07/15 08:43:27+02:00 perex@suse.cz +9 -14
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/korg1212/korg1212.c
#   2004/07/15 08:43:28+02:00 perex@suse.cz +6 -42
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/intel8x0m.c
#   2004/07/15 08:43:27+02:00 perex@suse.cz +13 -42
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/intel8x0.c
#   2004/07/15 08:43:27+02:00 perex@suse.cz +16 -44
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/ice1724.c
#   2004/07/15 08:43:28+02:00 perex@suse.cz +7 -21
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/ice1712.h
#   2004/07/15 08:43:28+02:00 perex@suse.cz +0 -4
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/ice1712.c
#   2004/07/15 08:43:27+02:00 perex@suse.cz +11 -40
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/fm801.c
#   2004/07/15 08:43:27+02:00 perex@suse.cz +5 -10
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/es1968.c
#   2004/07/15 08:43:27+02:00 perex@suse.cz +6 -11
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/es1938.c
#   2004/07/15 08:43:27+02:00 perex@suse.cz +5 -50
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ens1370.c
#   2004/07/15 08:43:27+02:00 perex@suse.cz +5 -10
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/emu10k1/emu10k1_main.c
#   2004/07/15 08:43:27+02:00 perex@suse.cz +7 -9
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/cs4281.c
#   2004/07/15 08:43:27+02:00 perex@suse.cz +11 -25
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/cmipci.c
#   2004/07/15 08:43:27+02:00 perex@suse.cz +6 -10
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/bt87x.c
#   2004/07/15 08:43:27+02:00 perex@suse.cz +4 -12
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/azt3328.c
#   2004/07/15 08:43:27+02:00 perex@suse.cz +6 -50
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/atiixp_modem.c
#   2004/07/15 08:43:27+02:00 perex@suse.cz +8 -13
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/atiixp.c
#   2004/07/15 08:43:27+02:00 perex@suse.cz +8 -14
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/als4000.c
#   2004/07/15 08:43:27+02:00 perex@suse.cz +6 -11
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ali5451/ali5451.c
#   2004/07/15 08:43:27+02:00 perex@suse.cz +7 -10
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/trident.h
#   2004/07/15 08:43:26+02:00 perex@suse.cz +0 -1
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/emu10k1.h
#   2004/07/15 08:43:26+02:00 perex@suse.cz +0 -1
#   ALSA CVS update
#   D:2004/07/15 14:43:26
#   C:EMU10K1/EMU10K2 driver,Trident driver,ALS4000 driver,ATIIXP driver
#   C:ATIIXP-modem driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:ALI5451 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,RME HDSP driver,RME9652 driver,Digigram VX222 driver
#   F:include/emu10k1.h:1.43->1.44 
#   F:include/trident.h:1.19->1.20 
#   F:pci/als4000.c:1.36->1.37 
#   F:pci/atiixp.c:1.17->1.18 
#   F:pci/atiixp_modem.c:1.2->1.3 
#   F:pci/azt3328.c:1.16->1.17 
#   F:pci/bt87x.c:1.8->1.9 
#   F:pci/cmipci.c:1.71->1.72 
#   F:pci/cs4281.c:1.60->1.61 
#   F:pci/ens1370.c:1.65->1.66 
#   F:pci/es1938.c:1.39->1.40 
#   F:pci/es1968.c:1.73->1.74 
#   F:pci/fm801.c:1.50->1.51 
#   F:pci/intel8x0.c:1.147->1.148 
#   F:pci/intel8x0m.c:1.11->1.12 
#   F:pci/maestro3.c:1.57->1.58 
#   F:pci/rme32.c:1.40->1.41 
#   F:pci/rme96.c:1.40->1.41 
#   F:pci/sonicvibes.c:1.38->1.39 
#   F:pci/via82xx.c:1.111->1.112 
#   F:pci/ali5451/ali5451.c:1.54->1.55 
#   F:pci/emu10k1/emu10k1_main.c:1.36->1.37 
#   F:pci/ice1712/ice1712.c:1.58->1.59 
#   F:pci/ice1712/ice1712.h:1.22->1.23 
#   F:pci/ice1712/ice1724.c:1.40->1.41 
#   F:pci/korg1212/korg1212.c:1.43->1.44 
#   F:pci/mixart/mixart.c:1.13->1.14 
#   F:pci/rme9652/hdsp.c:1.63->1.64 
#   F:pci/rme9652/rme9652.c:1.49->1.50 
#   F:pci/trident/trident_main.c:1.62->1.63 
#   F:pci/vx222/vx222.c:1.7->1.8 
#   F:pci/vx222/vx222.h:1.1->1.2 
#   L:Clean up the PCI resource allocation.
#   L:
#   L:Replaced the manual resource allocations with request_[mem_]region()
#   L:with pci_request_regions().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:43:47+02:00 perex@suse.cz 
#   ALSA CVS update
#   ALI5451 driver
#   Fixed the suspend/resume.
#   
#   The suspend callback wasn't set the power state correctly, so
#   the resume process was skipped.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ali5451/ali5451.c
#   2004/07/15 04:21:50+02:00 perex@suse.cz +1 -0
#   ALSA CVS update
#   D:2004/07/15 10:21:50
#   C:ALI5451 driver
#   F:pci/ali5451/ali5451.c:1.53->1.54 
#   L:Fixed the suspend/resume.
#   L:
#   L:The suspend callback wasn't set the power state correctly, so
#   L:the resume process was skipped.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:43:07+02:00 perex@suse.cz 
#   ALSA CVS update
#   EMU10K1/EMU10K2 driver
#   Fixed the detection of Audigy 2 ZS.
#   
#   Signed-off-by: Lee Revell <rlrevell@joe-job.com>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/emu10k1/emu10k1_main.c
#   2004/07/15 04:19:17+02:00 perex@suse.cz +9 -6
#   ALSA CVS update
#   D:2004/07/15 10:19:17
#   C:EMU10K1/EMU10K2 driver
#   F:pci/emu10k1/emu10k1_main.c:1.35->1.36 
#   L:Fixed the detection of Audigy 2 ZS.
#   Signed-off-by: Lee Revell <rlrevell@joe-job.com>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:42:29+02:00 perex@suse.cz 
#   ALSA CVS update
#   ALSA sequencer
#   Fixed the bad check on copy_from_user() return value
#   
#   Signed-off-by: Mika Kukkonen <mika@osdl.org>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/seq_memory.c
#   2004/07/15 04:13:36+02:00 perex@suse.cz +2 -2
#   ALSA CVS update
#   D:2004/07/15 10:13:36
#   C:ALSA sequencer
#   F:core/seq/seq_memory.c:1.16->1.17 
#   L:Fixed the bad check on copy_from_user() return value
#   Signed-off-by: Mika Kukkonen <mika@osdl.org>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:41:49+02:00 perex@suse.cz 
#   ALSA CVS update
#   VIA82xx driver
#   Added the ac97_quirk entry for ECS K7VTA3 v8.0 mobo.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/via82xx.c
#   2004/07/15 04:10:40+02:00 perex@suse.cz +6 -0
#   ALSA CVS update
#   D:2004/07/15 10:10:40
#   C:VIA82xx driver
#   F:pci/via82xx.c:1.110->1.111 
#   L:Added the ac97_quirk entry for ECS K7VTA3 v8.0 mobo.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:41:09+02:00 perex@suse.cz 
#   ALSA CVS update
#   EMU10K1/EMU10K2 driver
#   Enable low latency EFX capture on emu10k1
#   
#   The following patch fixes EFX capture on the emu10k1.  The
#   capture_period_sizes table is in bytes, but the hardware constraint was
#   being set in frames.
#   
#   Signed-off-by: Lee Revell <rlrevell@joe-job.com>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/emu10k1/emupcm.c
#   2004/07/14 11:14:54+02:00 perex@suse.cz +3 -3
#   ALSA CVS update
#   D:2004/07/14 17:14:54
#   C:EMU10K1/EMU10K2 driver
#   F:pci/emu10k1/emupcm.c:1.30->1.31 
#   L:Enable low latency EFX capture on emu10k1
#   L:
#   L:The following patch fixes EFX capture on the emu10k1.  The
#   L:capture_period_sizes table is in bytes, but the hardware constraint was
#   L:being set in frames.
#   Signed-off-by: Lee Revell <rlrevell@joe-job.com>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:40:28+02:00 perex@suse.cz 
#   ALSA CVS update
#   AC97 Codec Core,Intel8x0 driver,Intel8x0-modem driver
#   Fixed the detection of sample rates with no VRA support.
#   
#   - Changed ac97bus->vra to ac97bus->no_vra to indicate the VRA is NOT
#     supported.
#   - In the case of no_vra=1, only 48k is set as the possible rates in
#     snd_ac97_pcm_assign().
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/intel8x0m.c
#   2004/07/14 10:37:32+02:00 perex@suse.cz +0 -1
#   ALSA CVS update
#   D:2004/07/14 16:37:32
#   C:AC97 Codec Core,Intel8x0 driver,Intel8x0-modem driver
#   F:include/ac97_codec.h:1.48->1.49 
#   F:pci/intel8x0.c:1.146->1.147 
#   F:pci/intel8x0m.c:1.10->1.11 
#   F:pci/ac97/ac97_pcm.c:1.15->1.16 
#   L:Fixed the detection of sample rates with no VRA support.
#   L:
#   L:- Changed ac97bus->vra to ac97bus->no_vra to indicate the VRA is NOT
#   L:  supported.
#   L:- In the case of no_vra=1, only 48k is set as the possible rates in
#   L:  snd_ac97_pcm_assign().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/intel8x0.c
#   2004/07/14 10:37:32+02:00 perex@suse.cz +2 -2
#   ALSA CVS update
#   D:2004/07/14 16:37:32
#   C:AC97 Codec Core,Intel8x0 driver,Intel8x0-modem driver
#   F:include/ac97_codec.h:1.48->1.49 
#   F:pci/intel8x0.c:1.146->1.147 
#   F:pci/intel8x0m.c:1.10->1.11 
#   F:pci/ac97/ac97_pcm.c:1.15->1.16 
#   L:Fixed the detection of sample rates with no VRA support.
#   L:
#   L:- Changed ac97bus->vra to ac97bus->no_vra to indicate the VRA is NOT
#   L:  supported.
#   L:- In the case of no_vra=1, only 48k is set as the possible rates in
#   L:  snd_ac97_pcm_assign().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ac97/ac97_pcm.c
#   2004/07/14 10:37:33+02:00 perex@suse.cz +4 -1
#   ALSA CVS update
#   D:2004/07/14 16:37:32
#   C:AC97 Codec Core,Intel8x0 driver,Intel8x0-modem driver
#   F:include/ac97_codec.h:1.48->1.49 
#   F:pci/intel8x0.c:1.146->1.147 
#   F:pci/intel8x0m.c:1.10->1.11 
#   F:pci/ac97/ac97_pcm.c:1.15->1.16 
#   L:Fixed the detection of sample rates with no VRA support.
#   L:
#   L:- Changed ac97bus->vra to ac97bus->no_vra to indicate the VRA is NOT
#   L:  supported.
#   L:- In the case of no_vra=1, only 48k is set as the possible rates in
#   L:  snd_ac97_pcm_assign().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/ac97_codec.h
#   2004/07/14 10:37:32+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/14 16:37:32
#   C:AC97 Codec Core,Intel8x0 driver,Intel8x0-modem driver
#   F:include/ac97_codec.h:1.48->1.49 
#   F:pci/intel8x0.c:1.146->1.147 
#   F:pci/intel8x0m.c:1.10->1.11 
#   F:pci/ac97/ac97_pcm.c:1.15->1.16 
#   L:Fixed the detection of sample rates with no VRA support.
#   L:
#   L:- Changed ac97bus->vra to ac97bus->no_vra to indicate the VRA is NOT
#   L:  supported.
#   L:- In the case of no_vra=1, only 48k is set as the possible rates in
#   L:  snd_ac97_pcm_assign().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:39:42+02:00 perex@suse.cz 
#   ALSA CVS update
#   ALS4000 driver,ATIIXP driver,ATIIXP-modem driver,AZT3328 driver
#   BT87x driver,CMIPCI driver,CS4281 driver,ENS1370/1+ driver
#   ES1968 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   RME96 driver,SonicVibes driver,VIA82xx driver,ALI5451 driver
#   CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   RME9652 driver,Trident driver,YMFPCI driver,PPC PMAC driver
#   USB generic driver
#   Clean up spinlocks.
#   
#   - Removed superfluous spinlocks.
#   - Replaced spin_lock_irqsave() with spin_lock_irq() in the obvious places.
#   - Make sure that prepare callback be non-atomic.
#   - Removed SNDRV_PCM_INFO_NONATOMIC_OPS flag (which is default now).
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/usb/usbaudio.c
#   2004/07/14 10:33:21+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/14 16:33:17
#   C:ALS4000 driver,ATIIXP driver,ATIIXP-modem driver,AZT3328 driver
#   C:BT87x driver,CMIPCI driver,CS4281 driver,ENS1370/1+ driver
#   C:ES1968 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,VIA82xx driver,ALI5451 driver
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,Trident driver,YMFPCI driver,PPC PMAC driver
#   C:USB generic driver
#   F:pci/als4000.c:1.35->1.36 
#   F:pci/atiixp.c:1.16->1.17 
#   F:pci/atiixp_modem.c:1.1->1.2 
#   F:pci/azt3328.c:1.15->1.16 
#   F:pci/bt87x.c:1.7->1.8 
#   F:pci/cmipci.c:1.70->1.71 
#   F:pci/cs4281.c:1.59->1.60 
#   F:pci/ens1370.c:1.64->1.65 
#   F:pci/es1968.c:1.72->1.73 
#   F:pci/fm801.c:1.49->1.50 
#   F:pci/intel8x0.c:1.145->1.146 
#   F:pci/maestro3.c:1.56->1.57 
#   F:pci/rme32.c:1.39->1.40 
#   F:pci/rme96.c:1.39->1.40 
#   F:pci/sonicvibes.c:1.37->1.38 
#   F:pci/via82xx.c:1.109->1.110 
#   F:pci/ali5451/ali5451.c:1.52->1.53 
#   F:pci/cs46xx/cs46xx_lib.c:1.79->1.80 
#   F:pci/emu10k1/emupcm.c:1.29->1.30 
#   F:pci/ice1712/ice1712.c:1.57->1.58 
#   F:pci/ice1712/ice1724.c:1.39->1.40 
#   F:pci/korg1212/korg1212.c:1.42->1.43 
#   F:pci/mixart/mixart.c:1.12->1.13 
#   F:pci/nm256/nm256.c:1.46->1.47 
#   F:pci/rme9652/hdsp.c:1.62->1.63 
#   F:pci/rme9652/rme9652.c:1.48->1.49 
#   F:pci/trident/trident_main.c:1.61->1.62 
#   F:pci/ymfpci/ymfpci_main.c:1.54->1.55 
#   F:ppc/pmac.c:1.32->1.33 
#   F:usb/usbaudio.c:1.105->1.106 
#   L:Clean up spinlocks.
#   L:
#   L:- Removed superfluous spinlocks.
#   L:- Replaced spin_lock_irqsave() with spin_lock_irq() in the obvious places.
#   L:- Make sure that prepare callback be non-atomic.
#   L:- Removed SNDRV_PCM_INFO_NONATOMIC_OPS flag (which is default now).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/ppc/pmac.c
#   2004/07/14 10:33:21+02:00 perex@suse.cz +6 -8
#   ALSA CVS update
#   D:2004/07/14 16:33:17
#   C:ALS4000 driver,ATIIXP driver,ATIIXP-modem driver,AZT3328 driver
#   C:BT87x driver,CMIPCI driver,CS4281 driver,ENS1370/1+ driver
#   C:ES1968 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,VIA82xx driver,ALI5451 driver
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,Trident driver,YMFPCI driver,PPC PMAC driver
#   C:USB generic driver
#   F:pci/als4000.c:1.35->1.36 
#   F:pci/atiixp.c:1.16->1.17 
#   F:pci/atiixp_modem.c:1.1->1.2 
#   F:pci/azt3328.c:1.15->1.16 
#   F:pci/bt87x.c:1.7->1.8 
#   F:pci/cmipci.c:1.70->1.71 
#   F:pci/cs4281.c:1.59->1.60 
#   F:pci/ens1370.c:1.64->1.65 
#   F:pci/es1968.c:1.72->1.73 
#   F:pci/fm801.c:1.49->1.50 
#   F:pci/intel8x0.c:1.145->1.146 
#   F:pci/maestro3.c:1.56->1.57 
#   F:pci/rme32.c:1.39->1.40 
#   F:pci/rme96.c:1.39->1.40 
#   F:pci/sonicvibes.c:1.37->1.38 
#   F:pci/via82xx.c:1.109->1.110 
#   F:pci/ali5451/ali5451.c:1.52->1.53 
#   F:pci/cs46xx/cs46xx_lib.c:1.79->1.80 
#   F:pci/emu10k1/emupcm.c:1.29->1.30 
#   F:pci/ice1712/ice1712.c:1.57->1.58 
#   F:pci/ice1712/ice1724.c:1.39->1.40 
#   F:pci/korg1212/korg1212.c:1.42->1.43 
#   F:pci/mixart/mixart.c:1.12->1.13 
#   F:pci/nm256/nm256.c:1.46->1.47 
#   F:pci/rme9652/hdsp.c:1.62->1.63 
#   F:pci/rme9652/rme9652.c:1.48->1.49 
#   F:pci/trident/trident_main.c:1.61->1.62 
#   F:pci/ymfpci/ymfpci_main.c:1.54->1.55 
#   F:ppc/pmac.c:1.32->1.33 
#   F:usb/usbaudio.c:1.105->1.106 
#   L:Clean up spinlocks.
#   L:
#   L:- Removed superfluous spinlocks.
#   L:- Replaced spin_lock_irqsave() with spin_lock_irq() in the obvious places.
#   L:- Make sure that prepare callback be non-atomic.
#   L:- Removed SNDRV_PCM_INFO_NONATOMIC_OPS flag (which is default now).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ymfpci/ymfpci_main.c
#   2004/07/14 10:33:21+02:00 perex@suse.cz +34 -51
#   ALSA CVS update
#   D:2004/07/14 16:33:17
#   C:ALS4000 driver,ATIIXP driver,ATIIXP-modem driver,AZT3328 driver
#   C:BT87x driver,CMIPCI driver,CS4281 driver,ENS1370/1+ driver
#   C:ES1968 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,VIA82xx driver,ALI5451 driver
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,Trident driver,YMFPCI driver,PPC PMAC driver
#   C:USB generic driver
#   F:pci/als4000.c:1.35->1.36 
#   F:pci/atiixp.c:1.16->1.17 
#   F:pci/atiixp_modem.c:1.1->1.2 
#   F:pci/azt3328.c:1.15->1.16 
#   F:pci/bt87x.c:1.7->1.8 
#   F:pci/cmipci.c:1.70->1.71 
#   F:pci/cs4281.c:1.59->1.60 
#   F:pci/ens1370.c:1.64->1.65 
#   F:pci/es1968.c:1.72->1.73 
#   F:pci/fm801.c:1.49->1.50 
#   F:pci/intel8x0.c:1.145->1.146 
#   F:pci/maestro3.c:1.56->1.57 
#   F:pci/rme32.c:1.39->1.40 
#   F:pci/rme96.c:1.39->1.40 
#   F:pci/sonicvibes.c:1.37->1.38 
#   F:pci/via82xx.c:1.109->1.110 
#   F:pci/ali5451/ali5451.c:1.52->1.53 
#   F:pci/cs46xx/cs46xx_lib.c:1.79->1.80 
#   F:pci/emu10k1/emupcm.c:1.29->1.30 
#   F:pci/ice1712/ice1712.c:1.57->1.58 
#   F:pci/ice1712/ice1724.c:1.39->1.40 
#   F:pci/korg1212/korg1212.c:1.42->1.43 
#   F:pci/mixart/mixart.c:1.12->1.13 
#   F:pci/nm256/nm256.c:1.46->1.47 
#   F:pci/rme9652/hdsp.c:1.62->1.63 
#   F:pci/rme9652/rme9652.c:1.48->1.49 
#   F:pci/trident/trident_main.c:1.61->1.62 
#   F:pci/ymfpci/ymfpci_main.c:1.54->1.55 
#   F:ppc/pmac.c:1.32->1.33 
#   F:usb/usbaudio.c:1.105->1.106 
#   L:Clean up spinlocks.
#   L:
#   L:- Removed superfluous spinlocks.
#   L:- Replaced spin_lock_irqsave() with spin_lock_irq() in the obvious places.
#   L:- Make sure that prepare callback be non-atomic.
#   L:- Removed SNDRV_PCM_INFO_NONATOMIC_OPS flag (which is default now).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/via82xx.c
#   2004/07/14 10:33:18+02:00 perex@suse.cz +9 -13
#   ALSA CVS update
#   D:2004/07/14 16:33:17
#   C:ALS4000 driver,ATIIXP driver,ATIIXP-modem driver,AZT3328 driver
#   C:BT87x driver,CMIPCI driver,CS4281 driver,ENS1370/1+ driver
#   C:ES1968 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,VIA82xx driver,ALI5451 driver
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,Trident driver,YMFPCI driver,PPC PMAC driver
#   C:USB generic driver
#   F:pci/als4000.c:1.35->1.36 
#   F:pci/atiixp.c:1.16->1.17 
#   F:pci/atiixp_modem.c:1.1->1.2 
#   F:pci/azt3328.c:1.15->1.16 
#   F:pci/bt87x.c:1.7->1.8 
#   F:pci/cmipci.c:1.70->1.71 
#   F:pci/cs4281.c:1.59->1.60 
#   F:pci/ens1370.c:1.64->1.65 
#   F:pci/es1968.c:1.72->1.73 
#   F:pci/fm801.c:1.49->1.50 
#   F:pci/intel8x0.c:1.145->1.146 
#   F:pci/maestro3.c:1.56->1.57 
#   F:pci/rme32.c:1.39->1.40 
#   F:pci/rme96.c:1.39->1.40 
#   F:pci/sonicvibes.c:1.37->1.38 
#   F:pci/via82xx.c:1.109->1.110 
#   F:pci/ali5451/ali5451.c:1.52->1.53 
#   F:pci/cs46xx/cs46xx_lib.c:1.79->1.80 
#   F:pci/emu10k1/emupcm.c:1.29->1.30 
#   F:pci/ice1712/ice1712.c:1.57->1.58 
#   F:pci/ice1712/ice1724.c:1.39->1.40 
#   F:pci/korg1212/korg1212.c:1.42->1.43 
#   F:pci/mixart/mixart.c:1.12->1.13 
#   F:pci/nm256/nm256.c:1.46->1.47 
#   F:pci/rme9652/hdsp.c:1.62->1.63 
#   F:pci/rme9652/rme9652.c:1.48->1.49 
#   F:pci/trident/trident_main.c:1.61->1.62 
#   F:pci/ymfpci/ymfpci_main.c:1.54->1.55 
#   F:ppc/pmac.c:1.32->1.33 
#   F:usb/usbaudio.c:1.105->1.106 
#   L:Clean up spinlocks.
#   L:
#   L:- Removed superfluous spinlocks.
#   L:- Replaced spin_lock_irqsave() with spin_lock_irq() in the obvious places.
#   L:- Make sure that prepare callback be non-atomic.
#   L:- Removed SNDRV_PCM_INFO_NONATOMIC_OPS flag (which is default now).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/trident/trident_main.c
#   2004/07/14 10:33:21+02:00 perex@suse.cz +36 -49
#   ALSA CVS update
#   D:2004/07/14 16:33:17
#   C:ALS4000 driver,ATIIXP driver,ATIIXP-modem driver,AZT3328 driver
#   C:BT87x driver,CMIPCI driver,CS4281 driver,ENS1370/1+ driver
#   C:ES1968 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,VIA82xx driver,ALI5451 driver
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,Trident driver,YMFPCI driver,PPC PMAC driver
#   C:USB generic driver
#   F:pci/als4000.c:1.35->1.36 
#   F:pci/atiixp.c:1.16->1.17 
#   F:pci/atiixp_modem.c:1.1->1.2 
#   F:pci/azt3328.c:1.15->1.16 
#   F:pci/bt87x.c:1.7->1.8 
#   F:pci/cmipci.c:1.70->1.71 
#   F:pci/cs4281.c:1.59->1.60 
#   F:pci/ens1370.c:1.64->1.65 
#   F:pci/es1968.c:1.72->1.73 
#   F:pci/fm801.c:1.49->1.50 
#   F:pci/intel8x0.c:1.145->1.146 
#   F:pci/maestro3.c:1.56->1.57 
#   F:pci/rme32.c:1.39->1.40 
#   F:pci/rme96.c:1.39->1.40 
#   F:pci/sonicvibes.c:1.37->1.38 
#   F:pci/via82xx.c:1.109->1.110 
#   F:pci/ali5451/ali5451.c:1.52->1.53 
#   F:pci/cs46xx/cs46xx_lib.c:1.79->1.80 
#   F:pci/emu10k1/emupcm.c:1.29->1.30 
#   F:pci/ice1712/ice1712.c:1.57->1.58 
#   F:pci/ice1712/ice1724.c:1.39->1.40 
#   F:pci/korg1212/korg1212.c:1.42->1.43 
#   F:pci/mixart/mixart.c:1.12->1.13 
#   F:pci/nm256/nm256.c:1.46->1.47 
#   F:pci/rme9652/hdsp.c:1.62->1.63 
#   F:pci/rme9652/rme9652.c:1.48->1.49 
#   F:pci/trident/trident_main.c:1.61->1.62 
#   F:pci/ymfpci/ymfpci_main.c:1.54->1.55 
#   F:ppc/pmac.c:1.32->1.33 
#   F:usb/usbaudio.c:1.105->1.106 
#   L:Clean up spinlocks.
#   L:
#   L:- Removed superfluous spinlocks.
#   L:- Replaced spin_lock_irqsave() with spin_lock_irq() in the obvious places.
#   L:- Make sure that prepare callback be non-atomic.
#   L:- Removed SNDRV_PCM_INFO_NONATOMIC_OPS flag (which is default now).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/sonicvibes.c
#   2004/07/14 10:33:18+02:00 perex@suse.cz +16 -24
#   ALSA CVS update
#   D:2004/07/14 16:33:17
#   C:ALS4000 driver,ATIIXP driver,ATIIXP-modem driver,AZT3328 driver
#   C:BT87x driver,CMIPCI driver,CS4281 driver,ENS1370/1+ driver
#   C:ES1968 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,VIA82xx driver,ALI5451 driver
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,Trident driver,YMFPCI driver,PPC PMAC driver
#   C:USB generic driver
#   F:pci/als4000.c:1.35->1.36 
#   F:pci/atiixp.c:1.16->1.17 
#   F:pci/atiixp_modem.c:1.1->1.2 
#   F:pci/azt3328.c:1.15->1.16 
#   F:pci/bt87x.c:1.7->1.8 
#   F:pci/cmipci.c:1.70->1.71 
#   F:pci/cs4281.c:1.59->1.60 
#   F:pci/ens1370.c:1.64->1.65 
#   F:pci/es1968.c:1.72->1.73 
#   F:pci/fm801.c:1.49->1.50 
#   F:pci/intel8x0.c:1.145->1.146 
#   F:pci/maestro3.c:1.56->1.57 
#   F:pci/rme32.c:1.39->1.40 
#   F:pci/rme96.c:1.39->1.40 
#   F:pci/sonicvibes.c:1.37->1.38 
#   F:pci/via82xx.c:1.109->1.110 
#   F:pci/ali5451/ali5451.c:1.52->1.53 
#   F:pci/cs46xx/cs46xx_lib.c:1.79->1.80 
#   F:pci/emu10k1/emupcm.c:1.29->1.30 
#   F:pci/ice1712/ice1712.c:1.57->1.58 
#   F:pci/ice1712/ice1724.c:1.39->1.40 
#   F:pci/korg1212/korg1212.c:1.42->1.43 
#   F:pci/mixart/mixart.c:1.12->1.13 
#   F:pci/nm256/nm256.c:1.46->1.47 
#   F:pci/rme9652/hdsp.c:1.62->1.63 
#   F:pci/rme9652/rme9652.c:1.48->1.49 
#   F:pci/trident/trident_main.c:1.61->1.62 
#   F:pci/ymfpci/ymfpci_main.c:1.54->1.55 
#   F:ppc/pmac.c:1.32->1.33 
#   F:usb/usbaudio.c:1.105->1.106 
#   L:Clean up spinlocks.
#   L:
#   L:- Removed superfluous spinlocks.
#   L:- Replaced spin_lock_irqsave() with spin_lock_irq() in the obvious places.
#   L:- Make sure that prepare callback be non-atomic.
#   L:- Removed SNDRV_PCM_INFO_NONATOMIC_OPS flag (which is default now).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/rme9652/rme9652.c
#   2004/07/14 10:33:20+02:00 perex@suse.cz +43 -62
#   ALSA CVS update
#   D:2004/07/14 16:33:17
#   C:ALS4000 driver,ATIIXP driver,ATIIXP-modem driver,AZT3328 driver
#   C:BT87x driver,CMIPCI driver,CS4281 driver,ENS1370/1+ driver
#   C:ES1968 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,VIA82xx driver,ALI5451 driver
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,Trident driver,YMFPCI driver,PPC PMAC driver
#   C:USB generic driver
#   F:pci/als4000.c:1.35->1.36 
#   F:pci/atiixp.c:1.16->1.17 
#   F:pci/atiixp_modem.c:1.1->1.2 
#   F:pci/azt3328.c:1.15->1.16 
#   F:pci/bt87x.c:1.7->1.8 
#   F:pci/cmipci.c:1.70->1.71 
#   F:pci/cs4281.c:1.59->1.60 
#   F:pci/ens1370.c:1.64->1.65 
#   F:pci/es1968.c:1.72->1.73 
#   F:pci/fm801.c:1.49->1.50 
#   F:pci/intel8x0.c:1.145->1.146 
#   F:pci/maestro3.c:1.56->1.57 
#   F:pci/rme32.c:1.39->1.40 
#   F:pci/rme96.c:1.39->1.40 
#   F:pci/sonicvibes.c:1.37->1.38 
#   F:pci/via82xx.c:1.109->1.110 
#   F:pci/ali5451/ali5451.c:1.52->1.53 
#   F:pci/cs46xx/cs46xx_lib.c:1.79->1.80 
#   F:pci/emu10k1/emupcm.c:1.29->1.30 
#   F:pci/ice1712/ice1712.c:1.57->1.58 
#   F:pci/ice1712/ice1724.c:1.39->1.40 
#   F:pci/korg1212/korg1212.c:1.42->1.43 
#   F:pci/mixart/mixart.c:1.12->1.13 
#   F:pci/nm256/nm256.c:1.46->1.47 
#   F:pci/rme9652/hdsp.c:1.62->1.63 
#   F:pci/rme9652/rme9652.c:1.48->1.49 
#   F:pci/trident/trident_main.c:1.61->1.62 
#   F:pci/ymfpci/ymfpci_main.c:1.54->1.55 
#   F:ppc/pmac.c:1.32->1.33 
#   F:usb/usbaudio.c:1.105->1.106 
#   L:Clean up spinlocks.
#   L:
#   L:- Removed superfluous spinlocks.
#   L:- Replaced spin_lock_irqsave() with spin_lock_irq() in the obvious places.
#   L:- Make sure that prepare callback be non-atomic.
#   L:- Removed SNDRV_PCM_INFO_NONATOMIC_OPS flag (which is default now).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/rme9652/hdsp.c
#   2004/07/14 10:33:20+02:00 perex@suse.cz +58 -86
#   ALSA CVS update
#   D:2004/07/14 16:33:17
#   C:ALS4000 driver,ATIIXP driver,ATIIXP-modem driver,AZT3328 driver
#   C:BT87x driver,CMIPCI driver,CS4281 driver,ENS1370/1+ driver
#   C:ES1968 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,VIA82xx driver,ALI5451 driver
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,Trident driver,YMFPCI driver,PPC PMAC driver
#   C:USB generic driver
#   F:pci/als4000.c:1.35->1.36 
#   F:pci/atiixp.c:1.16->1.17 
#   F:pci/atiixp_modem.c:1.1->1.2 
#   F:pci/azt3328.c:1.15->1.16 
#   F:pci/bt87x.c:1.7->1.8 
#   F:pci/cmipci.c:1.70->1.71 
#   F:pci/cs4281.c:1.59->1.60 
#   F:pci/ens1370.c:1.64->1.65 
#   F:pci/es1968.c:1.72->1.73 
#   F:pci/fm801.c:1.49->1.50 
#   F:pci/intel8x0.c:1.145->1.146 
#   F:pci/maestro3.c:1.56->1.57 
#   F:pci/rme32.c:1.39->1.40 
#   F:pci/rme96.c:1.39->1.40 
#   F:pci/sonicvibes.c:1.37->1.38 
#   F:pci/via82xx.c:1.109->1.110 
#   F:pci/ali5451/ali5451.c:1.52->1.53 
#   F:pci/cs46xx/cs46xx_lib.c:1.79->1.80 
#   F:pci/emu10k1/emupcm.c:1.29->1.30 
#   F:pci/ice1712/ice1712.c:1.57->1.58 
#   F:pci/ice1712/ice1724.c:1.39->1.40 
#   F:pci/korg1212/korg1212.c:1.42->1.43 
#   F:pci/mixart/mixart.c:1.12->1.13 
#   F:pci/nm256/nm256.c:1.46->1.47 
#   F:pci/rme9652/hdsp.c:1.62->1.63 
#   F:pci/rme9652/rme9652.c:1.48->1.49 
#   F:pci/trident/trident_main.c:1.61->1.62 
#   F:pci/ymfpci/ymfpci_main.c:1.54->1.55 
#   F:ppc/pmac.c:1.32->1.33 
#   F:usb/usbaudio.c:1.105->1.106 
#   L:Clean up spinlocks.
#   L:
#   L:- Removed superfluous spinlocks.
#   L:- Replaced spin_lock_irqsave() with spin_lock_irq() in the obvious places.
#   L:- Make sure that prepare callback be non-atomic.
#   L:- Removed SNDRV_PCM_INFO_NONATOMIC_OPS flag (which is default now).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/rme96.c
#   2004/07/14 10:33:18+02:00 perex@suse.cz +61 -85
#   ALSA CVS update
#   D:2004/07/14 16:33:17
#   C:ALS4000 driver,ATIIXP driver,ATIIXP-modem driver,AZT3328 driver
#   C:BT87x driver,CMIPCI driver,CS4281 driver,ENS1370/1+ driver
#   C:ES1968 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,VIA82xx driver,ALI5451 driver
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,Trident driver,YMFPCI driver,PPC PMAC driver
#   C:USB generic driver
#   F:pci/als4000.c:1.35->1.36 
#   F:pci/atiixp.c:1.16->1.17 
#   F:pci/atiixp_modem.c:1.1->1.2 
#   F:pci/azt3328.c:1.15->1.16 
#   F:pci/bt87x.c:1.7->1.8 
#   F:pci/cmipci.c:1.70->1.71 
#   F:pci/cs4281.c:1.59->1.60 
#   F:pci/ens1370.c:1.64->1.65 
#   F:pci/es1968.c:1.72->1.73 
#   F:pci/fm801.c:1.49->1.50 
#   F:pci/intel8x0.c:1.145->1.146 
#   F:pci/maestro3.c:1.56->1.57 
#   F:pci/rme32.c:1.39->1.40 
#   F:pci/rme96.c:1.39->1.40 
#   F:pci/sonicvibes.c:1.37->1.38 
#   F:pci/via82xx.c:1.109->1.110 
#   F:pci/ali5451/ali5451.c:1.52->1.53 
#   F:pci/cs46xx/cs46xx_lib.c:1.79->1.80 
#   F:pci/emu10k1/emupcm.c:1.29->1.30 
#   F:pci/ice1712/ice1712.c:1.57->1.58 
#   F:pci/ice1712/ice1724.c:1.39->1.40 
#   F:pci/korg1212/korg1212.c:1.42->1.43 
#   F:pci/mixart/mixart.c:1.12->1.13 
#   F:pci/nm256/nm256.c:1.46->1.47 
#   F:pci/rme9652/hdsp.c:1.62->1.63 
#   F:pci/rme9652/rme9652.c:1.48->1.49 
#   F:pci/trident/trident_main.c:1.61->1.62 
#   F:pci/ymfpci/ymfpci_main.c:1.54->1.55 
#   F:ppc/pmac.c:1.32->1.33 
#   F:usb/usbaudio.c:1.105->1.106 
#   L:Clean up spinlocks.
#   L:
#   L:- Removed superfluous spinlocks.
#   L:- Replaced spin_lock_irqsave() with spin_lock_irq() in the obvious places.
#   L:- Make sure that prepare callback be non-atomic.
#   L:- Removed SNDRV_PCM_INFO_NONATOMIC_OPS flag (which is default now).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/rme32.c
#   2004/07/14 10:33:18+02:00 perex@suse.cz +43 -58
#   ALSA CVS update
#   D:2004/07/14 16:33:17
#   C:ALS4000 driver,ATIIXP driver,ATIIXP-modem driver,AZT3328 driver
#   C:BT87x driver,CMIPCI driver,CS4281 driver,ENS1370/1+ driver
#   C:ES1968 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,VIA82xx driver,ALI5451 driver
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,Trident driver,YMFPCI driver,PPC PMAC driver
#   C:USB generic driver
#   F:pci/als4000.c:1.35->1.36 
#   F:pci/atiixp.c:1.16->1.17 
#   F:pci/atiixp_modem.c:1.1->1.2 
#   F:pci/azt3328.c:1.15->1.16 
#   F:pci/bt87x.c:1.7->1.8 
#   F:pci/cmipci.c:1.70->1.71 
#   F:pci/cs4281.c:1.59->1.60 
#   F:pci/ens1370.c:1.64->1.65 
#   F:pci/es1968.c:1.72->1.73 
#   F:pci/fm801.c:1.49->1.50 
#   F:pci/intel8x0.c:1.145->1.146 
#   F:pci/maestro3.c:1.56->1.57 
#   F:pci/rme32.c:1.39->1.40 
#   F:pci/rme96.c:1.39->1.40 
#   F:pci/sonicvibes.c:1.37->1.38 
#   F:pci/via82xx.c:1.109->1.110 
#   F:pci/ali5451/ali5451.c:1.52->1.53 
#   F:pci/cs46xx/cs46xx_lib.c:1.79->1.80 
#   F:pci/emu10k1/emupcm.c:1.29->1.30 
#   F:pci/ice1712/ice1712.c:1.57->1.58 
#   F:pci/ice1712/ice1724.c:1.39->1.40 
#   F:pci/korg1212/korg1212.c:1.42->1.43 
#   F:pci/mixart/mixart.c:1.12->1.13 
#   F:pci/nm256/nm256.c:1.46->1.47 
#   F:pci/rme9652/hdsp.c:1.62->1.63 
#   F:pci/rme9652/rme9652.c:1.48->1.49 
#   F:pci/trident/trident_main.c:1.61->1.62 
#   F:pci/ymfpci/ymfpci_main.c:1.54->1.55 
#   F:ppc/pmac.c:1.32->1.33 
#   F:usb/usbaudio.c:1.105->1.106 
#   L:Clean up spinlocks.
#   L:
#   L:- Removed superfluous spinlocks.
#   L:- Replaced spin_lock_irqsave() with spin_lock_irq() in the obvious places.
#   L:- Make sure that prepare callback be non-atomic.
#   L:- Removed SNDRV_PCM_INFO_NONATOMIC_OPS flag (which is default now).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/nm256/nm256.c
#   2004/07/14 10:33:20+02:00 perex@suse.cz +10 -16
#   ALSA CVS update
#   D:2004/07/14 16:33:17
#   C:ALS4000 driver,ATIIXP driver,ATIIXP-modem driver,AZT3328 driver
#   C:BT87x driver,CMIPCI driver,CS4281 driver,ENS1370/1+ driver
#   C:ES1968 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,VIA82xx driver,ALI5451 driver
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,Trident driver,YMFPCI driver,PPC PMAC driver
#   C:USB generic driver
#   F:pci/als4000.c:1.35->1.36 
#   F:pci/atiixp.c:1.16->1.17 
#   F:pci/atiixp_modem.c:1.1->1.2 
#   F:pci/azt3328.c:1.15->1.16 
#   F:pci/bt87x.c:1.7->1.8 
#   F:pci/cmipci.c:1.70->1.71 
#   F:pci/cs4281.c:1.59->1.60 
#   F:pci/ens1370.c:1.64->1.65 
#   F:pci/es1968.c:1.72->1.73 
#   F:pci/fm801.c:1.49->1.50 
#   F:pci/intel8x0.c:1.145->1.146 
#   F:pci/maestro3.c:1.56->1.57 
#   F:pci/rme32.c:1.39->1.40 
#   F:pci/rme96.c:1.39->1.40 
#   F:pci/sonicvibes.c:1.37->1.38 
#   F:pci/via82xx.c:1.109->1.110 
#   F:pci/ali5451/ali5451.c:1.52->1.53 
#   F:pci/cs46xx/cs46xx_lib.c:1.79->1.80 
#   F:pci/emu10k1/emupcm.c:1.29->1.30 
#   F:pci/ice1712/ice1712.c:1.57->1.58 
#   F:pci/ice1712/ice1724.c:1.39->1.40 
#   F:pci/korg1212/korg1212.c:1.42->1.43 
#   F:pci/mixart/mixart.c:1.12->1.13 
#   F:pci/nm256/nm256.c:1.46->1.47 
#   F:pci/rme9652/hdsp.c:1.62->1.63 
#   F:pci/rme9652/rme9652.c:1.48->1.49 
#   F:pci/trident/trident_main.c:1.61->1.62 
#   F:pci/ymfpci/ymfpci_main.c:1.54->1.55 
#   F:ppc/pmac.c:1.32->1.33 
#   F:usb/usbaudio.c:1.105->1.106 
#   L:Clean up spinlocks.
#   L:
#   L:- Removed superfluous spinlocks.
#   L:- Replaced spin_lock_irqsave() with spin_lock_irq() in the obvious places.
#   L:- Make sure that prepare callback be non-atomic.
#   L:- Removed SNDRV_PCM_INFO_NONATOMIC_OPS flag (which is default now).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/mixart/mixart.c
#   2004/07/14 10:33:20+02:00 perex@suse.cz +2 -2
#   ALSA CVS update
#   D:2004/07/14 16:33:17
#   C:ALS4000 driver,ATIIXP driver,ATIIXP-modem driver,AZT3328 driver
#   C:BT87x driver,CMIPCI driver,CS4281 driver,ENS1370/1+ driver
#   C:ES1968 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,VIA82xx driver,ALI5451 driver
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,Trident driver,YMFPCI driver,PPC PMAC driver
#   C:USB generic driver
#   F:pci/als4000.c:1.35->1.36 
#   F:pci/atiixp.c:1.16->1.17 
#   F:pci/atiixp_modem.c:1.1->1.2 
#   F:pci/azt3328.c:1.15->1.16 
#   F:pci/bt87x.c:1.7->1.8 
#   F:pci/cmipci.c:1.70->1.71 
#   F:pci/cs4281.c:1.59->1.60 
#   F:pci/ens1370.c:1.64->1.65 
#   F:pci/es1968.c:1.72->1.73 
#   F:pci/fm801.c:1.49->1.50 
#   F:pci/intel8x0.c:1.145->1.146 
#   F:pci/maestro3.c:1.56->1.57 
#   F:pci/rme32.c:1.39->1.40 
#   F:pci/rme96.c:1.39->1.40 
#   F:pci/sonicvibes.c:1.37->1.38 
#   F:pci/via82xx.c:1.109->1.110 
#   F:pci/ali5451/ali5451.c:1.52->1.53 
#   F:pci/cs46xx/cs46xx_lib.c:1.79->1.80 
#   F:pci/emu10k1/emupcm.c:1.29->1.30 
#   F:pci/ice1712/ice1712.c:1.57->1.58 
#   F:pci/ice1712/ice1724.c:1.39->1.40 
#   F:pci/korg1212/korg1212.c:1.42->1.43 
#   F:pci/mixart/mixart.c:1.12->1.13 
#   F:pci/nm256/nm256.c:1.46->1.47 
#   F:pci/rme9652/hdsp.c:1.62->1.63 
#   F:pci/rme9652/rme9652.c:1.48->1.49 
#   F:pci/trident/trident_main.c:1.61->1.62 
#   F:pci/ymfpci/ymfpci_main.c:1.54->1.55 
#   F:ppc/pmac.c:1.32->1.33 
#   F:usb/usbaudio.c:1.105->1.106 
#   L:Clean up spinlocks.
#   L:
#   L:- Removed superfluous spinlocks.
#   L:- Replaced spin_lock_irqsave() with spin_lock_irq() in the obvious places.
#   L:- Make sure that prepare callback be non-atomic.
#   L:- Removed SNDRV_PCM_INFO_NONATOMIC_OPS flag (which is default now).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/maestro3.c
#   2004/07/14 10:33:18+02:00 perex@suse.cz +11 -16
#   ALSA CVS update
#   D:2004/07/14 16:33:17
#   C:ALS4000 driver,ATIIXP driver,ATIIXP-modem driver,AZT3328 driver
#   C:BT87x driver,CMIPCI driver,CS4281 driver,ENS1370/1+ driver
#   C:ES1968 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,VIA82xx driver,ALI5451 driver
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,Trident driver,YMFPCI driver,PPC PMAC driver
#   C:USB generic driver
#   F:pci/als4000.c:1.35->1.36 
#   F:pci/atiixp.c:1.16->1.17 
#   F:pci/atiixp_modem.c:1.1->1.2 
#   F:pci/azt3328.c:1.15->1.16 
#   F:pci/bt87x.c:1.7->1.8 
#   F:pci/cmipci.c:1.70->1.71 
#   F:pci/cs4281.c:1.59->1.60 
#   F:pci/ens1370.c:1.64->1.65 
#   F:pci/es1968.c:1.72->1.73 
#   F:pci/fm801.c:1.49->1.50 
#   F:pci/intel8x0.c:1.145->1.146 
#   F:pci/maestro3.c:1.56->1.57 
#   F:pci/rme32.c:1.39->1.40 
#   F:pci/rme96.c:1.39->1.40 
#   F:pci/sonicvibes.c:1.37->1.38 
#   F:pci/via82xx.c:1.109->1.110 
#   F:pci/ali5451/ali5451.c:1.52->1.53 
#   F:pci/cs46xx/cs46xx_lib.c:1.79->1.80 
#   F:pci/emu10k1/emupcm.c:1.29->1.30 
#   F:pci/ice1712/ice1712.c:1.57->1.58 
#   F:pci/ice1712/ice1724.c:1.39->1.40 
#   F:pci/korg1212/korg1212.c:1.42->1.43 
#   F:pci/mixart/mixart.c:1.12->1.13 
#   F:pci/nm256/nm256.c:1.46->1.47 
#   F:pci/rme9652/hdsp.c:1.62->1.63 
#   F:pci/rme9652/rme9652.c:1.48->1.49 
#   F:pci/trident/trident_main.c:1.61->1.62 
#   F:pci/ymfpci/ymfpci_main.c:1.54->1.55 
#   F:ppc/pmac.c:1.32->1.33 
#   F:usb/usbaudio.c:1.105->1.106 
#   L:Clean up spinlocks.
#   L:
#   L:- Removed superfluous spinlocks.
#   L:- Replaced spin_lock_irqsave() with spin_lock_irq() in the obvious places.
#   L:- Make sure that prepare callback be non-atomic.
#   L:- Removed SNDRV_PCM_INFO_NONATOMIC_OPS flag (which is default now).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/korg1212/korg1212.c
#   2004/07/14 10:33:20+02:00 perex@suse.cz +23 -33
#   ALSA CVS update
#   D:2004/07/14 16:33:17
#   C:ALS4000 driver,ATIIXP driver,ATIIXP-modem driver,AZT3328 driver
#   C:BT87x driver,CMIPCI driver,CS4281 driver,ENS1370/1+ driver
#   C:ES1968 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,VIA82xx driver,ALI5451 driver
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,Trident driver,YMFPCI driver,PPC PMAC driver
#   C:USB generic driver
#   F:pci/als4000.c:1.35->1.36 
#   F:pci/atiixp.c:1.16->1.17 
#   F:pci/atiixp_modem.c:1.1->1.2 
#   F:pci/azt3328.c:1.15->1.16 
#   F:pci/bt87x.c:1.7->1.8 
#   F:pci/cmipci.c:1.70->1.71 
#   F:pci/cs4281.c:1.59->1.60 
#   F:pci/ens1370.c:1.64->1.65 
#   F:pci/es1968.c:1.72->1.73 
#   F:pci/fm801.c:1.49->1.50 
#   F:pci/intel8x0.c:1.145->1.146 
#   F:pci/maestro3.c:1.56->1.57 
#   F:pci/rme32.c:1.39->1.40 
#   F:pci/rme96.c:1.39->1.40 
#   F:pci/sonicvibes.c:1.37->1.38 
#   F:pci/via82xx.c:1.109->1.110 
#   F:pci/ali5451/ali5451.c:1.52->1.53 
#   F:pci/cs46xx/cs46xx_lib.c:1.79->1.80 
#   F:pci/emu10k1/emupcm.c:1.29->1.30 
#   F:pci/ice1712/ice1712.c:1.57->1.58 
#   F:pci/ice1712/ice1724.c:1.39->1.40 
#   F:pci/korg1212/korg1212.c:1.42->1.43 
#   F:pci/mixart/mixart.c:1.12->1.13 
#   F:pci/nm256/nm256.c:1.46->1.47 
#   F:pci/rme9652/hdsp.c:1.62->1.63 
#   F:pci/rme9652/rme9652.c:1.48->1.49 
#   F:pci/trident/trident_main.c:1.61->1.62 
#   F:pci/ymfpci/ymfpci_main.c:1.54->1.55 
#   F:ppc/pmac.c:1.32->1.33 
#   F:usb/usbaudio.c:1.105->1.106 
#   L:Clean up spinlocks.
#   L:
#   L:- Removed superfluous spinlocks.
#   L:- Replaced spin_lock_irqsave() with spin_lock_irq() in the obvious places.
#   L:- Make sure that prepare callback be non-atomic.
#   L:- Removed SNDRV_PCM_INFO_NONATOMIC_OPS flag (which is default now).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/intel8x0.c
#   2004/07/14 10:33:18+02:00 perex@suse.cz +16 -18
#   ALSA CVS update
#   D:2004/07/14 16:33:17
#   C:ALS4000 driver,ATIIXP driver,ATIIXP-modem driver,AZT3328 driver
#   C:BT87x driver,CMIPCI driver,CS4281 driver,ENS1370/1+ driver
#   C:ES1968 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,VIA82xx driver,ALI5451 driver
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,Trident driver,YMFPCI driver,PPC PMAC driver
#   C:USB generic driver
#   F:pci/als4000.c:1.35->1.36 
#   F:pci/atiixp.c:1.16->1.17 
#   F:pci/atiixp_modem.c:1.1->1.2 
#   F:pci/azt3328.c:1.15->1.16 
#   F:pci/bt87x.c:1.7->1.8 
#   F:pci/cmipci.c:1.70->1.71 
#   F:pci/cs4281.c:1.59->1.60 
#   F:pci/ens1370.c:1.64->1.65 
#   F:pci/es1968.c:1.72->1.73 
#   F:pci/fm801.c:1.49->1.50 
#   F:pci/intel8x0.c:1.145->1.146 
#   F:pci/maestro3.c:1.56->1.57 
#   F:pci/rme32.c:1.39->1.40 
#   F:pci/rme96.c:1.39->1.40 
#   F:pci/sonicvibes.c:1.37->1.38 
#   F:pci/via82xx.c:1.109->1.110 
#   F:pci/ali5451/ali5451.c:1.52->1.53 
#   F:pci/cs46xx/cs46xx_lib.c:1.79->1.80 
#   F:pci/emu10k1/emupcm.c:1.29->1.30 
#   F:pci/ice1712/ice1712.c:1.57->1.58 
#   F:pci/ice1712/ice1724.c:1.39->1.40 
#   F:pci/korg1212/korg1212.c:1.42->1.43 
#   F:pci/mixart/mixart.c:1.12->1.13 
#   F:pci/nm256/nm256.c:1.46->1.47 
#   F:pci/rme9652/hdsp.c:1.62->1.63 
#   F:pci/rme9652/rme9652.c:1.48->1.49 
#   F:pci/trident/trident_main.c:1.61->1.62 
#   F:pci/ymfpci/ymfpci_main.c:1.54->1.55 
#   F:ppc/pmac.c:1.32->1.33 
#   F:usb/usbaudio.c:1.105->1.106 
#   L:Clean up spinlocks.
#   L:
#   L:- Removed superfluous spinlocks.
#   L:- Replaced spin_lock_irqsave() with spin_lock_irq() in the obvious places.
#   L:- Make sure that prepare callback be non-atomic.
#   L:- Removed SNDRV_PCM_INFO_NONATOMIC_OPS flag (which is default now).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/ice1724.c
#   2004/07/14 10:33:19+02:00 perex@suse.cz +37 -17
#   ALSA CVS update
#   D:2004/07/14 16:33:17
#   C:ALS4000 driver,ATIIXP driver,ATIIXP-modem driver,AZT3328 driver
#   C:BT87x driver,CMIPCI driver,CS4281 driver,ENS1370/1+ driver
#   C:ES1968 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,VIA82xx driver,ALI5451 driver
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,Trident driver,YMFPCI driver,PPC PMAC driver
#   C:USB generic driver
#   F:pci/als4000.c:1.35->1.36 
#   F:pci/atiixp.c:1.16->1.17 
#   F:pci/atiixp_modem.c:1.1->1.2 
#   F:pci/azt3328.c:1.15->1.16 
#   F:pci/bt87x.c:1.7->1.8 
#   F:pci/cmipci.c:1.70->1.71 
#   F:pci/cs4281.c:1.59->1.60 
#   F:pci/ens1370.c:1.64->1.65 
#   F:pci/es1968.c:1.72->1.73 
#   F:pci/fm801.c:1.49->1.50 
#   F:pci/intel8x0.c:1.145->1.146 
#   F:pci/maestro3.c:1.56->1.57 
#   F:pci/rme32.c:1.39->1.40 
#   F:pci/rme96.c:1.39->1.40 
#   F:pci/sonicvibes.c:1.37->1.38 
#   F:pci/via82xx.c:1.109->1.110 
#   F:pci/ali5451/ali5451.c:1.52->1.53 
#   F:pci/cs46xx/cs46xx_lib.c:1.79->1.80 
#   F:pci/emu10k1/emupcm.c:1.29->1.30 
#   F:pci/ice1712/ice1712.c:1.57->1.58 
#   F:pci/ice1712/ice1724.c:1.39->1.40 
#   F:pci/korg1212/korg1212.c:1.42->1.43 
#   F:pci/mixart/mixart.c:1.12->1.13 
#   F:pci/nm256/nm256.c:1.46->1.47 
#   F:pci/rme9652/hdsp.c:1.62->1.63 
#   F:pci/rme9652/rme9652.c:1.48->1.49 
#   F:pci/trident/trident_main.c:1.61->1.62 
#   F:pci/ymfpci/ymfpci_main.c:1.54->1.55 
#   F:ppc/pmac.c:1.32->1.33 
#   F:usb/usbaudio.c:1.105->1.106 
#   L:Clean up spinlocks.
#   L:
#   L:- Removed superfluous spinlocks.
#   L:- Replaced spin_lock_irqsave() with spin_lock_irq() in the obvious places.
#   L:- Make sure that prepare callback be non-atomic.
#   L:- Removed SNDRV_PCM_INFO_NONATOMIC_OPS flag (which is default now).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/ice1712.c
#   2004/07/14 10:33:19+02:00 perex@suse.cz +10 -10
#   ALSA CVS update
#   D:2004/07/14 16:33:17
#   C:ALS4000 driver,ATIIXP driver,ATIIXP-modem driver,AZT3328 driver
#   C:BT87x driver,CMIPCI driver,CS4281 driver,ENS1370/1+ driver
#   C:ES1968 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,VIA82xx driver,ALI5451 driver
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,Trident driver,YMFPCI driver,PPC PMAC driver
#   C:USB generic driver
#   F:pci/als4000.c:1.35->1.36 
#   F:pci/atiixp.c:1.16->1.17 
#   F:pci/atiixp_modem.c:1.1->1.2 
#   F:pci/azt3328.c:1.15->1.16 
#   F:pci/bt87x.c:1.7->1.8 
#   F:pci/cmipci.c:1.70->1.71 
#   F:pci/cs4281.c:1.59->1.60 
#   F:pci/ens1370.c:1.64->1.65 
#   F:pci/es1968.c:1.72->1.73 
#   F:pci/fm801.c:1.49->1.50 
#   F:pci/intel8x0.c:1.145->1.146 
#   F:pci/maestro3.c:1.56->1.57 
#   F:pci/rme32.c:1.39->1.40 
#   F:pci/rme96.c:1.39->1.40 
#   F:pci/sonicvibes.c:1.37->1.38 
#   F:pci/via82xx.c:1.109->1.110 
#   F:pci/ali5451/ali5451.c:1.52->1.53 
#   F:pci/cs46xx/cs46xx_lib.c:1.79->1.80 
#   F:pci/emu10k1/emupcm.c:1.29->1.30 
#   F:pci/ice1712/ice1712.c:1.57->1.58 
#   F:pci/ice1712/ice1724.c:1.39->1.40 
#   F:pci/korg1212/korg1212.c:1.42->1.43 
#   F:pci/mixart/mixart.c:1.12->1.13 
#   F:pci/nm256/nm256.c:1.46->1.47 
#   F:pci/rme9652/hdsp.c:1.62->1.63 
#   F:pci/rme9652/rme9652.c:1.48->1.49 
#   F:pci/trident/trident_main.c:1.61->1.62 
#   F:pci/ymfpci/ymfpci_main.c:1.54->1.55 
#   F:ppc/pmac.c:1.32->1.33 
#   F:usb/usbaudio.c:1.105->1.106 
#   L:Clean up spinlocks.
#   L:
#   L:- Removed superfluous spinlocks.
#   L:- Replaced spin_lock_irqsave() with spin_lock_irq() in the obvious places.
#   L:- Make sure that prepare callback be non-atomic.
#   L:- Removed SNDRV_PCM_INFO_NONATOMIC_OPS flag (which is default now).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/fm801.c
#   2004/07/14 10:33:18+02:00 perex@suse.cz +6 -8
#   ALSA CVS update
#   D:2004/07/14 16:33:17
#   C:ALS4000 driver,ATIIXP driver,ATIIXP-modem driver,AZT3328 driver
#   C:BT87x driver,CMIPCI driver,CS4281 driver,ENS1370/1+ driver
#   C:ES1968 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,VIA82xx driver,ALI5451 driver
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,Trident driver,YMFPCI driver,PPC PMAC driver
#   C:USB generic driver
#   F:pci/als4000.c:1.35->1.36 
#   F:pci/atiixp.c:1.16->1.17 
#   F:pci/atiixp_modem.c:1.1->1.2 
#   F:pci/azt3328.c:1.15->1.16 
#   F:pci/bt87x.c:1.7->1.8 
#   F:pci/cmipci.c:1.70->1.71 
#   F:pci/cs4281.c:1.59->1.60 
#   F:pci/ens1370.c:1.64->1.65 
#   F:pci/es1968.c:1.72->1.73 
#   F:pci/fm801.c:1.49->1.50 
#   F:pci/intel8x0.c:1.145->1.146 
#   F:pci/maestro3.c:1.56->1.57 
#   F:pci/rme32.c:1.39->1.40 
#   F:pci/rme96.c:1.39->1.40 
#   F:pci/sonicvibes.c:1.37->1.38 
#   F:pci/via82xx.c:1.109->1.110 
#   F:pci/ali5451/ali5451.c:1.52->1.53 
#   F:pci/cs46xx/cs46xx_lib.c:1.79->1.80 
#   F:pci/emu10k1/emupcm.c:1.29->1.30 
#   F:pci/ice1712/ice1712.c:1.57->1.58 
#   F:pci/ice1712/ice1724.c:1.39->1.40 
#   F:pci/korg1212/korg1212.c:1.42->1.43 
#   F:pci/mixart/mixart.c:1.12->1.13 
#   F:pci/nm256/nm256.c:1.46->1.47 
#   F:pci/rme9652/hdsp.c:1.62->1.63 
#   F:pci/rme9652/rme9652.c:1.48->1.49 
#   F:pci/trident/trident_main.c:1.61->1.62 
#   F:pci/ymfpci/ymfpci_main.c:1.54->1.55 
#   F:ppc/pmac.c:1.32->1.33 
#   F:usb/usbaudio.c:1.105->1.106 
#   L:Clean up spinlocks.
#   L:
#   L:- Removed superfluous spinlocks.
#   L:- Replaced spin_lock_irqsave() with spin_lock_irq() in the obvious places.
#   L:- Make sure that prepare callback be non-atomic.
#   L:- Removed SNDRV_PCM_INFO_NONATOMIC_OPS flag (which is default now).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/es1968.c
#   2004/07/14 10:33:18+02:00 perex@suse.cz +16 -22
#   ALSA CVS update
#   D:2004/07/14 16:33:17
#   C:ALS4000 driver,ATIIXP driver,ATIIXP-modem driver,AZT3328 driver
#   C:BT87x driver,CMIPCI driver,CS4281 driver,ENS1370/1+ driver
#   C:ES1968 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,VIA82xx driver,ALI5451 driver
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,Trident driver,YMFPCI driver,PPC PMAC driver
#   C:USB generic driver
#   F:pci/als4000.c:1.35->1.36 
#   F:pci/atiixp.c:1.16->1.17 
#   F:pci/atiixp_modem.c:1.1->1.2 
#   F:pci/azt3328.c:1.15->1.16 
#   F:pci/bt87x.c:1.7->1.8 
#   F:pci/cmipci.c:1.70->1.71 
#   F:pci/cs4281.c:1.59->1.60 
#   F:pci/ens1370.c:1.64->1.65 
#   F:pci/es1968.c:1.72->1.73 
#   F:pci/fm801.c:1.49->1.50 
#   F:pci/intel8x0.c:1.145->1.146 
#   F:pci/maestro3.c:1.56->1.57 
#   F:pci/rme32.c:1.39->1.40 
#   F:pci/rme96.c:1.39->1.40 
#   F:pci/sonicvibes.c:1.37->1.38 
#   F:pci/via82xx.c:1.109->1.110 
#   F:pci/ali5451/ali5451.c:1.52->1.53 
#   F:pci/cs46xx/cs46xx_lib.c:1.79->1.80 
#   F:pci/emu10k1/emupcm.c:1.29->1.30 
#   F:pci/ice1712/ice1712.c:1.57->1.58 
#   F:pci/ice1712/ice1724.c:1.39->1.40 
#   F:pci/korg1212/korg1212.c:1.42->1.43 
#   F:pci/mixart/mixart.c:1.12->1.13 
#   F:pci/nm256/nm256.c:1.46->1.47 
#   F:pci/rme9652/hdsp.c:1.62->1.63 
#   F:pci/rme9652/rme9652.c:1.48->1.49 
#   F:pci/trident/trident_main.c:1.61->1.62 
#   F:pci/ymfpci/ymfpci_main.c:1.54->1.55 
#   F:ppc/pmac.c:1.32->1.33 
#   F:usb/usbaudio.c:1.105->1.106 
#   L:Clean up spinlocks.
#   L:
#   L:- Removed superfluous spinlocks.
#   L:- Replaced spin_lock_irqsave() with spin_lock_irq() in the obvious places.
#   L:- Make sure that prepare callback be non-atomic.
#   L:- Removed SNDRV_PCM_INFO_NONATOMIC_OPS flag (which is default now).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ens1370.c
#   2004/07/14 10:33:18+02:00 perex@suse.cz +22 -33
#   ALSA CVS update
#   D:2004/07/14 16:33:17
#   C:ALS4000 driver,ATIIXP driver,ATIIXP-modem driver,AZT3328 driver
#   C:BT87x driver,CMIPCI driver,CS4281 driver,ENS1370/1+ driver
#   C:ES1968 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,VIA82xx driver,ALI5451 driver
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,Trident driver,YMFPCI driver,PPC PMAC driver
#   C:USB generic driver
#   F:pci/als4000.c:1.35->1.36 
#   F:pci/atiixp.c:1.16->1.17 
#   F:pci/atiixp_modem.c:1.1->1.2 
#   F:pci/azt3328.c:1.15->1.16 
#   F:pci/bt87x.c:1.7->1.8 
#   F:pci/cmipci.c:1.70->1.71 
#   F:pci/cs4281.c:1.59->1.60 
#   F:pci/ens1370.c:1.64->1.65 
#   F:pci/es1968.c:1.72->1.73 
#   F:pci/fm801.c:1.49->1.50 
#   F:pci/intel8x0.c:1.145->1.146 
#   F:pci/maestro3.c:1.56->1.57 
#   F:pci/rme32.c:1.39->1.40 
#   F:pci/rme96.c:1.39->1.40 
#   F:pci/sonicvibes.c:1.37->1.38 
#   F:pci/via82xx.c:1.109->1.110 
#   F:pci/ali5451/ali5451.c:1.52->1.53 
#   F:pci/cs46xx/cs46xx_lib.c:1.79->1.80 
#   F:pci/emu10k1/emupcm.c:1.29->1.30 
#   F:pci/ice1712/ice1712.c:1.57->1.58 
#   F:pci/ice1712/ice1724.c:1.39->1.40 
#   F:pci/korg1212/korg1212.c:1.42->1.43 
#   F:pci/mixart/mixart.c:1.12->1.13 
#   F:pci/nm256/nm256.c:1.46->1.47 
#   F:pci/rme9652/hdsp.c:1.62->1.63 
#   F:pci/rme9652/rme9652.c:1.48->1.49 
#   F:pci/trident/trident_main.c:1.61->1.62 
#   F:pci/ymfpci/ymfpci_main.c:1.54->1.55 
#   F:ppc/pmac.c:1.32->1.33 
#   F:usb/usbaudio.c:1.105->1.106 
#   L:Clean up spinlocks.
#   L:
#   L:- Removed superfluous spinlocks.
#   L:- Replaced spin_lock_irqsave() with spin_lock_irq() in the obvious places.
#   L:- Make sure that prepare callback be non-atomic.
#   L:- Removed SNDRV_PCM_INFO_NONATOMIC_OPS flag (which is default now).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/emu10k1/emupcm.c
#   2004/07/14 10:33:18+02:00 perex@suse.cz +17 -23
#   ALSA CVS update
#   D:2004/07/14 16:33:17
#   C:ALS4000 driver,ATIIXP driver,ATIIXP-modem driver,AZT3328 driver
#   C:BT87x driver,CMIPCI driver,CS4281 driver,ENS1370/1+ driver
#   C:ES1968 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,VIA82xx driver,ALI5451 driver
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,Trident driver,YMFPCI driver,PPC PMAC driver
#   C:USB generic driver
#   F:pci/als4000.c:1.35->1.36 
#   F:pci/atiixp.c:1.16->1.17 
#   F:pci/atiixp_modem.c:1.1->1.2 
#   F:pci/azt3328.c:1.15->1.16 
#   F:pci/bt87x.c:1.7->1.8 
#   F:pci/cmipci.c:1.70->1.71 
#   F:pci/cs4281.c:1.59->1.60 
#   F:pci/ens1370.c:1.64->1.65 
#   F:pci/es1968.c:1.72->1.73 
#   F:pci/fm801.c:1.49->1.50 
#   F:pci/intel8x0.c:1.145->1.146 
#   F:pci/maestro3.c:1.56->1.57 
#   F:pci/rme32.c:1.39->1.40 
#   F:pci/rme96.c:1.39->1.40 
#   F:pci/sonicvibes.c:1.37->1.38 
#   F:pci/via82xx.c:1.109->1.110 
#   F:pci/ali5451/ali5451.c:1.52->1.53 
#   F:pci/cs46xx/cs46xx_lib.c:1.79->1.80 
#   F:pci/emu10k1/emupcm.c:1.29->1.30 
#   F:pci/ice1712/ice1712.c:1.57->1.58 
#   F:pci/ice1712/ice1724.c:1.39->1.40 
#   F:pci/korg1212/korg1212.c:1.42->1.43 
#   F:pci/mixart/mixart.c:1.12->1.13 
#   F:pci/nm256/nm256.c:1.46->1.47 
#   F:pci/rme9652/hdsp.c:1.62->1.63 
#   F:pci/rme9652/rme9652.c:1.48->1.49 
#   F:pci/trident/trident_main.c:1.61->1.62 
#   F:pci/ymfpci/ymfpci_main.c:1.54->1.55 
#   F:ppc/pmac.c:1.32->1.33 
#   F:usb/usbaudio.c:1.105->1.106 
#   L:Clean up spinlocks.
#   L:
#   L:- Removed superfluous spinlocks.
#   L:- Replaced spin_lock_irqsave() with spin_lock_irq() in the obvious places.
#   L:- Make sure that prepare callback be non-atomic.
#   L:- Removed SNDRV_PCM_INFO_NONATOMIC_OPS flag (which is default now).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/cs46xx/cs46xx_lib.c
#   2004/07/14 10:33:18+02:00 perex@suse.cz +14 -22
#   ALSA CVS update
#   D:2004/07/14 16:33:17
#   C:ALS4000 driver,ATIIXP driver,ATIIXP-modem driver,AZT3328 driver
#   C:BT87x driver,CMIPCI driver,CS4281 driver,ENS1370/1+ driver
#   C:ES1968 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,VIA82xx driver,ALI5451 driver
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,Trident driver,YMFPCI driver,PPC PMAC driver
#   C:USB generic driver
#   F:pci/als4000.c:1.35->1.36 
#   F:pci/atiixp.c:1.16->1.17 
#   F:pci/atiixp_modem.c:1.1->1.2 
#   F:pci/azt3328.c:1.15->1.16 
#   F:pci/bt87x.c:1.7->1.8 
#   F:pci/cmipci.c:1.70->1.71 
#   F:pci/cs4281.c:1.59->1.60 
#   F:pci/ens1370.c:1.64->1.65 
#   F:pci/es1968.c:1.72->1.73 
#   F:pci/fm801.c:1.49->1.50 
#   F:pci/intel8x0.c:1.145->1.146 
#   F:pci/maestro3.c:1.56->1.57 
#   F:pci/rme32.c:1.39->1.40 
#   F:pci/rme96.c:1.39->1.40 
#   F:pci/sonicvibes.c:1.37->1.38 
#   F:pci/via82xx.c:1.109->1.110 
#   F:pci/ali5451/ali5451.c:1.52->1.53 
#   F:pci/cs46xx/cs46xx_lib.c:1.79->1.80 
#   F:pci/emu10k1/emupcm.c:1.29->1.30 
#   F:pci/ice1712/ice1712.c:1.57->1.58 
#   F:pci/ice1712/ice1724.c:1.39->1.40 
#   F:pci/korg1212/korg1212.c:1.42->1.43 
#   F:pci/mixart/mixart.c:1.12->1.13 
#   F:pci/nm256/nm256.c:1.46->1.47 
#   F:pci/rme9652/hdsp.c:1.62->1.63 
#   F:pci/rme9652/rme9652.c:1.48->1.49 
#   F:pci/trident/trident_main.c:1.61->1.62 
#   F:pci/ymfpci/ymfpci_main.c:1.54->1.55 
#   F:ppc/pmac.c:1.32->1.33 
#   F:usb/usbaudio.c:1.105->1.106 
#   L:Clean up spinlocks.
#   L:
#   L:- Removed superfluous spinlocks.
#   L:- Replaced spin_lock_irqsave() with spin_lock_irq() in the obvious places.
#   L:- Make sure that prepare callback be non-atomic.
#   L:- Removed SNDRV_PCM_INFO_NONATOMIC_OPS flag (which is default now).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/cs4281.c
#   2004/07/14 10:33:17+02:00 perex@suse.cz +17 -22
#   ALSA CVS update
#   D:2004/07/14 16:33:17
#   C:ALS4000 driver,ATIIXP driver,ATIIXP-modem driver,AZT3328 driver
#   C:BT87x driver,CMIPCI driver,CS4281 driver,ENS1370/1+ driver
#   C:ES1968 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,VIA82xx driver,ALI5451 driver
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,Trident driver,YMFPCI driver,PPC PMAC driver
#   C:USB generic driver
#   F:pci/als4000.c:1.35->1.36 
#   F:pci/atiixp.c:1.16->1.17 
#   F:pci/atiixp_modem.c:1.1->1.2 
#   F:pci/azt3328.c:1.15->1.16 
#   F:pci/bt87x.c:1.7->1.8 
#   F:pci/cmipci.c:1.70->1.71 
#   F:pci/cs4281.c:1.59->1.60 
#   F:pci/ens1370.c:1.64->1.65 
#   F:pci/es1968.c:1.72->1.73 
#   F:pci/fm801.c:1.49->1.50 
#   F:pci/intel8x0.c:1.145->1.146 
#   F:pci/maestro3.c:1.56->1.57 
#   F:pci/rme32.c:1.39->1.40 
#   F:pci/rme96.c:1.39->1.40 
#   F:pci/sonicvibes.c:1.37->1.38 
#   F:pci/via82xx.c:1.109->1.110 
#   F:pci/ali5451/ali5451.c:1.52->1.53 
#   F:pci/cs46xx/cs46xx_lib.c:1.79->1.80 
#   F:pci/emu10k1/emupcm.c:1.29->1.30 
#   F:pci/ice1712/ice1712.c:1.57->1.58 
#   F:pci/ice1712/ice1724.c:1.39->1.40 
#   F:pci/korg1212/korg1212.c:1.42->1.43 
#   F:pci/mixart/mixart.c:1.12->1.13 
#   F:pci/nm256/nm256.c:1.46->1.47 
#   F:pci/rme9652/hdsp.c:1.62->1.63 
#   F:pci/rme9652/rme9652.c:1.48->1.49 
#   F:pci/trident/trident_main.c:1.61->1.62 
#   F:pci/ymfpci/ymfpci_main.c:1.54->1.55 
#   F:ppc/pmac.c:1.32->1.33 
#   F:usb/usbaudio.c:1.105->1.106 
#   L:Clean up spinlocks.
#   L:
#   L:- Removed superfluous spinlocks.
#   L:- Replaced spin_lock_irqsave() with spin_lock_irq() in the obvious places.
#   L:- Make sure that prepare callback be non-atomic.
#   L:- Removed SNDRV_PCM_INFO_NONATOMIC_OPS flag (which is default now).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/cmipci.c
#   2004/07/14 10:33:17+02:00 perex@suse.cz +44 -65
#   ALSA CVS update
#   D:2004/07/14 16:33:17
#   C:ALS4000 driver,ATIIXP driver,ATIIXP-modem driver,AZT3328 driver
#   C:BT87x driver,CMIPCI driver,CS4281 driver,ENS1370/1+ driver
#   C:ES1968 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,VIA82xx driver,ALI5451 driver
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,Trident driver,YMFPCI driver,PPC PMAC driver
#   C:USB generic driver
#   F:pci/als4000.c:1.35->1.36 
#   F:pci/atiixp.c:1.16->1.17 
#   F:pci/atiixp_modem.c:1.1->1.2 
#   F:pci/azt3328.c:1.15->1.16 
#   F:pci/bt87x.c:1.7->1.8 
#   F:pci/cmipci.c:1.70->1.71 
#   F:pci/cs4281.c:1.59->1.60 
#   F:pci/ens1370.c:1.64->1.65 
#   F:pci/es1968.c:1.72->1.73 
#   F:pci/fm801.c:1.49->1.50 
#   F:pci/intel8x0.c:1.145->1.146 
#   F:pci/maestro3.c:1.56->1.57 
#   F:pci/rme32.c:1.39->1.40 
#   F:pci/rme96.c:1.39->1.40 
#   F:pci/sonicvibes.c:1.37->1.38 
#   F:pci/via82xx.c:1.109->1.110 
#   F:pci/ali5451/ali5451.c:1.52->1.53 
#   F:pci/cs46xx/cs46xx_lib.c:1.79->1.80 
#   F:pci/emu10k1/emupcm.c:1.29->1.30 
#   F:pci/ice1712/ice1712.c:1.57->1.58 
#   F:pci/ice1712/ice1724.c:1.39->1.40 
#   F:pci/korg1212/korg1212.c:1.42->1.43 
#   F:pci/mixart/mixart.c:1.12->1.13 
#   F:pci/nm256/nm256.c:1.46->1.47 
#   F:pci/rme9652/hdsp.c:1.62->1.63 
#   F:pci/rme9652/rme9652.c:1.48->1.49 
#   F:pci/trident/trident_main.c:1.61->1.62 
#   F:pci/ymfpci/ymfpci_main.c:1.54->1.55 
#   F:ppc/pmac.c:1.32->1.33 
#   F:usb/usbaudio.c:1.105->1.106 
#   L:Clean up spinlocks.
#   L:
#   L:- Removed superfluous spinlocks.
#   L:- Replaced spin_lock_irqsave() with spin_lock_irq() in the obvious places.
#   L:- Make sure that prepare callback be non-atomic.
#   L:- Removed SNDRV_PCM_INFO_NONATOMIC_OPS flag (which is default now).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/bt87x.c
#   2004/07/14 10:33:17+02:00 perex@suse.cz +12 -20
#   ALSA CVS update
#   D:2004/07/14 16:33:17
#   C:ALS4000 driver,ATIIXP driver,ATIIXP-modem driver,AZT3328 driver
#   C:BT87x driver,CMIPCI driver,CS4281 driver,ENS1370/1+ driver
#   C:ES1968 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,VIA82xx driver,ALI5451 driver
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,Trident driver,YMFPCI driver,PPC PMAC driver
#   C:USB generic driver
#   F:pci/als4000.c:1.35->1.36 
#   F:pci/atiixp.c:1.16->1.17 
#   F:pci/atiixp_modem.c:1.1->1.2 
#   F:pci/azt3328.c:1.15->1.16 
#   F:pci/bt87x.c:1.7->1.8 
#   F:pci/cmipci.c:1.70->1.71 
#   F:pci/cs4281.c:1.59->1.60 
#   F:pci/ens1370.c:1.64->1.65 
#   F:pci/es1968.c:1.72->1.73 
#   F:pci/fm801.c:1.49->1.50 
#   F:pci/intel8x0.c:1.145->1.146 
#   F:pci/maestro3.c:1.56->1.57 
#   F:pci/rme32.c:1.39->1.40 
#   F:pci/rme96.c:1.39->1.40 
#   F:pci/sonicvibes.c:1.37->1.38 
#   F:pci/via82xx.c:1.109->1.110 
#   F:pci/ali5451/ali5451.c:1.52->1.53 
#   F:pci/cs46xx/cs46xx_lib.c:1.79->1.80 
#   F:pci/emu10k1/emupcm.c:1.29->1.30 
#   F:pci/ice1712/ice1712.c:1.57->1.58 
#   F:pci/ice1712/ice1724.c:1.39->1.40 
#   F:pci/korg1212/korg1212.c:1.42->1.43 
#   F:pci/mixart/mixart.c:1.12->1.13 
#   F:pci/nm256/nm256.c:1.46->1.47 
#   F:pci/rme9652/hdsp.c:1.62->1.63 
#   F:pci/rme9652/rme9652.c:1.48->1.49 
#   F:pci/trident/trident_main.c:1.61->1.62 
#   F:pci/ymfpci/ymfpci_main.c:1.54->1.55 
#   F:ppc/pmac.c:1.32->1.33 
#   F:usb/usbaudio.c:1.105->1.106 
#   L:Clean up spinlocks.
#   L:
#   L:- Removed superfluous spinlocks.
#   L:- Replaced spin_lock_irqsave() with spin_lock_irq() in the obvious places.
#   L:- Make sure that prepare callback be non-atomic.
#   L:- Removed SNDRV_PCM_INFO_NONATOMIC_OPS flag (which is default now).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/azt3328.c
#   2004/07/14 10:33:17+02:00 perex@suse.cz +14 -23
#   ALSA CVS update
#   D:2004/07/14 16:33:17
#   C:ALS4000 driver,ATIIXP driver,ATIIXP-modem driver,AZT3328 driver
#   C:BT87x driver,CMIPCI driver,CS4281 driver,ENS1370/1+ driver
#   C:ES1968 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,VIA82xx driver,ALI5451 driver
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,Trident driver,YMFPCI driver,PPC PMAC driver
#   C:USB generic driver
#   F:pci/als4000.c:1.35->1.36 
#   F:pci/atiixp.c:1.16->1.17 
#   F:pci/atiixp_modem.c:1.1->1.2 
#   F:pci/azt3328.c:1.15->1.16 
#   F:pci/bt87x.c:1.7->1.8 
#   F:pci/cmipci.c:1.70->1.71 
#   F:pci/cs4281.c:1.59->1.60 
#   F:pci/ens1370.c:1.64->1.65 
#   F:pci/es1968.c:1.72->1.73 
#   F:pci/fm801.c:1.49->1.50 
#   F:pci/intel8x0.c:1.145->1.146 
#   F:pci/maestro3.c:1.56->1.57 
#   F:pci/rme32.c:1.39->1.40 
#   F:pci/rme96.c:1.39->1.40 
#   F:pci/sonicvibes.c:1.37->1.38 
#   F:pci/via82xx.c:1.109->1.110 
#   F:pci/ali5451/ali5451.c:1.52->1.53 
#   F:pci/cs46xx/cs46xx_lib.c:1.79->1.80 
#   F:pci/emu10k1/emupcm.c:1.29->1.30 
#   F:pci/ice1712/ice1712.c:1.57->1.58 
#   F:pci/ice1712/ice1724.c:1.39->1.40 
#   F:pci/korg1212/korg1212.c:1.42->1.43 
#   F:pci/mixart/mixart.c:1.12->1.13 
#   F:pci/nm256/nm256.c:1.46->1.47 
#   F:pci/rme9652/hdsp.c:1.62->1.63 
#   F:pci/rme9652/rme9652.c:1.48->1.49 
#   F:pci/trident/trident_main.c:1.61->1.62 
#   F:pci/ymfpci/ymfpci_main.c:1.54->1.55 
#   F:ppc/pmac.c:1.32->1.33 
#   F:usb/usbaudio.c:1.105->1.106 
#   L:Clean up spinlocks.
#   L:
#   L:- Removed superfluous spinlocks.
#   L:- Replaced spin_lock_irqsave() with spin_lock_irq() in the obvious places.
#   L:- Make sure that prepare callback be non-atomic.
#   L:- Removed SNDRV_PCM_INFO_NONATOMIC_OPS flag (which is default now).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/atiixp_modem.c
#   2004/07/14 10:33:17+02:00 perex@suse.cz +6 -8
#   ALSA CVS update
#   D:2004/07/14 16:33:17
#   C:ALS4000 driver,ATIIXP driver,ATIIXP-modem driver,AZT3328 driver
#   C:BT87x driver,CMIPCI driver,CS4281 driver,ENS1370/1+ driver
#   C:ES1968 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,VIA82xx driver,ALI5451 driver
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,Trident driver,YMFPCI driver,PPC PMAC driver
#   C:USB generic driver
#   F:pci/als4000.c:1.35->1.36 
#   F:pci/atiixp.c:1.16->1.17 
#   F:pci/atiixp_modem.c:1.1->1.2 
#   F:pci/azt3328.c:1.15->1.16 
#   F:pci/bt87x.c:1.7->1.8 
#   F:pci/cmipci.c:1.70->1.71 
#   F:pci/cs4281.c:1.59->1.60 
#   F:pci/ens1370.c:1.64->1.65 
#   F:pci/es1968.c:1.72->1.73 
#   F:pci/fm801.c:1.49->1.50 
#   F:pci/intel8x0.c:1.145->1.146 
#   F:pci/maestro3.c:1.56->1.57 
#   F:pci/rme32.c:1.39->1.40 
#   F:pci/rme96.c:1.39->1.40 
#   F:pci/sonicvibes.c:1.37->1.38 
#   F:pci/via82xx.c:1.109->1.110 
#   F:pci/ali5451/ali5451.c:1.52->1.53 
#   F:pci/cs46xx/cs46xx_lib.c:1.79->1.80 
#   F:pci/emu10k1/emupcm.c:1.29->1.30 
#   F:pci/ice1712/ice1712.c:1.57->1.58 
#   F:pci/ice1712/ice1724.c:1.39->1.40 
#   F:pci/korg1212/korg1212.c:1.42->1.43 
#   F:pci/mixart/mixart.c:1.12->1.13 
#   F:pci/nm256/nm256.c:1.46->1.47 
#   F:pci/rme9652/hdsp.c:1.62->1.63 
#   F:pci/rme9652/rme9652.c:1.48->1.49 
#   F:pci/trident/trident_main.c:1.61->1.62 
#   F:pci/ymfpci/ymfpci_main.c:1.54->1.55 
#   F:ppc/pmac.c:1.32->1.33 
#   F:usb/usbaudio.c:1.105->1.106 
#   L:Clean up spinlocks.
#   L:
#   L:- Removed superfluous spinlocks.
#   L:- Replaced spin_lock_irqsave() with spin_lock_irq() in the obvious places.
#   L:- Make sure that prepare callback be non-atomic.
#   L:- Removed SNDRV_PCM_INFO_NONATOMIC_OPS flag (which is default now).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/atiixp.c
#   2004/07/14 10:33:17+02:00 perex@suse.cz +10 -12
#   ALSA CVS update
#   D:2004/07/14 16:33:17
#   C:ALS4000 driver,ATIIXP driver,ATIIXP-modem driver,AZT3328 driver
#   C:BT87x driver,CMIPCI driver,CS4281 driver,ENS1370/1+ driver
#   C:ES1968 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,VIA82xx driver,ALI5451 driver
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,Trident driver,YMFPCI driver,PPC PMAC driver
#   C:USB generic driver
#   F:pci/als4000.c:1.35->1.36 
#   F:pci/atiixp.c:1.16->1.17 
#   F:pci/atiixp_modem.c:1.1->1.2 
#   F:pci/azt3328.c:1.15->1.16 
#   F:pci/bt87x.c:1.7->1.8 
#   F:pci/cmipci.c:1.70->1.71 
#   F:pci/cs4281.c:1.59->1.60 
#   F:pci/ens1370.c:1.64->1.65 
#   F:pci/es1968.c:1.72->1.73 
#   F:pci/fm801.c:1.49->1.50 
#   F:pci/intel8x0.c:1.145->1.146 
#   F:pci/maestro3.c:1.56->1.57 
#   F:pci/rme32.c:1.39->1.40 
#   F:pci/rme96.c:1.39->1.40 
#   F:pci/sonicvibes.c:1.37->1.38 
#   F:pci/via82xx.c:1.109->1.110 
#   F:pci/ali5451/ali5451.c:1.52->1.53 
#   F:pci/cs46xx/cs46xx_lib.c:1.79->1.80 
#   F:pci/emu10k1/emupcm.c:1.29->1.30 
#   F:pci/ice1712/ice1712.c:1.57->1.58 
#   F:pci/ice1712/ice1724.c:1.39->1.40 
#   F:pci/korg1212/korg1212.c:1.42->1.43 
#   F:pci/mixart/mixart.c:1.12->1.13 
#   F:pci/nm256/nm256.c:1.46->1.47 
#   F:pci/rme9652/hdsp.c:1.62->1.63 
#   F:pci/rme9652/rme9652.c:1.48->1.49 
#   F:pci/trident/trident_main.c:1.61->1.62 
#   F:pci/ymfpci/ymfpci_main.c:1.54->1.55 
#   F:ppc/pmac.c:1.32->1.33 
#   F:usb/usbaudio.c:1.105->1.106 
#   L:Clean up spinlocks.
#   L:
#   L:- Removed superfluous spinlocks.
#   L:- Replaced spin_lock_irqsave() with spin_lock_irq() in the obvious places.
#   L:- Make sure that prepare callback be non-atomic.
#   L:- Removed SNDRV_PCM_INFO_NONATOMIC_OPS flag (which is default now).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/als4000.c
#   2004/07/14 10:33:17+02:00 perex@suse.cz +14 -20
#   ALSA CVS update
#   D:2004/07/14 16:33:17
#   C:ALS4000 driver,ATIIXP driver,ATIIXP-modem driver,AZT3328 driver
#   C:BT87x driver,CMIPCI driver,CS4281 driver,ENS1370/1+ driver
#   C:ES1968 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,VIA82xx driver,ALI5451 driver
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,Trident driver,YMFPCI driver,PPC PMAC driver
#   C:USB generic driver
#   F:pci/als4000.c:1.35->1.36 
#   F:pci/atiixp.c:1.16->1.17 
#   F:pci/atiixp_modem.c:1.1->1.2 
#   F:pci/azt3328.c:1.15->1.16 
#   F:pci/bt87x.c:1.7->1.8 
#   F:pci/cmipci.c:1.70->1.71 
#   F:pci/cs4281.c:1.59->1.60 
#   F:pci/ens1370.c:1.64->1.65 
#   F:pci/es1968.c:1.72->1.73 
#   F:pci/fm801.c:1.49->1.50 
#   F:pci/intel8x0.c:1.145->1.146 
#   F:pci/maestro3.c:1.56->1.57 
#   F:pci/rme32.c:1.39->1.40 
#   F:pci/rme96.c:1.39->1.40 
#   F:pci/sonicvibes.c:1.37->1.38 
#   F:pci/via82xx.c:1.109->1.110 
#   F:pci/ali5451/ali5451.c:1.52->1.53 
#   F:pci/cs46xx/cs46xx_lib.c:1.79->1.80 
#   F:pci/emu10k1/emupcm.c:1.29->1.30 
#   F:pci/ice1712/ice1712.c:1.57->1.58 
#   F:pci/ice1712/ice1724.c:1.39->1.40 
#   F:pci/korg1212/korg1212.c:1.42->1.43 
#   F:pci/mixart/mixart.c:1.12->1.13 
#   F:pci/nm256/nm256.c:1.46->1.47 
#   F:pci/rme9652/hdsp.c:1.62->1.63 
#   F:pci/rme9652/rme9652.c:1.48->1.49 
#   F:pci/trident/trident_main.c:1.61->1.62 
#   F:pci/ymfpci/ymfpci_main.c:1.54->1.55 
#   F:ppc/pmac.c:1.32->1.33 
#   F:usb/usbaudio.c:1.105->1.106 
#   L:Clean up spinlocks.
#   L:
#   L:- Removed superfluous spinlocks.
#   L:- Replaced spin_lock_irqsave() with spin_lock_irq() in the obvious places.
#   L:- Make sure that prepare callback be non-atomic.
#   L:- Removed SNDRV_PCM_INFO_NONATOMIC_OPS flag (which is default now).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ali5451/ali5451.c
#   2004/07/14 10:33:18+02:00 perex@suse.cz +3 -4
#   ALSA CVS update
#   D:2004/07/14 16:33:17
#   C:ALS4000 driver,ATIIXP driver,ATIIXP-modem driver,AZT3328 driver
#   C:BT87x driver,CMIPCI driver,CS4281 driver,ENS1370/1+ driver
#   C:ES1968 driver,FM801 driver,Intel8x0 driver,Maestro3 driver,RME32 driver
#   C:RME96 driver,SonicVibes driver,VIA82xx driver,ALI5451 driver
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:KORG1212 driver,MIXART driver,NM256 driver,RME HDSP driver
#   C:RME9652 driver,Trident driver,YMFPCI driver,PPC PMAC driver
#   C:USB generic driver
#   F:pci/als4000.c:1.35->1.36 
#   F:pci/atiixp.c:1.16->1.17 
#   F:pci/atiixp_modem.c:1.1->1.2 
#   F:pci/azt3328.c:1.15->1.16 
#   F:pci/bt87x.c:1.7->1.8 
#   F:pci/cmipci.c:1.70->1.71 
#   F:pci/cs4281.c:1.59->1.60 
#   F:pci/ens1370.c:1.64->1.65 
#   F:pci/es1968.c:1.72->1.73 
#   F:pci/fm801.c:1.49->1.50 
#   F:pci/intel8x0.c:1.145->1.146 
#   F:pci/maestro3.c:1.56->1.57 
#   F:pci/rme32.c:1.39->1.40 
#   F:pci/rme96.c:1.39->1.40 
#   F:pci/sonicvibes.c:1.37->1.38 
#   F:pci/via82xx.c:1.109->1.110 
#   F:pci/ali5451/ali5451.c:1.52->1.53 
#   F:pci/cs46xx/cs46xx_lib.c:1.79->1.80 
#   F:pci/emu10k1/emupcm.c:1.29->1.30 
#   F:pci/ice1712/ice1712.c:1.57->1.58 
#   F:pci/ice1712/ice1724.c:1.39->1.40 
#   F:pci/korg1212/korg1212.c:1.42->1.43 
#   F:pci/mixart/mixart.c:1.12->1.13 
#   F:pci/nm256/nm256.c:1.46->1.47 
#   F:pci/rme9652/hdsp.c:1.62->1.63 
#   F:pci/rme9652/rme9652.c:1.48->1.49 
#   F:pci/trident/trident_main.c:1.61->1.62 
#   F:pci/ymfpci/ymfpci_main.c:1.54->1.55 
#   F:ppc/pmac.c:1.32->1.33 
#   F:usb/usbaudio.c:1.105->1.106 
#   L:Clean up spinlocks.
#   L:
#   L:- Removed superfluous spinlocks.
#   L:- Replaced spin_lock_irqsave() with spin_lock_irq() in the obvious places.
#   L:- Make sure that prepare callback be non-atomic.
#   L:- Removed SNDRV_PCM_INFO_NONATOMIC_OPS flag (which is default now).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:38:54+02:00 perex@suse.cz 
#   ALSA CVS update
#   Documentation,PCM Midlevel
#   Changed the atomicity of PCM prepare callback.
#   
#   The PCM prepare callback is now non-atomic, so that the driver can
#   use the functions calling schedule (e.g. kmalloc with GFP_KERNEL).
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/pcm_native.c
#   2004/07/14 10:30:37+02:00 perex@suse.cz +34 -57
#   ALSA CVS update
#   D:2004/07/14 16:30:37
#   C:Documentation,PCM Midlevel
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.34->1.35 
#   F:core/pcm_lib.c:1.54->1.55 
#   F:core/pcm_native.c:1.99->1.100 
#   L:Changed the atomicity of PCM prepare callback.
#   L:
#   L:The PCM prepare callback is now non-atomic, so that the driver can
#   L:use the functions calling schedule (e.g. kmalloc with GFP_KERNEL).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/pcm_lib.c
#   2004/07/14 10:30:37+02:00 perex@suse.cz +6 -4
#   ALSA CVS update
#   D:2004/07/14 16:30:37
#   C:Documentation,PCM Midlevel
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.34->1.35 
#   F:core/pcm_lib.c:1.54->1.55 
#   F:core/pcm_native.c:1.99->1.100 
#   L:Changed the atomicity of PCM prepare callback.
#   L:
#   L:The PCM prepare callback is now non-atomic, so that the driver can
#   L:use the functions calling schedule (e.g. kmalloc with GFP_KERNEL).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
#   2004/07/14 10:30:37+02:00 perex@suse.cz +13 -7
#   ALSA CVS update
#   D:2004/07/14 16:30:37
#   C:Documentation,PCM Midlevel
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.34->1.35 
#   F:core/pcm_lib.c:1.54->1.55 
#   F:core/pcm_native.c:1.99->1.100 
#   L:Changed the atomicity of PCM prepare callback.
#   L:
#   L:The PCM prepare callback is now non-atomic, so that the driver can
#   L:use the functions calling schedule (e.g. kmalloc with GFP_KERNEL).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:38:13+02:00 perex@suse.cz 
#   ALSA CVS update
#   CS46xx driver
#   Fixed a compile warning in the debug code.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/cs46xx/cs46xx_lib.c
#   2004/07/13 11:19:24+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/13 17:19:24
#   C:CS46xx driver
#   F:pci/cs46xx/cs46xx_lib.c:1.78->1.79 
#   L:Fixed a compile warning in the debug code.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:37:33+02:00 perex@suse.cz 
#   ALSA CVS update
#   Intel8x0-modem driver
#   Added -MODEM suffix to the driver name string to distinguish from the
#   intel8x0 audio driver.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/intel8x0m.c
#   2004/07/12 11:20:01+02:00 perex@suse.cz +2 -2
#   ALSA CVS update
#   D:2004/07/12 17:20:01
#   C:Intel8x0-modem driver
#   F:pci/intel8x0m.c:1.9->1.10 
#   L:Added -MODEM suffix to the driver name string to distinguish from the
#   L:intel8x0 audio driver.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:36:54+02:00 perex@suse.cz 
#   ALSA CVS update
#   Control Midlevel
#   Fixed the unbalanced spinlock in the error path.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/control.c
#   2004/07/12 10:31:48+02:00 perex@suse.cz +3 -2
#   ALSA CVS update
#   D:2004/07/12 16:31:48
#   C:Control Midlevel
#   F:core/control.c:1.46->1.47 
#   L:Fixed the unbalanced spinlock in the error path.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:36:14+02:00 perex@suse.cz 
#   ALSA CVS update
#   Memalloc module
#   Mark the allocated DMA pages as reserved for certain architectures.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/memalloc.c
#   2004/07/12 10:31:05+02:00 perex@suse.cz +28 -12
#   ALSA CVS update
#   D:2004/07/12 16:31:05
#   C:Memalloc module
#   F:core/memalloc.c:1.34->1.35 
#   L:Mark the allocated DMA pages as reserved for certain architectures.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:35:35+02:00 perex@suse.cz 
#   ALSA CVS update
#   Documentation,PCI drivers,ATIIXP-modem driver
#   Added snd-atiixp driver for ATI IXP AC97 modem controllers.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/Makefile
#   2004/07/12 09:13:58+02:00 perex@suse.cz +2 -0
#   ALSA CVS update
#   D:2004/07/12 15:13:58
#   C:Documentation,PCI drivers,ATIIXP-modem driver
#   F:Documentation/ALSA-Configuration.txt:1.47->1.48 
#   F:pci/Kconfig:1.28->1.29 
#   F:pci/Makefile:1.16->1.17 
#   F:pci/atiixp_modem.c:INITIAL->1.1 
#   L:Added snd-atiixp driver for ATI IXP AC97 modem controllers.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/Kconfig
#   2004/07/12 09:13:58+02:00 perex@suse.cz +8 -0
#   ALSA CVS update
#   D:2004/07/12 15:13:58
#   C:Documentation,PCI drivers,ATIIXP-modem driver
#   F:Documentation/ALSA-Configuration.txt:1.47->1.48 
#   F:pci/Kconfig:1.28->1.29 
#   F:pci/Makefile:1.16->1.17 
#   F:pci/atiixp_modem.c:INITIAL->1.1 
#   L:Added snd-atiixp driver for ATI IXP AC97 modem controllers.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# Documentation/sound/alsa/ALSA-Configuration.txt
#   2004/07/12 09:13:58+02:00 perex@suse.cz +7 -0
#   ALSA CVS update
#   D:2004/07/12 15:13:58
#   C:Documentation,PCI drivers,ATIIXP-modem driver
#   F:Documentation/ALSA-Configuration.txt:1.47->1.48 
#   F:pci/Kconfig:1.28->1.29 
#   F:pci/Makefile:1.16->1.17 
#   F:pci/atiixp_modem.c:INITIAL->1.1 
#   L:Added snd-atiixp driver for ATI IXP AC97 modem controllers.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/atiixp_modem.c
#   2004/07/28 10:46:36+02:00 perex@suse.cz +1364 -0
#   ALSA CVS update
#   D:2004/07/12 15:13:58
#   C:Documentation,PCI drivers,ATIIXP-modem driver
#   F:Documentation/ALSA-Configuration.txt:1.47->1.48 
#   F:pci/Kconfig:1.28->1.29 
#   F:pci/Makefile:1.16->1.17 
#   F:pci/atiixp_modem.c:INITIAL->1.1 
#   L:Added snd-atiixp driver for ATI IXP AC97 modem controllers.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/atiixp_modem.c
#   2004/07/28 10:46:36+02:00 perex@suse.cz +0 -0
#   BitKeeper file /home/perex/bk/linux-sound/work/sound/pci/atiixp_modem.c
# 
# ChangeSet
#   2004/07/28 11:34:52+02:00 perex@suse.cz 
#   ALSA CVS update
#   ATIIXP driver
#   Fixed a typo in the check of buffer/period size configuration.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/atiixp.c
#   2004/07/12 09:13:06+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/12 15:13:06
#   C:ATIIXP driver
#   F:pci/atiixp.c:1.15->1.16 
#   L:Fixed a typo in the check of buffer/period size configuration.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:34:13+02:00 perex@suse.cz 
#   ALSA CVS update
#   RME HDSP driver
#   ALSA rme9652/hdsp: remove inlines
#   
#   The patch below removes all inlines from hdsp.c. As a side effect, it
#   showed that snd_hdsp_9652_disable_mixer() is completely unused, and it's
#   therefore also removed in the patch.
#   
#   Signed-off-by: Adrian Bunk <bunk@fs.tum.de>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/rme9652/hdsp.c
#   2004/07/12 09:12:20+02:00 perex@suse.cz +32 -38
#   ALSA CVS update
#   D:2004/07/12 15:12:20
#   C:RME HDSP driver
#   F:pci/rme9652/hdsp.c:1.61->1.62 
#   L:ALSA rme9652/hdsp: remove inlines
#   L:
#   L:The patch below removes all inlines from hdsp.c. As a side effect, it
#   L:showed that snd_hdsp_9652_disable_mixer() is completely unused, and it's
#   L:therefore also removed in the patch.
#   Signed-off-by: Adrian Bunk <bunk@fs.tum.de>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:33:33+02:00 perex@suse.cz 
#   ALSA CVS update
#   Documentation
#   fix typo
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
#   2004/07/12 03:27:41+02:00 perex@suse.cz +5 -5
#   ALSA CVS update
#   D:2004/07/12 09:27:41
#   C:Documentation
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.33->1.34 
#   L:fix typo
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/07/28 11:32:54+02:00 perex@suse.cz 
#   ALSA CVS update
#   ALSA<-OSS emulation
#   fix missing semaphore release in snd_mixer_oss_build_input()
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/core/oss/mixer_oss.c
#   2004/07/06 03:03:52+02:00 perex@suse.cz +3 -1
#   ALSA CVS update
#   D:2004/07/06 09:03:52
#   C:ALSA<-OSS emulation
#   F:core/oss/mixer_oss.c:1.32->1.33 
#   L:fix missing semaphore release in snd_mixer_oss_build_input()
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/07/28 11:32:11+02:00 perex@suse.cz 
#   ALSA CVS update
#   Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   au88x0 driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   NM256 driver,Trident driver,YMFPCI driver
#   replace ac97_t template with ac97_template_t
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/ymfpci/ymfpci_main.c
#   2004/07/05 10:07:24+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/05 16:06:34
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.32->1.33 
#   F:include/ac97_codec.h:1.47->1.48 
#   F:pci/atiixp.c:1.14->1.15 
#   F:pci/cs4281.c:1.58->1.59 
#   F:pci/ens1370.c:1.63->1.64 
#   F:pci/es1968.c:1.71->1.72 
#   F:pci/fm801.c:1.48->1.49 
#   F:pci/intel8x0.c:1.144->1.145 
#   F:pci/intel8x0m.c:1.8->1.9 
#   F:pci/maestro3.c:1.55->1.56 
#   F:pci/via82xx.c:1.108->1.109 
#   F:pci/ac97/ac97_codec.c:1.140->1.141 
#   F:pci/ali5451/ali5451.c:1.51->1.52 
#   F:pci/au88x0/au88x0_mixer.c:1.2->1.3 
#   F:pci/emu10k1/emumixer.c:1.24->1.25 
#   F:pci/ice1712/ice1712.c:1.56->1.57 
#   F:pci/ice1712/ice1724.c:1.38->1.39 
#   F:pci/nm256/nm256.c:1.45->1.46 
#   F:pci/trident/trident_main.c:1.60->1.61 
#   F:pci/ymfpci/ymfpci_main.c:1.53->1.54 
#   L:replace ac97_t template with ac97_template_t
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/via82xx.c
#   2004/07/05 10:07:22+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/05 16:06:34
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.32->1.33 
#   F:include/ac97_codec.h:1.47->1.48 
#   F:pci/atiixp.c:1.14->1.15 
#   F:pci/cs4281.c:1.58->1.59 
#   F:pci/ens1370.c:1.63->1.64 
#   F:pci/es1968.c:1.71->1.72 
#   F:pci/fm801.c:1.48->1.49 
#   F:pci/intel8x0.c:1.144->1.145 
#   F:pci/intel8x0m.c:1.8->1.9 
#   F:pci/maestro3.c:1.55->1.56 
#   F:pci/via82xx.c:1.108->1.109 
#   F:pci/ac97/ac97_codec.c:1.140->1.141 
#   F:pci/ali5451/ali5451.c:1.51->1.52 
#   F:pci/au88x0/au88x0_mixer.c:1.2->1.3 
#   F:pci/emu10k1/emumixer.c:1.24->1.25 
#   F:pci/ice1712/ice1712.c:1.56->1.57 
#   F:pci/ice1712/ice1724.c:1.38->1.39 
#   F:pci/nm256/nm256.c:1.45->1.46 
#   F:pci/trident/trident_main.c:1.60->1.61 
#   F:pci/ymfpci/ymfpci_main.c:1.53->1.54 
#   L:replace ac97_t template with ac97_template_t
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/trident/trident_main.c
#   2004/07/05 10:07:24+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/05 16:06:34
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.32->1.33 
#   F:include/ac97_codec.h:1.47->1.48 
#   F:pci/atiixp.c:1.14->1.15 
#   F:pci/cs4281.c:1.58->1.59 
#   F:pci/ens1370.c:1.63->1.64 
#   F:pci/es1968.c:1.71->1.72 
#   F:pci/fm801.c:1.48->1.49 
#   F:pci/intel8x0.c:1.144->1.145 
#   F:pci/intel8x0m.c:1.8->1.9 
#   F:pci/maestro3.c:1.55->1.56 
#   F:pci/via82xx.c:1.108->1.109 
#   F:pci/ac97/ac97_codec.c:1.140->1.141 
#   F:pci/ali5451/ali5451.c:1.51->1.52 
#   F:pci/au88x0/au88x0_mixer.c:1.2->1.3 
#   F:pci/emu10k1/emumixer.c:1.24->1.25 
#   F:pci/ice1712/ice1712.c:1.56->1.57 
#   F:pci/ice1712/ice1724.c:1.38->1.39 
#   F:pci/nm256/nm256.c:1.45->1.46 
#   F:pci/trident/trident_main.c:1.60->1.61 
#   F:pci/ymfpci/ymfpci_main.c:1.53->1.54 
#   L:replace ac97_t template with ac97_template_t
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/nm256/nm256.c
#   2004/07/05 10:07:24+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/05 16:06:34
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.32->1.33 
#   F:include/ac97_codec.h:1.47->1.48 
#   F:pci/atiixp.c:1.14->1.15 
#   F:pci/cs4281.c:1.58->1.59 
#   F:pci/ens1370.c:1.63->1.64 
#   F:pci/es1968.c:1.71->1.72 
#   F:pci/fm801.c:1.48->1.49 
#   F:pci/intel8x0.c:1.144->1.145 
#   F:pci/intel8x0m.c:1.8->1.9 
#   F:pci/maestro3.c:1.55->1.56 
#   F:pci/via82xx.c:1.108->1.109 
#   F:pci/ac97/ac97_codec.c:1.140->1.141 
#   F:pci/ali5451/ali5451.c:1.51->1.52 
#   F:pci/au88x0/au88x0_mixer.c:1.2->1.3 
#   F:pci/emu10k1/emumixer.c:1.24->1.25 
#   F:pci/ice1712/ice1712.c:1.56->1.57 
#   F:pci/ice1712/ice1724.c:1.38->1.39 
#   F:pci/nm256/nm256.c:1.45->1.46 
#   F:pci/trident/trident_main.c:1.60->1.61 
#   F:pci/ymfpci/ymfpci_main.c:1.53->1.54 
#   L:replace ac97_t template with ac97_template_t
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/maestro3.c
#   2004/07/05 10:07:22+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/05 16:06:34
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.32->1.33 
#   F:include/ac97_codec.h:1.47->1.48 
#   F:pci/atiixp.c:1.14->1.15 
#   F:pci/cs4281.c:1.58->1.59 
#   F:pci/ens1370.c:1.63->1.64 
#   F:pci/es1968.c:1.71->1.72 
#   F:pci/fm801.c:1.48->1.49 
#   F:pci/intel8x0.c:1.144->1.145 
#   F:pci/intel8x0m.c:1.8->1.9 
#   F:pci/maestro3.c:1.55->1.56 
#   F:pci/via82xx.c:1.108->1.109 
#   F:pci/ac97/ac97_codec.c:1.140->1.141 
#   F:pci/ali5451/ali5451.c:1.51->1.52 
#   F:pci/au88x0/au88x0_mixer.c:1.2->1.3 
#   F:pci/emu10k1/emumixer.c:1.24->1.25 
#   F:pci/ice1712/ice1712.c:1.56->1.57 
#   F:pci/ice1712/ice1724.c:1.38->1.39 
#   F:pci/nm256/nm256.c:1.45->1.46 
#   F:pci/trident/trident_main.c:1.60->1.61 
#   F:pci/ymfpci/ymfpci_main.c:1.53->1.54 
#   L:replace ac97_t template with ac97_template_t
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/intel8x0m.c
#   2004/07/05 10:07:22+02:00 perex@suse.cz +2 -1
#   ALSA CVS update
#   D:2004/07/05 16:06:34
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.32->1.33 
#   F:include/ac97_codec.h:1.47->1.48 
#   F:pci/atiixp.c:1.14->1.15 
#   F:pci/cs4281.c:1.58->1.59 
#   F:pci/ens1370.c:1.63->1.64 
#   F:pci/es1968.c:1.71->1.72 
#   F:pci/fm801.c:1.48->1.49 
#   F:pci/intel8x0.c:1.144->1.145 
#   F:pci/intel8x0m.c:1.8->1.9 
#   F:pci/maestro3.c:1.55->1.56 
#   F:pci/via82xx.c:1.108->1.109 
#   F:pci/ac97/ac97_codec.c:1.140->1.141 
#   F:pci/ali5451/ali5451.c:1.51->1.52 
#   F:pci/au88x0/au88x0_mixer.c:1.2->1.3 
#   F:pci/emu10k1/emumixer.c:1.24->1.25 
#   F:pci/ice1712/ice1712.c:1.56->1.57 
#   F:pci/ice1712/ice1724.c:1.38->1.39 
#   F:pci/nm256/nm256.c:1.45->1.46 
#   F:pci/trident/trident_main.c:1.60->1.61 
#   F:pci/ymfpci/ymfpci_main.c:1.53->1.54 
#   L:replace ac97_t template with ac97_template_t
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/intel8x0.c
#   2004/07/05 10:07:22+02:00 perex@suse.cz +18 -6
#   ALSA CVS update
#   D:2004/07/05 16:06:34
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.32->1.33 
#   F:include/ac97_codec.h:1.47->1.48 
#   F:pci/atiixp.c:1.14->1.15 
#   F:pci/cs4281.c:1.58->1.59 
#   F:pci/ens1370.c:1.63->1.64 
#   F:pci/es1968.c:1.71->1.72 
#   F:pci/fm801.c:1.48->1.49 
#   F:pci/intel8x0.c:1.144->1.145 
#   F:pci/intel8x0m.c:1.8->1.9 
#   F:pci/maestro3.c:1.55->1.56 
#   F:pci/via82xx.c:1.108->1.109 
#   F:pci/ac97/ac97_codec.c:1.140->1.141 
#   F:pci/ali5451/ali5451.c:1.51->1.52 
#   F:pci/au88x0/au88x0_mixer.c:1.2->1.3 
#   F:pci/emu10k1/emumixer.c:1.24->1.25 
#   F:pci/ice1712/ice1712.c:1.56->1.57 
#   F:pci/ice1712/ice1724.c:1.38->1.39 
#   F:pci/nm256/nm256.c:1.45->1.46 
#   F:pci/trident/trident_main.c:1.60->1.61 
#   F:pci/ymfpci/ymfpci_main.c:1.53->1.54 
#   L:replace ac97_t template with ac97_template_t
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/ice1712/ice1724.c
#   2004/07/05 10:07:24+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/05 16:06:34
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.32->1.33 
#   F:include/ac97_codec.h:1.47->1.48 
#   F:pci/atiixp.c:1.14->1.15 
#   F:pci/cs4281.c:1.58->1.59 
#   F:pci/ens1370.c:1.63->1.64 
#   F:pci/es1968.c:1.71->1.72 
#   F:pci/fm801.c:1.48->1.49 
#   F:pci/intel8x0.c:1.144->1.145 
#   F:pci/intel8x0m.c:1.8->1.9 
#   F:pci/maestro3.c:1.55->1.56 
#   F:pci/via82xx.c:1.108->1.109 
#   F:pci/ac97/ac97_codec.c:1.140->1.141 
#   F:pci/ali5451/ali5451.c:1.51->1.52 
#   F:pci/au88x0/au88x0_mixer.c:1.2->1.3 
#   F:pci/emu10k1/emumixer.c:1.24->1.25 
#   F:pci/ice1712/ice1712.c:1.56->1.57 
#   F:pci/ice1712/ice1724.c:1.38->1.39 
#   F:pci/nm256/nm256.c:1.45->1.46 
#   F:pci/trident/trident_main.c:1.60->1.61 
#   F:pci/ymfpci/ymfpci_main.c:1.53->1.54 
#   L:replace ac97_t template with ac97_template_t
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/ice1712/ice1712.c
#   2004/07/05 10:07:24+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/05 16:06:34
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.32->1.33 
#   F:include/ac97_codec.h:1.47->1.48 
#   F:pci/atiixp.c:1.14->1.15 
#   F:pci/cs4281.c:1.58->1.59 
#   F:pci/ens1370.c:1.63->1.64 
#   F:pci/es1968.c:1.71->1.72 
#   F:pci/fm801.c:1.48->1.49 
#   F:pci/intel8x0.c:1.144->1.145 
#   F:pci/intel8x0m.c:1.8->1.9 
#   F:pci/maestro3.c:1.55->1.56 
#   F:pci/via82xx.c:1.108->1.109 
#   F:pci/ac97/ac97_codec.c:1.140->1.141 
#   F:pci/ali5451/ali5451.c:1.51->1.52 
#   F:pci/au88x0/au88x0_mixer.c:1.2->1.3 
#   F:pci/emu10k1/emumixer.c:1.24->1.25 
#   F:pci/ice1712/ice1712.c:1.56->1.57 
#   F:pci/ice1712/ice1724.c:1.38->1.39 
#   F:pci/nm256/nm256.c:1.45->1.46 
#   F:pci/trident/trident_main.c:1.60->1.61 
#   F:pci/ymfpci/ymfpci_main.c:1.53->1.54 
#   L:replace ac97_t template with ac97_template_t
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/fm801.c
#   2004/07/05 10:07:22+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/05 16:06:34
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.32->1.33 
#   F:include/ac97_codec.h:1.47->1.48 
#   F:pci/atiixp.c:1.14->1.15 
#   F:pci/cs4281.c:1.58->1.59 
#   F:pci/ens1370.c:1.63->1.64 
#   F:pci/es1968.c:1.71->1.72 
#   F:pci/fm801.c:1.48->1.49 
#   F:pci/intel8x0.c:1.144->1.145 
#   F:pci/intel8x0m.c:1.8->1.9 
#   F:pci/maestro3.c:1.55->1.56 
#   F:pci/via82xx.c:1.108->1.109 
#   F:pci/ac97/ac97_codec.c:1.140->1.141 
#   F:pci/ali5451/ali5451.c:1.51->1.52 
#   F:pci/au88x0/au88x0_mixer.c:1.2->1.3 
#   F:pci/emu10k1/emumixer.c:1.24->1.25 
#   F:pci/ice1712/ice1712.c:1.56->1.57 
#   F:pci/ice1712/ice1724.c:1.38->1.39 
#   F:pci/nm256/nm256.c:1.45->1.46 
#   F:pci/trident/trident_main.c:1.60->1.61 
#   F:pci/ymfpci/ymfpci_main.c:1.53->1.54 
#   L:replace ac97_t template with ac97_template_t
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/es1968.c
#   2004/07/05 10:07:22+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/05 16:06:34
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.32->1.33 
#   F:include/ac97_codec.h:1.47->1.48 
#   F:pci/atiixp.c:1.14->1.15 
#   F:pci/cs4281.c:1.58->1.59 
#   F:pci/ens1370.c:1.63->1.64 
#   F:pci/es1968.c:1.71->1.72 
#   F:pci/fm801.c:1.48->1.49 
#   F:pci/intel8x0.c:1.144->1.145 
#   F:pci/intel8x0m.c:1.8->1.9 
#   F:pci/maestro3.c:1.55->1.56 
#   F:pci/via82xx.c:1.108->1.109 
#   F:pci/ac97/ac97_codec.c:1.140->1.141 
#   F:pci/ali5451/ali5451.c:1.51->1.52 
#   F:pci/au88x0/au88x0_mixer.c:1.2->1.3 
#   F:pci/emu10k1/emumixer.c:1.24->1.25 
#   F:pci/ice1712/ice1712.c:1.56->1.57 
#   F:pci/ice1712/ice1724.c:1.38->1.39 
#   F:pci/nm256/nm256.c:1.45->1.46 
#   F:pci/trident/trident_main.c:1.60->1.61 
#   F:pci/ymfpci/ymfpci_main.c:1.53->1.54 
#   L:replace ac97_t template with ac97_template_t
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/ens1370.c
#   2004/07/05 10:07:22+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/05 16:06:34
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.32->1.33 
#   F:include/ac97_codec.h:1.47->1.48 
#   F:pci/atiixp.c:1.14->1.15 
#   F:pci/cs4281.c:1.58->1.59 
#   F:pci/ens1370.c:1.63->1.64 
#   F:pci/es1968.c:1.71->1.72 
#   F:pci/fm801.c:1.48->1.49 
#   F:pci/intel8x0.c:1.144->1.145 
#   F:pci/intel8x0m.c:1.8->1.9 
#   F:pci/maestro3.c:1.55->1.56 
#   F:pci/via82xx.c:1.108->1.109 
#   F:pci/ac97/ac97_codec.c:1.140->1.141 
#   F:pci/ali5451/ali5451.c:1.51->1.52 
#   F:pci/au88x0/au88x0_mixer.c:1.2->1.3 
#   F:pci/emu10k1/emumixer.c:1.24->1.25 
#   F:pci/ice1712/ice1712.c:1.56->1.57 
#   F:pci/ice1712/ice1724.c:1.38->1.39 
#   F:pci/nm256/nm256.c:1.45->1.46 
#   F:pci/trident/trident_main.c:1.60->1.61 
#   F:pci/ymfpci/ymfpci_main.c:1.53->1.54 
#   L:replace ac97_t template with ac97_template_t
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/emu10k1/emumixer.c
#   2004/07/05 10:07:23+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/05 16:06:34
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.32->1.33 
#   F:include/ac97_codec.h:1.47->1.48 
#   F:pci/atiixp.c:1.14->1.15 
#   F:pci/cs4281.c:1.58->1.59 
#   F:pci/ens1370.c:1.63->1.64 
#   F:pci/es1968.c:1.71->1.72 
#   F:pci/fm801.c:1.48->1.49 
#   F:pci/intel8x0.c:1.144->1.145 
#   F:pci/intel8x0m.c:1.8->1.9 
#   F:pci/maestro3.c:1.55->1.56 
#   F:pci/via82xx.c:1.108->1.109 
#   F:pci/ac97/ac97_codec.c:1.140->1.141 
#   F:pci/ali5451/ali5451.c:1.51->1.52 
#   F:pci/au88x0/au88x0_mixer.c:1.2->1.3 
#   F:pci/emu10k1/emumixer.c:1.24->1.25 
#   F:pci/ice1712/ice1712.c:1.56->1.57 
#   F:pci/ice1712/ice1724.c:1.38->1.39 
#   F:pci/nm256/nm256.c:1.45->1.46 
#   F:pci/trident/trident_main.c:1.60->1.61 
#   F:pci/ymfpci/ymfpci_main.c:1.53->1.54 
#   L:replace ac97_t template with ac97_template_t
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/cs4281.c
#   2004/07/05 10:07:22+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/05 16:06:34
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.32->1.33 
#   F:include/ac97_codec.h:1.47->1.48 
#   F:pci/atiixp.c:1.14->1.15 
#   F:pci/cs4281.c:1.58->1.59 
#   F:pci/ens1370.c:1.63->1.64 
#   F:pci/es1968.c:1.71->1.72 
#   F:pci/fm801.c:1.48->1.49 
#   F:pci/intel8x0.c:1.144->1.145 
#   F:pci/intel8x0m.c:1.8->1.9 
#   F:pci/maestro3.c:1.55->1.56 
#   F:pci/via82xx.c:1.108->1.109 
#   F:pci/ac97/ac97_codec.c:1.140->1.141 
#   F:pci/ali5451/ali5451.c:1.51->1.52 
#   F:pci/au88x0/au88x0_mixer.c:1.2->1.3 
#   F:pci/emu10k1/emumixer.c:1.24->1.25 
#   F:pci/ice1712/ice1712.c:1.56->1.57 
#   F:pci/ice1712/ice1724.c:1.38->1.39 
#   F:pci/nm256/nm256.c:1.45->1.46 
#   F:pci/trident/trident_main.c:1.60->1.61 
#   F:pci/ymfpci/ymfpci_main.c:1.53->1.54 
#   L:replace ac97_t template with ac97_template_t
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/au88x0/au88x0_mixer.c
#   2004/07/05 10:07:23+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/05 16:06:34
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.32->1.33 
#   F:include/ac97_codec.h:1.47->1.48 
#   F:pci/atiixp.c:1.14->1.15 
#   F:pci/cs4281.c:1.58->1.59 
#   F:pci/ens1370.c:1.63->1.64 
#   F:pci/es1968.c:1.71->1.72 
#   F:pci/fm801.c:1.48->1.49 
#   F:pci/intel8x0.c:1.144->1.145 
#   F:pci/intel8x0m.c:1.8->1.9 
#   F:pci/maestro3.c:1.55->1.56 
#   F:pci/via82xx.c:1.108->1.109 
#   F:pci/ac97/ac97_codec.c:1.140->1.141 
#   F:pci/ali5451/ali5451.c:1.51->1.52 
#   F:pci/au88x0/au88x0_mixer.c:1.2->1.3 
#   F:pci/emu10k1/emumixer.c:1.24->1.25 
#   F:pci/ice1712/ice1712.c:1.56->1.57 
#   F:pci/ice1712/ice1724.c:1.38->1.39 
#   F:pci/nm256/nm256.c:1.45->1.46 
#   F:pci/trident/trident_main.c:1.60->1.61 
#   F:pci/ymfpci/ymfpci_main.c:1.53->1.54 
#   L:replace ac97_t template with ac97_template_t
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/atiixp.c
#   2004/07/05 10:07:22+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/05 16:06:34
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.32->1.33 
#   F:include/ac97_codec.h:1.47->1.48 
#   F:pci/atiixp.c:1.14->1.15 
#   F:pci/cs4281.c:1.58->1.59 
#   F:pci/ens1370.c:1.63->1.64 
#   F:pci/es1968.c:1.71->1.72 
#   F:pci/fm801.c:1.48->1.49 
#   F:pci/intel8x0.c:1.144->1.145 
#   F:pci/intel8x0m.c:1.8->1.9 
#   F:pci/maestro3.c:1.55->1.56 
#   F:pci/via82xx.c:1.108->1.109 
#   F:pci/ac97/ac97_codec.c:1.140->1.141 
#   F:pci/ali5451/ali5451.c:1.51->1.52 
#   F:pci/au88x0/au88x0_mixer.c:1.2->1.3 
#   F:pci/emu10k1/emumixer.c:1.24->1.25 
#   F:pci/ice1712/ice1712.c:1.56->1.57 
#   F:pci/ice1712/ice1724.c:1.38->1.39 
#   F:pci/nm256/nm256.c:1.45->1.46 
#   F:pci/trident/trident_main.c:1.60->1.61 
#   F:pci/ymfpci/ymfpci_main.c:1.53->1.54 
#   L:replace ac97_t template with ac97_template_t
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/ali5451/ali5451.c
#   2004/07/05 10:07:22+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/05 16:06:34
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.32->1.33 
#   F:include/ac97_codec.h:1.47->1.48 
#   F:pci/atiixp.c:1.14->1.15 
#   F:pci/cs4281.c:1.58->1.59 
#   F:pci/ens1370.c:1.63->1.64 
#   F:pci/es1968.c:1.71->1.72 
#   F:pci/fm801.c:1.48->1.49 
#   F:pci/intel8x0.c:1.144->1.145 
#   F:pci/intel8x0m.c:1.8->1.9 
#   F:pci/maestro3.c:1.55->1.56 
#   F:pci/via82xx.c:1.108->1.109 
#   F:pci/ac97/ac97_codec.c:1.140->1.141 
#   F:pci/ali5451/ali5451.c:1.51->1.52 
#   F:pci/au88x0/au88x0_mixer.c:1.2->1.3 
#   F:pci/emu10k1/emumixer.c:1.24->1.25 
#   F:pci/ice1712/ice1712.c:1.56->1.57 
#   F:pci/ice1712/ice1724.c:1.38->1.39 
#   F:pci/nm256/nm256.c:1.45->1.46 
#   F:pci/trident/trident_main.c:1.60->1.61 
#   F:pci/ymfpci/ymfpci_main.c:1.53->1.54 
#   L:replace ac97_t template with ac97_template_t
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/ac97/ac97_codec.c
#   2004/07/05 10:07:02+02:00 perex@suse.cz +16 -11
#   ALSA CVS update
#   D:2004/07/05 16:06:34
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.32->1.33 
#   F:include/ac97_codec.h:1.47->1.48 
#   F:pci/atiixp.c:1.14->1.15 
#   F:pci/cs4281.c:1.58->1.59 
#   F:pci/ens1370.c:1.63->1.64 
#   F:pci/es1968.c:1.71->1.72 
#   F:pci/fm801.c:1.48->1.49 
#   F:pci/intel8x0.c:1.144->1.145 
#   F:pci/intel8x0m.c:1.8->1.9 
#   F:pci/maestro3.c:1.55->1.56 
#   F:pci/via82xx.c:1.108->1.109 
#   F:pci/ac97/ac97_codec.c:1.140->1.141 
#   F:pci/ali5451/ali5451.c:1.51->1.52 
#   F:pci/au88x0/au88x0_mixer.c:1.2->1.3 
#   F:pci/emu10k1/emumixer.c:1.24->1.25 
#   F:pci/ice1712/ice1712.c:1.56->1.57 
#   F:pci/ice1712/ice1724.c:1.38->1.39 
#   F:pci/nm256/nm256.c:1.45->1.46 
#   F:pci/trident/trident_main.c:1.60->1.61 
#   F:pci/ymfpci/ymfpci_main.c:1.53->1.54 
#   L:replace ac97_t template with ac97_template_t
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# include/sound/ac97_codec.h
#   2004/07/05 10:06:12+02:00 perex@suse.cz +13 -1
#   ALSA CVS update
#   D:2004/07/05 16:06:34
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.32->1.33 
#   F:include/ac97_codec.h:1.47->1.48 
#   F:pci/atiixp.c:1.14->1.15 
#   F:pci/cs4281.c:1.58->1.59 
#   F:pci/ens1370.c:1.63->1.64 
#   F:pci/es1968.c:1.71->1.72 
#   F:pci/fm801.c:1.48->1.49 
#   F:pci/intel8x0.c:1.144->1.145 
#   F:pci/intel8x0m.c:1.8->1.9 
#   F:pci/maestro3.c:1.55->1.56 
#   F:pci/via82xx.c:1.108->1.109 
#   F:pci/ac97/ac97_codec.c:1.140->1.141 
#   F:pci/ali5451/ali5451.c:1.51->1.52 
#   F:pci/au88x0/au88x0_mixer.c:1.2->1.3 
#   F:pci/emu10k1/emumixer.c:1.24->1.25 
#   F:pci/ice1712/ice1712.c:1.56->1.57 
#   F:pci/ice1712/ice1724.c:1.38->1.39 
#   F:pci/nm256/nm256.c:1.45->1.46 
#   F:pci/trident/trident_main.c:1.60->1.61 
#   F:pci/ymfpci/ymfpci_main.c:1.53->1.54 
#   L:replace ac97_t template with ac97_template_t
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
#   2004/07/05 10:06:34+02:00 perex@suse.cz +3 -3
#   ALSA CVS update
#   D:2004/07/05 16:06:34
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver
#   C:NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.32->1.33 
#   F:include/ac97_codec.h:1.47->1.48 
#   F:pci/atiixp.c:1.14->1.15 
#   F:pci/cs4281.c:1.58->1.59 
#   F:pci/ens1370.c:1.63->1.64 
#   F:pci/es1968.c:1.71->1.72 
#   F:pci/fm801.c:1.48->1.49 
#   F:pci/intel8x0.c:1.144->1.145 
#   F:pci/intel8x0m.c:1.8->1.9 
#   F:pci/maestro3.c:1.55->1.56 
#   F:pci/via82xx.c:1.108->1.109 
#   F:pci/ac97/ac97_codec.c:1.140->1.141 
#   F:pci/ali5451/ali5451.c:1.51->1.52 
#   F:pci/au88x0/au88x0_mixer.c:1.2->1.3 
#   F:pci/emu10k1/emumixer.c:1.24->1.25 
#   F:pci/ice1712/ice1712.c:1.56->1.57 
#   F:pci/ice1712/ice1724.c:1.38->1.39 
#   F:pci/nm256/nm256.c:1.45->1.46 
#   F:pci/trident/trident_main.c:1.60->1.61 
#   F:pci/ymfpci/ymfpci_main.c:1.53->1.54 
#   L:replace ac97_t template with ac97_template_t
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/07/28 11:31:26+02:00 perex@suse.cz 
#   ALSA CVS update
#   CS46xx driver
#   change codec index computation in snd_cs46xx_read/write;
#   replace ac97_t template with ac97_template_t
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/cs46xx/cs46xx_lib.c
#   2004/07/05 10:05:49+02:00 perex@suse.cz +30 -34
#   ALSA CVS update
#   D:2004/07/05 16:05:49
#   C:CS46xx driver
#   F:pci/cs46xx/cs46xx_lib.c:1.77->1.78 
#   L:change codec index computation in snd_cs46xx_read/write;
#   L:replace ac97_t template with ac97_template_t
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/07/28 11:30:46+02:00 perex@suse.cz 
#   ALSA CVS update
#   Memalloc module
#   - Don't mark pages from dma_alloc_coherent as reserved.
#     The pages from __get_free_pages() are still marked as reserved, but this could
#     be also unnecessary.
#   - Fixed a typo in comment.
#   - Fixed the pre-allocated buffer size for rme9652 & hdsp.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/memalloc.c
#   2004/07/05 08:12:12+02:00 perex@suse.cz +28 -24
#   ALSA CVS update
#   D:2004/07/05 14:12:12
#   C:Memalloc module
#   F:core/memalloc.c:1.33->1.34 
#   L:- Don't mark pages from dma_alloc_coherent as reserved.
#   L:  The pages from __get_free_pages() are still marked as reserved, but this could
#   L:  be also unnecessary.
#   L:- Fixed a typo in comment.
#   L:- Fixed the pre-allocated buffer size for rme9652 & hdsp.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:30:06+02:00 perex@suse.cz 
#   ALSA CVS update
#   Documentation
#   Fixed missing </section>.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
#   2004/07/05 05:46:45+02:00 perex@suse.cz +1 -0
#   ALSA CVS update
#   D:2004/07/05 11:46:45
#   C:Documentation
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.31->1.32 
#   L:Fixed missing </section>.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:29:26+02:00 perex@suse.cz 
#   ALSA CVS update
#   ALSA Core
#   Fixed compile warnings withoug CONFIG_PM.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/core.h
#   2004/07/05 05:43:26+02:00 perex@suse.cz +3 -3
#   ALSA CVS update
#   D:2004/07/05 11:43:26
#   C:ALSA Core
#   F:include/core.h:1.54->1.55 
#   L:Fixed compile warnings withoug CONFIG_PM.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:28:47+02:00 perex@suse.cz 
#   ALSA CVS update
#   Documentation
#   Removed obsolete sndmagic.h.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# Documentation/sound/alsa/DocBook/alsa-driver-api.tmpl
#   2004/07/05 05:42:54+02:00 perex@suse.cz +0 -1
#   ALSA CVS update
#   D:2004/07/05 11:42:54
#   C:Documentation
#   F:Documentation/DocBook/alsa-driver-api.tmpl:1.5->1.6 
#   L:Removed obsolete sndmagic.h.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/28 11:28:03+02:00 perex@suse.cz 
#   ALSA CVS update
#   Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver
#   ICE1724 driver,NM256 driver,Trident driver,YMFPCI driver
#   move AC'97 bus callbacks into seperate ops record;
#   remove ac97_bus_t template requirement from snd_ac97_bus()
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/ymfpci/ymfpci_main.c
#   2004/07/05 03:09:14+02:00 perex@suse.cz +6 -7
#   ALSA CVS update
#   D:2004/07/05 09:09:02
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver
#   C:ICE1724 driver,NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.30->1.31 
#   F:include/ac97_codec.h:1.46->1.47 
#   F:pci/atiixp.c:1.13->1.14 
#   F:pci/cs4281.c:1.57->1.58 
#   F:pci/ens1370.c:1.62->1.63 
#   F:pci/es1968.c:1.70->1.71 
#   F:pci/fm801.c:1.47->1.48 
#   F:pci/intel8x0.c:1.143->1.144 
#   F:pci/intel8x0m.c:1.7->1.8 
#   F:pci/maestro3.c:1.54->1.55 
#   F:pci/via82xx.c:1.107->1.108 
#   F:pci/ac97/ac97_codec.c:1.139->1.140 
#   F:pci/ali5451/ali5451.c:1.50->1.51 
#   F:pci/au88x0/au88x0_mixer.c:1.1->1.2 
#   F:pci/cs46xx/cs46xx_lib.c:1.76->1.77 
#   F:pci/emu10k1/emumixer.c:1.23->1.24 
#   F:pci/ice1712/ice1712.c:1.55->1.56 
#   F:pci/ice1712/ice1724.c:1.37->1.38 
#   F:pci/nm256/nm256.c:1.44->1.45 
#   F:pci/trident/trident_main.c:1.59->1.60 
#   F:pci/ymfpci/ymfpci_main.c:1.52->1.53 
#   L:move AC'97 bus callbacks into seperate ops record;
#   L:remove ac97_bus_t template requirement from snd_ac97_bus()
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/via82xx.c
#   2004/07/05 03:09:11+02:00 perex@suse.cz +8 -9
#   ALSA CVS update
#   D:2004/07/05 09:09:02
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver
#   C:ICE1724 driver,NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.30->1.31 
#   F:include/ac97_codec.h:1.46->1.47 
#   F:pci/atiixp.c:1.13->1.14 
#   F:pci/cs4281.c:1.57->1.58 
#   F:pci/ens1370.c:1.62->1.63 
#   F:pci/es1968.c:1.70->1.71 
#   F:pci/fm801.c:1.47->1.48 
#   F:pci/intel8x0.c:1.143->1.144 
#   F:pci/intel8x0m.c:1.7->1.8 
#   F:pci/maestro3.c:1.54->1.55 
#   F:pci/via82xx.c:1.107->1.108 
#   F:pci/ac97/ac97_codec.c:1.139->1.140 
#   F:pci/ali5451/ali5451.c:1.50->1.51 
#   F:pci/au88x0/au88x0_mixer.c:1.1->1.2 
#   F:pci/cs46xx/cs46xx_lib.c:1.76->1.77 
#   F:pci/emu10k1/emumixer.c:1.23->1.24 
#   F:pci/ice1712/ice1712.c:1.55->1.56 
#   F:pci/ice1712/ice1724.c:1.37->1.38 
#   F:pci/nm256/nm256.c:1.44->1.45 
#   F:pci/trident/trident_main.c:1.59->1.60 
#   F:pci/ymfpci/ymfpci_main.c:1.52->1.53 
#   L:move AC'97 bus callbacks into seperate ops record;
#   L:remove ac97_bus_t template requirement from snd_ac97_bus()
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/trident/trident_main.c
#   2004/07/05 03:09:14+02:00 perex@suse.cz +5 -5
#   ALSA CVS update
#   D:2004/07/05 09:09:02
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver
#   C:ICE1724 driver,NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.30->1.31 
#   F:include/ac97_codec.h:1.46->1.47 
#   F:pci/atiixp.c:1.13->1.14 
#   F:pci/cs4281.c:1.57->1.58 
#   F:pci/ens1370.c:1.62->1.63 
#   F:pci/es1968.c:1.70->1.71 
#   F:pci/fm801.c:1.47->1.48 
#   F:pci/intel8x0.c:1.143->1.144 
#   F:pci/intel8x0m.c:1.7->1.8 
#   F:pci/maestro3.c:1.54->1.55 
#   F:pci/via82xx.c:1.107->1.108 
#   F:pci/ac97/ac97_codec.c:1.139->1.140 
#   F:pci/ali5451/ali5451.c:1.50->1.51 
#   F:pci/au88x0/au88x0_mixer.c:1.1->1.2 
#   F:pci/cs46xx/cs46xx_lib.c:1.76->1.77 
#   F:pci/emu10k1/emumixer.c:1.23->1.24 
#   F:pci/ice1712/ice1712.c:1.55->1.56 
#   F:pci/ice1712/ice1724.c:1.37->1.38 
#   F:pci/nm256/nm256.c:1.44->1.45 
#   F:pci/trident/trident_main.c:1.59->1.60 
#   F:pci/ymfpci/ymfpci_main.c:1.52->1.53 
#   L:move AC'97 bus callbacks into seperate ops record;
#   L:remove ac97_bus_t template requirement from snd_ac97_bus()
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/nm256/nm256.c
#   2004/07/05 03:09:14+02:00 perex@suse.cz +7 -6
#   ALSA CVS update
#   D:2004/07/05 09:09:02
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver
#   C:ICE1724 driver,NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.30->1.31 
#   F:include/ac97_codec.h:1.46->1.47 
#   F:pci/atiixp.c:1.13->1.14 
#   F:pci/cs4281.c:1.57->1.58 
#   F:pci/ens1370.c:1.62->1.63 
#   F:pci/es1968.c:1.70->1.71 
#   F:pci/fm801.c:1.47->1.48 
#   F:pci/intel8x0.c:1.143->1.144 
#   F:pci/intel8x0m.c:1.7->1.8 
#   F:pci/maestro3.c:1.54->1.55 
#   F:pci/via82xx.c:1.107->1.108 
#   F:pci/ac97/ac97_codec.c:1.139->1.140 
#   F:pci/ali5451/ali5451.c:1.50->1.51 
#   F:pci/au88x0/au88x0_mixer.c:1.1->1.2 
#   F:pci/cs46xx/cs46xx_lib.c:1.76->1.77 
#   F:pci/emu10k1/emumixer.c:1.23->1.24 
#   F:pci/ice1712/ice1712.c:1.55->1.56 
#   F:pci/ice1712/ice1724.c:1.37->1.38 
#   F:pci/nm256/nm256.c:1.44->1.45 
#   F:pci/trident/trident_main.c:1.59->1.60 
#   F:pci/ymfpci/ymfpci_main.c:1.52->1.53 
#   L:move AC'97 bus callbacks into seperate ops record;
#   L:remove ac97_bus_t template requirement from snd_ac97_bus()
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/maestro3.c
#   2004/07/05 03:09:11+02:00 perex@suse.cz +6 -5
#   ALSA CVS update
#   D:2004/07/05 09:09:02
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver
#   C:ICE1724 driver,NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.30->1.31 
#   F:include/ac97_codec.h:1.46->1.47 
#   F:pci/atiixp.c:1.13->1.14 
#   F:pci/cs4281.c:1.57->1.58 
#   F:pci/ens1370.c:1.62->1.63 
#   F:pci/es1968.c:1.70->1.71 
#   F:pci/fm801.c:1.47->1.48 
#   F:pci/intel8x0.c:1.143->1.144 
#   F:pci/intel8x0m.c:1.7->1.8 
#   F:pci/maestro3.c:1.54->1.55 
#   F:pci/via82xx.c:1.107->1.108 
#   F:pci/ac97/ac97_codec.c:1.139->1.140 
#   F:pci/ali5451/ali5451.c:1.50->1.51 
#   F:pci/au88x0/au88x0_mixer.c:1.1->1.2 
#   F:pci/cs46xx/cs46xx_lib.c:1.76->1.77 
#   F:pci/emu10k1/emumixer.c:1.23->1.24 
#   F:pci/ice1712/ice1712.c:1.55->1.56 
#   F:pci/ice1712/ice1724.c:1.37->1.38 
#   F:pci/nm256/nm256.c:1.44->1.45 
#   F:pci/trident/trident_main.c:1.59->1.60 
#   F:pci/ymfpci/ymfpci_main.c:1.52->1.53 
#   L:move AC'97 bus callbacks into seperate ops record;
#   L:remove ac97_bus_t template requirement from snd_ac97_bus()
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/intel8x0m.c
#   2004/07/05 03:09:11+02:00 perex@suse.cz +11 -12
#   ALSA CVS update
#   D:2004/07/05 09:09:02
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver
#   C:ICE1724 driver,NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.30->1.31 
#   F:include/ac97_codec.h:1.46->1.47 
#   F:pci/atiixp.c:1.13->1.14 
#   F:pci/cs4281.c:1.57->1.58 
#   F:pci/ens1370.c:1.62->1.63 
#   F:pci/es1968.c:1.70->1.71 
#   F:pci/fm801.c:1.47->1.48 
#   F:pci/intel8x0.c:1.143->1.144 
#   F:pci/intel8x0m.c:1.7->1.8 
#   F:pci/maestro3.c:1.54->1.55 
#   F:pci/via82xx.c:1.107->1.108 
#   F:pci/ac97/ac97_codec.c:1.139->1.140 
#   F:pci/ali5451/ali5451.c:1.50->1.51 
#   F:pci/au88x0/au88x0_mixer.c:1.1->1.2 
#   F:pci/cs46xx/cs46xx_lib.c:1.76->1.77 
#   F:pci/emu10k1/emumixer.c:1.23->1.24 
#   F:pci/ice1712/ice1712.c:1.55->1.56 
#   F:pci/ice1712/ice1724.c:1.37->1.38 
#   F:pci/nm256/nm256.c:1.44->1.45 
#   F:pci/trident/trident_main.c:1.59->1.60 
#   F:pci/ymfpci/ymfpci_main.c:1.52->1.53 
#   L:move AC'97 bus callbacks into seperate ops record;
#   L:remove ac97_bus_t template requirement from snd_ac97_bus()
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/intel8x0.c
#   2004/07/05 03:09:11+02:00 perex@suse.cz +20 -16
#   ALSA CVS update
#   D:2004/07/05 09:09:02
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver
#   C:ICE1724 driver,NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.30->1.31 
#   F:include/ac97_codec.h:1.46->1.47 
#   F:pci/atiixp.c:1.13->1.14 
#   F:pci/cs4281.c:1.57->1.58 
#   F:pci/ens1370.c:1.62->1.63 
#   F:pci/es1968.c:1.70->1.71 
#   F:pci/fm801.c:1.47->1.48 
#   F:pci/intel8x0.c:1.143->1.144 
#   F:pci/intel8x0m.c:1.7->1.8 
#   F:pci/maestro3.c:1.54->1.55 
#   F:pci/via82xx.c:1.107->1.108 
#   F:pci/ac97/ac97_codec.c:1.139->1.140 
#   F:pci/ali5451/ali5451.c:1.50->1.51 
#   F:pci/au88x0/au88x0_mixer.c:1.1->1.2 
#   F:pci/cs46xx/cs46xx_lib.c:1.76->1.77 
#   F:pci/emu10k1/emumixer.c:1.23->1.24 
#   F:pci/ice1712/ice1712.c:1.55->1.56 
#   F:pci/ice1712/ice1724.c:1.37->1.38 
#   F:pci/nm256/nm256.c:1.44->1.45 
#   F:pci/trident/trident_main.c:1.59->1.60 
#   F:pci/ymfpci/ymfpci_main.c:1.52->1.53 
#   L:move AC'97 bus callbacks into seperate ops record;
#   L:remove ac97_bus_t template requirement from snd_ac97_bus()
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/ice1712/ice1724.c
#   2004/07/05 03:09:13+02:00 perex@suse.cz +7 -5
#   ALSA CVS update
#   D:2004/07/05 09:09:02
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver
#   C:ICE1724 driver,NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.30->1.31 
#   F:include/ac97_codec.h:1.46->1.47 
#   F:pci/atiixp.c:1.13->1.14 
#   F:pci/cs4281.c:1.57->1.58 
#   F:pci/ens1370.c:1.62->1.63 
#   F:pci/es1968.c:1.70->1.71 
#   F:pci/fm801.c:1.47->1.48 
#   F:pci/intel8x0.c:1.143->1.144 
#   F:pci/intel8x0m.c:1.7->1.8 
#   F:pci/maestro3.c:1.54->1.55 
#   F:pci/via82xx.c:1.107->1.108 
#   F:pci/ac97/ac97_codec.c:1.139->1.140 
#   F:pci/ali5451/ali5451.c:1.50->1.51 
#   F:pci/au88x0/au88x0_mixer.c:1.1->1.2 
#   F:pci/cs46xx/cs46xx_lib.c:1.76->1.77 
#   F:pci/emu10k1/emumixer.c:1.23->1.24 
#   F:pci/ice1712/ice1712.c:1.55->1.56 
#   F:pci/ice1712/ice1724.c:1.37->1.38 
#   F:pci/nm256/nm256.c:1.44->1.45 
#   F:pci/trident/trident_main.c:1.59->1.60 
#   F:pci/ymfpci/ymfpci_main.c:1.52->1.53 
#   L:move AC'97 bus callbacks into seperate ops record;
#   L:remove ac97_bus_t template requirement from snd_ac97_bus()
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/ice1712/ice1712.c
#   2004/07/05 03:09:13+02:00 perex@suse.cz +12 -10
#   ALSA CVS update
#   D:2004/07/05 09:09:02
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver
#   C:ICE1724 driver,NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.30->1.31 
#   F:include/ac97_codec.h:1.46->1.47 
#   F:pci/atiixp.c:1.13->1.14 
#   F:pci/cs4281.c:1.57->1.58 
#   F:pci/ens1370.c:1.62->1.63 
#   F:pci/es1968.c:1.70->1.71 
#   F:pci/fm801.c:1.47->1.48 
#   F:pci/intel8x0.c:1.143->1.144 
#   F:pci/intel8x0m.c:1.7->1.8 
#   F:pci/maestro3.c:1.54->1.55 
#   F:pci/via82xx.c:1.107->1.108 
#   F:pci/ac97/ac97_codec.c:1.139->1.140 
#   F:pci/ali5451/ali5451.c:1.50->1.51 
#   F:pci/au88x0/au88x0_mixer.c:1.1->1.2 
#   F:pci/cs46xx/cs46xx_lib.c:1.76->1.77 
#   F:pci/emu10k1/emumixer.c:1.23->1.24 
#   F:pci/ice1712/ice1712.c:1.55->1.56 
#   F:pci/ice1712/ice1724.c:1.37->1.38 
#   F:pci/nm256/nm256.c:1.44->1.45 
#   F:pci/trident/trident_main.c:1.59->1.60 
#   F:pci/ymfpci/ymfpci_main.c:1.52->1.53 
#   L:move AC'97 bus callbacks into seperate ops record;
#   L:remove ac97_bus_t template requirement from snd_ac97_bus()
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/fm801.c
#   2004/07/05 03:09:11+02:00 perex@suse.cz +6 -7
#   ALSA CVS update
#   D:2004/07/05 09:09:02
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver
#   C:ICE1724 driver,NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.30->1.31 
#   F:include/ac97_codec.h:1.46->1.47 
#   F:pci/atiixp.c:1.13->1.14 
#   F:pci/cs4281.c:1.57->1.58 
#   F:pci/ens1370.c:1.62->1.63 
#   F:pci/es1968.c:1.70->1.71 
#   F:pci/fm801.c:1.47->1.48 
#   F:pci/intel8x0.c:1.143->1.144 
#   F:pci/intel8x0m.c:1.7->1.8 
#   F:pci/maestro3.c:1.54->1.55 
#   F:pci/via82xx.c:1.107->1.108 
#   F:pci/ac97/ac97_codec.c:1.139->1.140 
#   F:pci/ali5451/ali5451.c:1.50->1.51 
#   F:pci/au88x0/au88x0_mixer.c:1.1->1.2 
#   F:pci/cs46xx/cs46xx_lib.c:1.76->1.77 
#   F:pci/emu10k1/emumixer.c:1.23->1.24 
#   F:pci/ice1712/ice1712.c:1.55->1.56 
#   F:pci/ice1712/ice1724.c:1.37->1.38 
#   F:pci/nm256/nm256.c:1.44->1.45 
#   F:pci/trident/trident_main.c:1.59->1.60 
#   F:pci/ymfpci/ymfpci_main.c:1.52->1.53 
#   L:move AC'97 bus callbacks into seperate ops record;
#   L:remove ac97_bus_t template requirement from snd_ac97_bus()
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/es1968.c
#   2004/07/05 03:09:11+02:00 perex@suse.cz +6 -5
#   ALSA CVS update
#   D:2004/07/05 09:09:02
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver
#   C:ICE1724 driver,NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.30->1.31 
#   F:include/ac97_codec.h:1.46->1.47 
#   F:pci/atiixp.c:1.13->1.14 
#   F:pci/cs4281.c:1.57->1.58 
#   F:pci/ens1370.c:1.62->1.63 
#   F:pci/es1968.c:1.70->1.71 
#   F:pci/fm801.c:1.47->1.48 
#   F:pci/intel8x0.c:1.143->1.144 
#   F:pci/intel8x0m.c:1.7->1.8 
#   F:pci/maestro3.c:1.54->1.55 
#   F:pci/via82xx.c:1.107->1.108 
#   F:pci/ac97/ac97_codec.c:1.139->1.140 
#   F:pci/ali5451/ali5451.c:1.50->1.51 
#   F:pci/au88x0/au88x0_mixer.c:1.1->1.2 
#   F:pci/cs46xx/cs46xx_lib.c:1.76->1.77 
#   F:pci/emu10k1/emumixer.c:1.23->1.24 
#   F:pci/ice1712/ice1712.c:1.55->1.56 
#   F:pci/ice1712/ice1724.c:1.37->1.38 
#   F:pci/nm256/nm256.c:1.44->1.45 
#   F:pci/trident/trident_main.c:1.59->1.60 
#   F:pci/ymfpci/ymfpci_main.c:1.52->1.53 
#   L:move AC'97 bus callbacks into seperate ops record;
#   L:remove ac97_bus_t template requirement from snd_ac97_bus()
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/ens1370.c
#   2004/07/05 03:09:11+02:00 perex@suse.cz +6 -5
#   ALSA CVS update
#   D:2004/07/05 09:09:02
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver
#   C:ICE1724 driver,NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.30->1.31 
#   F:include/ac97_codec.h:1.46->1.47 
#   F:pci/atiixp.c:1.13->1.14 
#   F:pci/cs4281.c:1.57->1.58 
#   F:pci/ens1370.c:1.62->1.63 
#   F:pci/es1968.c:1.70->1.71 
#   F:pci/fm801.c:1.47->1.48 
#   F:pci/intel8x0.c:1.143->1.144 
#   F:pci/intel8x0m.c:1.7->1.8 
#   F:pci/maestro3.c:1.54->1.55 
#   F:pci/via82xx.c:1.107->1.108 
#   F:pci/ac97/ac97_codec.c:1.139->1.140 
#   F:pci/ali5451/ali5451.c:1.50->1.51 
#   F:pci/au88x0/au88x0_mixer.c:1.1->1.2 
#   F:pci/cs46xx/cs46xx_lib.c:1.76->1.77 
#   F:pci/emu10k1/emumixer.c:1.23->1.24 
#   F:pci/ice1712/ice1712.c:1.55->1.56 
#   F:pci/ice1712/ice1724.c:1.37->1.38 
#   F:pci/nm256/nm256.c:1.44->1.45 
#   F:pci/trident/trident_main.c:1.59->1.60 
#   F:pci/ymfpci/ymfpci_main.c:1.52->1.53 
#   L:move AC'97 bus callbacks into seperate ops record;
#   L:remove ac97_bus_t template requirement from snd_ac97_bus()
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/emu10k1/emumixer.c
#   2004/07/05 03:09:13+02:00 perex@suse.cz +6 -5
#   ALSA CVS update
#   D:2004/07/05 09:09:02
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver
#   C:ICE1724 driver,NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.30->1.31 
#   F:include/ac97_codec.h:1.46->1.47 
#   F:pci/atiixp.c:1.13->1.14 
#   F:pci/cs4281.c:1.57->1.58 
#   F:pci/ens1370.c:1.62->1.63 
#   F:pci/es1968.c:1.70->1.71 
#   F:pci/fm801.c:1.47->1.48 
#   F:pci/intel8x0.c:1.143->1.144 
#   F:pci/intel8x0m.c:1.7->1.8 
#   F:pci/maestro3.c:1.54->1.55 
#   F:pci/via82xx.c:1.107->1.108 
#   F:pci/ac97/ac97_codec.c:1.139->1.140 
#   F:pci/ali5451/ali5451.c:1.50->1.51 
#   F:pci/au88x0/au88x0_mixer.c:1.1->1.2 
#   F:pci/cs46xx/cs46xx_lib.c:1.76->1.77 
#   F:pci/emu10k1/emumixer.c:1.23->1.24 
#   F:pci/ice1712/ice1712.c:1.55->1.56 
#   F:pci/ice1712/ice1724.c:1.37->1.38 
#   F:pci/nm256/nm256.c:1.44->1.45 
#   F:pci/trident/trident_main.c:1.59->1.60 
#   F:pci/ymfpci/ymfpci_main.c:1.52->1.53 
#   L:move AC'97 bus callbacks into seperate ops record;
#   L:remove ac97_bus_t template requirement from snd_ac97_bus()
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/cs46xx/cs46xx_lib.c
#   2004/07/05 03:09:13+02:00 perex@suse.cz +9 -10
#   ALSA CVS update
#   D:2004/07/05 09:09:02
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver
#   C:ICE1724 driver,NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.30->1.31 
#   F:include/ac97_codec.h:1.46->1.47 
#   F:pci/atiixp.c:1.13->1.14 
#   F:pci/cs4281.c:1.57->1.58 
#   F:pci/ens1370.c:1.62->1.63 
#   F:pci/es1968.c:1.70->1.71 
#   F:pci/fm801.c:1.47->1.48 
#   F:pci/intel8x0.c:1.143->1.144 
#   F:pci/intel8x0m.c:1.7->1.8 
#   F:pci/maestro3.c:1.54->1.55 
#   F:pci/via82xx.c:1.107->1.108 
#   F:pci/ac97/ac97_codec.c:1.139->1.140 
#   F:pci/ali5451/ali5451.c:1.50->1.51 
#   F:pci/au88x0/au88x0_mixer.c:1.1->1.2 
#   F:pci/cs46xx/cs46xx_lib.c:1.76->1.77 
#   F:pci/emu10k1/emumixer.c:1.23->1.24 
#   F:pci/ice1712/ice1712.c:1.55->1.56 
#   F:pci/ice1712/ice1724.c:1.37->1.38 
#   F:pci/nm256/nm256.c:1.44->1.45 
#   F:pci/trident/trident_main.c:1.59->1.60 
#   F:pci/ymfpci/ymfpci_main.c:1.52->1.53 
#   L:move AC'97 bus callbacks into seperate ops record;
#   L:remove ac97_bus_t template requirement from snd_ac97_bus()
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/cs4281.c
#   2004/07/05 03:09:11+02:00 perex@suse.cz +6 -7
#   ALSA CVS update
#   D:2004/07/05 09:09:02
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver
#   C:ICE1724 driver,NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.30->1.31 
#   F:include/ac97_codec.h:1.46->1.47 
#   F:pci/atiixp.c:1.13->1.14 
#   F:pci/cs4281.c:1.57->1.58 
#   F:pci/ens1370.c:1.62->1.63 
#   F:pci/es1968.c:1.70->1.71 
#   F:pci/fm801.c:1.47->1.48 
#   F:pci/intel8x0.c:1.143->1.144 
#   F:pci/intel8x0m.c:1.7->1.8 
#   F:pci/maestro3.c:1.54->1.55 
#   F:pci/via82xx.c:1.107->1.108 
#   F:pci/ac97/ac97_codec.c:1.139->1.140 
#   F:pci/ali5451/ali5451.c:1.50->1.51 
#   F:pci/au88x0/au88x0_mixer.c:1.1->1.2 
#   F:pci/cs46xx/cs46xx_lib.c:1.76->1.77 
#   F:pci/emu10k1/emumixer.c:1.23->1.24 
#   F:pci/ice1712/ice1712.c:1.55->1.56 
#   F:pci/ice1712/ice1724.c:1.37->1.38 
#   F:pci/nm256/nm256.c:1.44->1.45 
#   F:pci/trident/trident_main.c:1.59->1.60 
#   F:pci/ymfpci/ymfpci_main.c:1.52->1.53 
#   L:move AC'97 bus callbacks into seperate ops record;
#   L:remove ac97_bus_t template requirement from snd_ac97_bus()
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/au88x0/au88x0_mixer.c
#   2004/07/05 03:09:12+02:00 perex@suse.cz +6 -5
#   ALSA CVS update
#   D:2004/07/05 09:09:02
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver
#   C:ICE1724 driver,NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.30->1.31 
#   F:include/ac97_codec.h:1.46->1.47 
#   F:pci/atiixp.c:1.13->1.14 
#   F:pci/cs4281.c:1.57->1.58 
#   F:pci/ens1370.c:1.62->1.63 
#   F:pci/es1968.c:1.70->1.71 
#   F:pci/fm801.c:1.47->1.48 
#   F:pci/intel8x0.c:1.143->1.144 
#   F:pci/intel8x0m.c:1.7->1.8 
#   F:pci/maestro3.c:1.54->1.55 
#   F:pci/via82xx.c:1.107->1.108 
#   F:pci/ac97/ac97_codec.c:1.139->1.140 
#   F:pci/ali5451/ali5451.c:1.50->1.51 
#   F:pci/au88x0/au88x0_mixer.c:1.1->1.2 
#   F:pci/cs46xx/cs46xx_lib.c:1.76->1.77 
#   F:pci/emu10k1/emumixer.c:1.23->1.24 
#   F:pci/ice1712/ice1712.c:1.55->1.56 
#   F:pci/ice1712/ice1724.c:1.37->1.38 
#   F:pci/nm256/nm256.c:1.44->1.45 
#   F:pci/trident/trident_main.c:1.59->1.60 
#   F:pci/ymfpci/ymfpci_main.c:1.52->1.53 
#   L:move AC'97 bus callbacks into seperate ops record;
#   L:remove ac97_bus_t template requirement from snd_ac97_bus()
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/atiixp.c
#   2004/07/05 03:09:11+02:00 perex@suse.cz +7 -7
#   ALSA CVS update
#   D:2004/07/05 09:09:02
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver
#   C:ICE1724 driver,NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.30->1.31 
#   F:include/ac97_codec.h:1.46->1.47 
#   F:pci/atiixp.c:1.13->1.14 
#   F:pci/cs4281.c:1.57->1.58 
#   F:pci/ens1370.c:1.62->1.63 
#   F:pci/es1968.c:1.70->1.71 
#   F:pci/fm801.c:1.47->1.48 
#   F:pci/intel8x0.c:1.143->1.144 
#   F:pci/intel8x0m.c:1.7->1.8 
#   F:pci/maestro3.c:1.54->1.55 
#   F:pci/via82xx.c:1.107->1.108 
#   F:pci/ac97/ac97_codec.c:1.139->1.140 
#   F:pci/ali5451/ali5451.c:1.50->1.51 
#   F:pci/au88x0/au88x0_mixer.c:1.1->1.2 
#   F:pci/cs46xx/cs46xx_lib.c:1.76->1.77 
#   F:pci/emu10k1/emumixer.c:1.23->1.24 
#   F:pci/ice1712/ice1712.c:1.55->1.56 
#   F:pci/ice1712/ice1724.c:1.37->1.38 
#   F:pci/nm256/nm256.c:1.44->1.45 
#   F:pci/trident/trident_main.c:1.59->1.60 
#   F:pci/ymfpci/ymfpci_main.c:1.52->1.53 
#   L:move AC'97 bus callbacks into seperate ops record;
#   L:remove ac97_bus_t template requirement from snd_ac97_bus()
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/ali5451/ali5451.c
#   2004/07/05 03:09:12+02:00 perex@suse.cz +6 -7
#   ALSA CVS update
#   D:2004/07/05 09:09:02
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver
#   C:ICE1724 driver,NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.30->1.31 
#   F:include/ac97_codec.h:1.46->1.47 
#   F:pci/atiixp.c:1.13->1.14 
#   F:pci/cs4281.c:1.57->1.58 
#   F:pci/ens1370.c:1.62->1.63 
#   F:pci/es1968.c:1.70->1.71 
#   F:pci/fm801.c:1.47->1.48 
#   F:pci/intel8x0.c:1.143->1.144 
#   F:pci/intel8x0m.c:1.7->1.8 
#   F:pci/maestro3.c:1.54->1.55 
#   F:pci/via82xx.c:1.107->1.108 
#   F:pci/ac97/ac97_codec.c:1.139->1.140 
#   F:pci/ali5451/ali5451.c:1.50->1.51 
#   F:pci/au88x0/au88x0_mixer.c:1.1->1.2 
#   F:pci/cs46xx/cs46xx_lib.c:1.76->1.77 
#   F:pci/emu10k1/emumixer.c:1.23->1.24 
#   F:pci/ice1712/ice1712.c:1.55->1.56 
#   F:pci/ice1712/ice1724.c:1.37->1.38 
#   F:pci/nm256/nm256.c:1.44->1.45 
#   F:pci/trident/trident_main.c:1.59->1.60 
#   F:pci/ymfpci/ymfpci_main.c:1.52->1.53 
#   L:move AC'97 bus callbacks into seperate ops record;
#   L:remove ac97_bus_t template requirement from snd_ac97_bus()
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/ac97/ac97_codec.c
#   2004/07/05 03:09:12+02:00 perex@suse.cz +42 -40
#   ALSA CVS update
#   D:2004/07/05 09:09:02
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver
#   C:ICE1724 driver,NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.30->1.31 
#   F:include/ac97_codec.h:1.46->1.47 
#   F:pci/atiixp.c:1.13->1.14 
#   F:pci/cs4281.c:1.57->1.58 
#   F:pci/ens1370.c:1.62->1.63 
#   F:pci/es1968.c:1.70->1.71 
#   F:pci/fm801.c:1.47->1.48 
#   F:pci/intel8x0.c:1.143->1.144 
#   F:pci/intel8x0m.c:1.7->1.8 
#   F:pci/maestro3.c:1.54->1.55 
#   F:pci/via82xx.c:1.107->1.108 
#   F:pci/ac97/ac97_codec.c:1.139->1.140 
#   F:pci/ali5451/ali5451.c:1.50->1.51 
#   F:pci/au88x0/au88x0_mixer.c:1.1->1.2 
#   F:pci/cs46xx/cs46xx_lib.c:1.76->1.77 
#   F:pci/emu10k1/emumixer.c:1.23->1.24 
#   F:pci/ice1712/ice1712.c:1.55->1.56 
#   F:pci/ice1712/ice1724.c:1.37->1.38 
#   F:pci/nm256/nm256.c:1.44->1.45 
#   F:pci/trident/trident_main.c:1.59->1.60 
#   F:pci/ymfpci/ymfpci_main.c:1.52->1.53 
#   L:move AC'97 bus callbacks into seperate ops record;
#   L:remove ac97_bus_t template requirement from snd_ac97_bus()
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# include/sound/ac97_codec.h
#   2004/07/05 03:09:03+02:00 perex@suse.cz +8 -3
#   ALSA CVS update
#   D:2004/07/05 09:09:02
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver
#   C:ICE1724 driver,NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.30->1.31 
#   F:include/ac97_codec.h:1.46->1.47 
#   F:pci/atiixp.c:1.13->1.14 
#   F:pci/cs4281.c:1.57->1.58 
#   F:pci/ens1370.c:1.62->1.63 
#   F:pci/es1968.c:1.70->1.71 
#   F:pci/fm801.c:1.47->1.48 
#   F:pci/intel8x0.c:1.143->1.144 
#   F:pci/intel8x0m.c:1.7->1.8 
#   F:pci/maestro3.c:1.54->1.55 
#   F:pci/via82xx.c:1.107->1.108 
#   F:pci/ac97/ac97_codec.c:1.139->1.140 
#   F:pci/ali5451/ali5451.c:1.50->1.51 
#   F:pci/au88x0/au88x0_mixer.c:1.1->1.2 
#   F:pci/cs46xx/cs46xx_lib.c:1.76->1.77 
#   F:pci/emu10k1/emumixer.c:1.23->1.24 
#   F:pci/ice1712/ice1712.c:1.55->1.56 
#   F:pci/ice1712/ice1724.c:1.37->1.38 
#   F:pci/nm256/nm256.c:1.44->1.45 
#   F:pci/trident/trident_main.c:1.59->1.60 
#   F:pci/ymfpci/ymfpci_main.c:1.52->1.53 
#   L:move AC'97 bus callbacks into seperate ops record;
#   L:remove ac97_bus_t template requirement from snd_ac97_bus()
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
#   2004/07/05 03:09:02+02:00 perex@suse.cz +15 -14
#   ALSA CVS update
#   D:2004/07/05 09:09:02
#   C:Documentation,AC97 Codec Core,ATIIXP driver,CS4281 driver
#   C:ENS1370/1+ driver,ES1968 driver,FM801 driver,Intel8x0 driver
#   C:Intel8x0-modem driver,Maestro3 driver,VIA82xx driver,ALI5451 driver
#   C:au88x0 driver,CS46xx driver,EMU10K1/EMU10K2 driver,ICE1712 driver
#   C:ICE1724 driver,NM256 driver,Trident driver,YMFPCI driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.30->1.31 
#   F:include/ac97_codec.h:1.46->1.47 
#   F:pci/atiixp.c:1.13->1.14 
#   F:pci/cs4281.c:1.57->1.58 
#   F:pci/ens1370.c:1.62->1.63 
#   F:pci/es1968.c:1.70->1.71 
#   F:pci/fm801.c:1.47->1.48 
#   F:pci/intel8x0.c:1.143->1.144 
#   F:pci/intel8x0m.c:1.7->1.8 
#   F:pci/maestro3.c:1.54->1.55 
#   F:pci/via82xx.c:1.107->1.108 
#   F:pci/ac97/ac97_codec.c:1.139->1.140 
#   F:pci/ali5451/ali5451.c:1.50->1.51 
#   F:pci/au88x0/au88x0_mixer.c:1.1->1.2 
#   F:pci/cs46xx/cs46xx_lib.c:1.76->1.77 
#   F:pci/emu10k1/emumixer.c:1.23->1.24 
#   F:pci/ice1712/ice1712.c:1.55->1.56 
#   F:pci/ice1712/ice1724.c:1.37->1.38 
#   F:pci/nm256/nm256.c:1.44->1.45 
#   F:pci/trident/trident_main.c:1.59->1.60 
#   F:pci/ymfpci/ymfpci_main.c:1.52->1.53 
#   L:move AC'97 bus callbacks into seperate ops record;
#   L:remove ac97_bus_t template requirement from snd_ac97_bus()
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/07/28 11:27:18+02:00 perex@suse.cz 
#   ALSA CVS update
#   USB generic driver
#   allow USB MIDI devices without audio control interface
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/usb/usbquirks.h
#   2004/07/05 02:51:45+02:00 perex@suse.cz +17 -1
#   ALSA CVS update
#   D:2004/07/05 08:51:45
#   C:USB generic driver
#   F:usb/usbquirks.h:1.34->1.35 
#   L:allow USB MIDI devices without audio control interface
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/07/28 11:26:39+02:00 perex@suse.cz 
#   ALSA CVS update
#   AC97 Codec Core
#   fix odd comment :)
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/ac97/ac97_proc.c
#   2004/07/05 02:49:24+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/05 08:49:24
#   C:AC97 Codec Core
#   F:pci/ac97/ac97_proc.c:1.9->1.10 
#   L:fix odd comment :)
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/07/28 11:26:00+02:00 perex@suse.cz 
#   ALSA CVS update
#   AMD InterWave driver
#   reduce stack usage;
#   fix ROM checksum check
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/isa/gus/interwave.c
#   2004/07/05 02:46:49+02:00 perex@suse.cz +14 -18
#   ALSA CVS update
#   D:2004/07/05 08:46:49
#   C:AMD InterWave driver
#   F:isa/gus/interwave.c:1.34->1.35 
#   L:reduce stack usage;
#   L:fix ROM checksum check
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/07/28 11:25:21+02:00 perex@suse.cz 
#   ALSA CVS update
#   GUS Library,Wavefront drivers
#   reduce stack usage;
#   fix buffer overflow
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/isa/wavefront/wavefront_fx.c
#   2004/07/05 02:48:42+02:00 perex@suse.cz +14 -6
#   ALSA CVS update
#   D:2004/07/05 08:44:58
#   C:GUS Library,Wavefront drivers
#   F:isa/gus/gus_dram.c:1.6->1.7 
#   F:isa/wavefront/wavefront_fx.c:1.13->1.14 
#   L:reduce stack usage;
#   L:fix buffer overflow
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/isa/gus/gus_dram.c
#   2004/07/05 02:44:58+02:00 perex@suse.cz +5 -5
#   ALSA CVS update
#   D:2004/07/05 08:44:58
#   C:GUS Library,Wavefront drivers
#   F:isa/gus/gus_dram.c:1.6->1.7 
#   F:isa/wavefront/wavefront_fx.c:1.13->1.14 
#   L:reduce stack usage;
#   L:fix buffer overflow
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/07/28 11:24:42+02:00 perex@suse.cz 
#   ALSA CVS update
#   PCM Midlevel
#   fix memory leak
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/core/pcm_lib.c
#   2004/07/05 02:43:28+02:00 perex@suse.cz +9 -13
#   ALSA CVS update
#   D:2004/07/05 08:43:28
#   C:PCM Midlevel
#   F:core/pcm_lib.c:1.53->1.54 
#   L:fix memory leak
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/07/28 11:24:02+02:00 perex@suse.cz 
#   ALSA CVS update
#   USB generic driver
#   remove whitespace at end of lines
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/usb/usbmixer_maps.c
#   2004/07/05 02:37:07+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/05 08:37:07
#   C:USB generic driver
#   F:usb/usbaudio.c:1.104->1.105 
#   F:usb/usbaudio.h:1.32->1.33 
#   F:usb/usbmidi.c:1.30->1.31 
#   F:usb/usbmixer.c:1.28->1.29 
#   F:usb/usbmixer_maps.c:1.6->1.7 
#   L:remove whitespace at end of lines
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/usb/usbmixer.c
#   2004/07/05 02:37:07+02:00 perex@suse.cz +10 -10
#   ALSA CVS update
#   D:2004/07/05 08:37:07
#   C:USB generic driver
#   F:usb/usbaudio.c:1.104->1.105 
#   F:usb/usbaudio.h:1.32->1.33 
#   F:usb/usbmidi.c:1.30->1.31 
#   F:usb/usbmixer.c:1.28->1.29 
#   F:usb/usbmixer_maps.c:1.6->1.7 
#   L:remove whitespace at end of lines
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/usb/usbmidi.c
#   2004/07/05 02:37:07+02:00 perex@suse.cz +6 -6
#   ALSA CVS update
#   D:2004/07/05 08:37:07
#   C:USB generic driver
#   F:usb/usbaudio.c:1.104->1.105 
#   F:usb/usbaudio.h:1.32->1.33 
#   F:usb/usbmidi.c:1.30->1.31 
#   F:usb/usbmixer.c:1.28->1.29 
#   F:usb/usbmixer_maps.c:1.6->1.7 
#   L:remove whitespace at end of lines
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/usb/usbaudio.h
#   2004/07/05 02:37:07+02:00 perex@suse.cz +3 -2
#   ALSA CVS update
#   D:2004/07/05 08:37:07
#   C:USB generic driver
#   F:usb/usbaudio.c:1.104->1.105 
#   F:usb/usbaudio.h:1.32->1.33 
#   F:usb/usbmidi.c:1.30->1.31 
#   F:usb/usbmixer.c:1.28->1.29 
#   F:usb/usbmixer_maps.c:1.6->1.7 
#   L:remove whitespace at end of lines
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/usb/usbaudio.c
#   2004/07/05 02:37:07+02:00 perex@suse.cz +22 -22
#   ALSA CVS update
#   D:2004/07/05 08:37:07
#   C:USB generic driver
#   F:usb/usbaudio.c:1.104->1.105 
#   F:usb/usbaudio.h:1.32->1.33 
#   F:usb/usbmidi.c:1.30->1.31 
#   F:usb/usbmixer.c:1.28->1.29 
#   F:usb/usbmixer_maps.c:1.6->1.7 
#   L:remove whitespace at end of lines
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/07/28 11:23:20+02:00 perex@suse.cz 
#   ALSA CVS update
#   Generic drivers,AK4531 codec
#   One space at the end of a line is evil.
#   So how do we call it if a line has 300 of them? :)
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/ac97/ak4531_codec.c
#   2004/07/05 02:34:36+02:00 perex@suse.cz +6 -6
#   ALSA CVS update
#   D:2004/07/05 08:34:35
#   C:Generic drivers,AK4531 codec
#   F:drivers/dummy.c:1.30->1.31 
#   F:pci/ac97/ak4531_codec.c:1.11->1.12 
#   L:One space at the end of a line is evil.
#   L:So how do we call it if a line has 300 of them? :)
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/drivers/dummy.c
#   2004/07/05 02:34:35+02:00 perex@suse.cz +3 -3
#   ALSA CVS update
#   D:2004/07/05 08:34:35
#   C:Generic drivers,AK4531 codec
#   F:drivers/dummy.c:1.30->1.31 
#   F:pci/ac97/ak4531_codec.c:1.11->1.12 
#   L:One space at the end of a line is evil.
#   L:So how do we call it if a line has 300 of them? :)
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/07/28 11:22:41+02:00 perex@suse.cz 
#   ALSA CVS update
#   OPL4
#   reorganize locking;
#   optimize memory accesses
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/drivers/opl4/opl4_synth.c
#   2004/07/05 02:32:29+02:00 perex@suse.cz +16 -9
#   ALSA CVS update
#   D:2004/07/05 08:32:29
#   C:OPL4
#   F:drivers/opl4/opl4_lib.c:1.7->1.8 
#   F:drivers/opl4/opl4_local.h:1.2->1.3 
#   F:drivers/opl4/opl4_mixer.c:1.2->1.3 
#   F:drivers/opl4/opl4_synth.c:1.4->1.5 
#   L:reorganize locking;
#   L:optimize memory accesses
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/drivers/opl4/opl4_mixer.c
#   2004/07/05 02:32:29+02:00 perex@suse.cz +7 -3
#   ALSA CVS update
#   D:2004/07/05 08:32:29
#   C:OPL4
#   F:drivers/opl4/opl4_lib.c:1.7->1.8 
#   F:drivers/opl4/opl4_local.h:1.2->1.3 
#   F:drivers/opl4/opl4_mixer.c:1.2->1.3 
#   F:drivers/opl4/opl4_synth.c:1.4->1.5 
#   L:reorganize locking;
#   L:optimize memory accesses
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/drivers/opl4/opl4_local.h
#   2004/07/05 02:32:29+02:00 perex@suse.cz +0 -1
#   ALSA CVS update
#   D:2004/07/05 08:32:29
#   C:OPL4
#   F:drivers/opl4/opl4_lib.c:1.7->1.8 
#   F:drivers/opl4/opl4_local.h:1.2->1.3 
#   F:drivers/opl4/opl4_mixer.c:1.2->1.3 
#   F:drivers/opl4/opl4_synth.c:1.4->1.5 
#   L:reorganize locking;
#   L:optimize memory accesses
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/drivers/opl4/opl4_lib.c
#   2004/07/05 02:32:29+02:00 perex@suse.cz +28 -22
#   ALSA CVS update
#   D:2004/07/05 08:32:29
#   C:OPL4
#   F:drivers/opl4/opl4_lib.c:1.7->1.8 
#   F:drivers/opl4/opl4_local.h:1.2->1.3 
#   F:drivers/opl4/opl4_mixer.c:1.2->1.3 
#   F:drivers/opl4/opl4_synth.c:1.4->1.5 
#   L:reorganize locking;
#   L:optimize memory accesses
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/07/28 11:22:00+02:00 perex@suse.cz 
#   ALSA CVS update
#   Intel8x0 driver
#   set msbits for 20-bit sample format
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/intel8x0.c
#   2004/07/05 02:30:54+02:00 perex@suse.cz +3 -1
#   ALSA CVS update
#   D:2004/07/05 08:30:54
#   C:Intel8x0 driver
#   F:pci/intel8x0.c:1.142->1.143 
#   L:set msbits for 20-bit sample format
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/core/control.c
#   2004/07/04 16:27:19+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/07/04 15:55:28+02:00 perex@suse.cz 
#   ALSA CVS update
#   au88x0 driver
#   - asXtalkGainsAllChan -> vortex_asXtalkGainsAllChan
#   - fixed extern/static problem
#   
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# sound/pci/au88x0/au88x0_xtalk.h
#   2004/07/04 07:47:16+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/04 13:47:16
#   C:au88x0 driver
#   F:pci/au88x0/au88x0_a3d.c:1.4->1.5 
#   F:pci/au88x0/au88x0_xtalk.c:1.1->1.2 
#   F:pci/au88x0/au88x0_xtalk.h:1.1->1.2 
#   L:- asXtalkGainsAllChan -> vortex_asXtalkGainsAllChan
#   L:- fixed extern/static problem
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# sound/pci/au88x0/au88x0_xtalk.c
#   2004/07/04 07:47:16+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/04 13:47:16
#   C:au88x0 driver
#   F:pci/au88x0/au88x0_a3d.c:1.4->1.5 
#   F:pci/au88x0/au88x0_xtalk.c:1.1->1.2 
#   F:pci/au88x0/au88x0_xtalk.h:1.1->1.2 
#   L:- asXtalkGainsAllChan -> vortex_asXtalkGainsAllChan
#   L:- fixed extern/static problem
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# sound/pci/au88x0/au88x0_a3d.c
#   2004/07/04 07:47:16+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/04 13:47:16
#   C:au88x0 driver
#   F:pci/au88x0/au88x0_a3d.c:1.4->1.5 
#   F:pci/au88x0/au88x0_xtalk.c:1.1->1.2 
#   F:pci/au88x0/au88x0_xtalk.h:1.1->1.2 
#   L:- asXtalkGainsAllChan -> vortex_asXtalkGainsAllChan
#   L:- fixed extern/static problem
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# ChangeSet
#   2004/07/04 15:55:01+02:00 perex@suse.cz 
#   ALSA CVS update
#   ES1938 driver
#   
#   Playing Quake1 (quakeforge-flavor with ALSA-driver) I hear cracks and blibs.
#   Other apps (xine, mpg321) are fine. The OSS driver in 2.6.7 produces no
#   cracks (but reverses stereo BTW).
#   
#   I fixed it, i.e. it works for me:
#   
#   *No swapping of stereo channels
#   *no cracks
#   
#   Signed-off-by: <maps4711@gmx.de>
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# sound/pci/es1938.c
#   2004/07/04 06:05:55+02:00 perex@suse.cz +12 -4
#   ALSA CVS update
#   D:2004/07/04 12:05:55
#   C:ES1938 driver
#   F:pci/es1938.c:1.38->1.39 
#   L:
#   L:Playing Quake1 (quakeforge-flavor with ALSA-driver) I hear cracks and blibs.
#   L:Other apps (xine, mpg321) are fine. The OSS driver in 2.6.7 produces no
#   L:cracks (but reverses stereo BTW).
#   L:
#   L:I fixed it, i.e. it works for me:
#   L:
#   L:*No swapping of stereo channels
#   L:*no cracks
#   Signed-off-by: <maps4711@gmx.de>
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# ChangeSet
#   2004/07/04 15:54:34+02:00 perex@suse.cz 
#   ALSA CVS update
#   PCM Midlevel,RME32 driver
#   - Fixed the int types in indirect_pcm helpers.
#   - Added the missing initialization of fullduplex mode on rme32.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/rme32.c
#   2004/07/02 08:43:44+02:00 perex@suse.cz +6 -8
#   ALSA CVS update
#   D:2004/07/02 14:43:44
#   C:PCM Midlevel,RME32 driver
#   F:include/pcm-indirect.h:1.1->1.2 
#   F:pci/rme32.c:1.38->1.39 
#   L:- Fixed the int types in indirect_pcm helpers.
#   L:- Added the missing initialization of fullduplex mode on rme32.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/pcm-indirect.h
#   2004/07/02 08:43:44+02:00 perex@suse.cz +11 -11
#   ALSA CVS update
#   D:2004/07/02 14:43:44
#   C:PCM Midlevel,RME32 driver
#   F:include/pcm-indirect.h:1.1->1.2 
#   F:pci/rme32.c:1.38->1.39 
#   L:- Fixed the int types in indirect_pcm helpers.
#   L:- Added the missing initialization of fullduplex mode on rme32.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/04 15:54:07+02:00 perex@suse.cz 
#   ALSA CVS update
#   EMU10K1/EMU10K2 driver
#   Clean up the invalid (commented out) lines for emu10k1x.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/emu10k1/emu10k1.c
#   2004/07/02 08:22:12+02:00 perex@suse.cz +0 -3
#   ALSA CVS update
#   D:2004/07/02 14:22:12
#   C:EMU10K1/EMU10K2 driver
#   F:pci/emu10k1/emu10k1.c:1.26->1.27 
#   L:Clean up the invalid (commented out) lines for emu10k1x.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/01 19:38:27+02:00 perex@suse.cz 
#   ALSA CVS update
#   Instrument layer
#     LD      .tmp_vmlinux1
#   sound/built-in.o(.text+0xfb4ae): In function nd_gus_synth_new_device':
#   : undefined reference to nd_seq_iwffff_init'
#   make: *** [.tmp_vmlinux1] Error 1
#   
#   Signed-off-by: Adrian Bunk <bunk@fs.tum.de>
#   Signed-off-by: Andrew Morton <akpm@osdl.org>
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# sound/core/seq/instr/Makefile
#   2004/07/01 10:12:07+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/01 16:12:07
#   C:Instrument layer
#   F:core/seq/instr/Makefile:1.17->1.18 
#   L:  LD      .tmp_vmlinux1
#   L:sound/built-in.o(.text+0xfb4ae): In function nd_gus_synth_new_device':
#   L:: undefined reference to nd_seq_iwffff_init'
#   L:make: *** [.tmp_vmlinux1] Error 1
#   Signed-off-by: Adrian Bunk <bunk@fs.tum.de>
#   Signed-off-by: Andrew Morton <akpm@osdl.org>
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# ChangeSet
#   2004/07/01 19:38:07+02:00 perex@suse.cz 
#   ALSA CVS update
#   PCM Midlevel
#   
#   snd_pcm_timer_resolution_change():
#   
#   Right, that function doesn't work well for 44100/1024 in 32 bits -- it
#   ends up trying to calculate 1e7 * 1024 / 441 and having to divide
#   both numerator and denominator by 4 (thus losing the rather crucial 1
#   at the end of 441) before it can do the calculation without overflow.
#   
#   Attached is a patch against 1.0.5a that gets better results in this
#   instance, by leaving the denominator alone and instead doubling the
#   result back up by the same number of times as the multiplier had to
#   be halved by.
#   
#   Signed-off-by: Chris Cannam <cannam@all-day-breakfast.com>
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# sound/core/pcm_timer.c
#   2004/07/01 09:59:38+02:00 perex@suse.cz +4 -3
#   ALSA CVS update
#   D:2004/07/01 15:59:38
#   C:PCM Midlevel
#   F:core/pcm_timer.c:1.8->1.9 
#   L:
#   L:snd_pcm_timer_resolution_change():
#   L:
#   L:Right, that function doesn't work well for 44100/1024 in 32 bits -- it
#   L:ends up trying to calculate 1e7 * 1024 / 441 and having to divide
#   L:both numerator and denominator by 4 (thus losing the rather crucial 1
#   L:at the end of 441) before it can do the calculation without overflow.
#   L:
#   L:Attached is a patch against 1.0.5a that gets better results in this
#   L:instance, by leaving the denominator alone and instead doubling the
#   L:result back up by the same number of times as the multiplier had to
#   L:be halved by.
#   Signed-off-by: Chris Cannam <cannam@all-day-breakfast.com>
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# ChangeSet
#   2004/07/01 19:37:46+02:00 perex@suse.cz 
#   ALSA CVS update
#   RME32 driver
#   Added the experimental fullduplex support.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/rme32.c
#   2004/07/01 04:22:49+02:00 perex@suse.cz +336 -205
#   ALSA CVS update
#   D:2004/07/01 10:22:49
#   C:RME32 driver
#   F:pci/rme32.c:1.37->1.38 
#   L:Added the experimental fullduplex support.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/01 19:37:25+02:00 perex@suse.cz 
#   ALSA CVS update
#   CS46xx driver,EMU10K1/EMU10K2 driver,PCM Midlevel
#   Clean up of indirect PCM data transfer with helper functions.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/emu10k1/emupcm.c
#   2004/07/01 04:22:16+02:00 perex@suse.cz +32 -72
#   ALSA CVS update
#   D:2004/07/01 10:22:16
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,PCM Midlevel
#   F:include/cs46xx.h:1.19->1.20 
#   F:include/emu10k1.h:1.42->1.43 
#   F:include/pcm-indirect.h:INITIAL->1.1 
#   F:pci/cs46xx/cs46xx_lib.c:1.75->1.76 
#   F:pci/emu10k1/emupcm.c:1.28->1.29 
#   L:Clean up of indirect PCM data transfer with helper functions.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/cs46xx/cs46xx_lib.c
#   2004/07/01 04:22:16+02:00 perex@suse.cz +27 -102
#   ALSA CVS update
#   D:2004/07/01 10:22:16
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,PCM Midlevel
#   F:include/cs46xx.h:1.19->1.20 
#   F:include/emu10k1.h:1.42->1.43 
#   F:include/pcm-indirect.h:INITIAL->1.1 
#   F:pci/cs46xx/cs46xx_lib.c:1.75->1.76 
#   F:pci/emu10k1/emupcm.c:1.28->1.29 
#   L:Clean up of indirect PCM data transfer with helper functions.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/pcm-indirect.h
#   2004/07/01 18:07:24+02:00 perex@suse.cz +173 -0
#   ALSA CVS update
#   D:2004/07/01 10:22:16
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,PCM Midlevel
#   F:include/cs46xx.h:1.19->1.20 
#   F:include/emu10k1.h:1.42->1.43 
#   F:include/pcm-indirect.h:INITIAL->1.1 
#   F:pci/cs46xx/cs46xx_lib.c:1.75->1.76 
#   F:pci/emu10k1/emupcm.c:1.28->1.29 
#   L:Clean up of indirect PCM data transfer with helper functions.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/emu10k1.h
#   2004/07/01 04:22:16+02:00 perex@suse.cz +2 -4
#   ALSA CVS update
#   D:2004/07/01 10:22:16
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,PCM Midlevel
#   F:include/cs46xx.h:1.19->1.20 
#   F:include/emu10k1.h:1.42->1.43 
#   F:include/pcm-indirect.h:INITIAL->1.1 
#   F:pci/cs46xx/cs46xx_lib.c:1.75->1.76 
#   F:pci/emu10k1/emupcm.c:1.28->1.29 
#   L:Clean up of indirect PCM data transfer with helper functions.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/cs46xx.h
#   2004/07/01 04:22:16+02:00 perex@suse.cz +3 -16
#   ALSA CVS update
#   D:2004/07/01 10:22:16
#   C:CS46xx driver,EMU10K1/EMU10K2 driver,PCM Midlevel
#   F:include/cs46xx.h:1.19->1.20 
#   F:include/emu10k1.h:1.42->1.43 
#   F:include/pcm-indirect.h:INITIAL->1.1 
#   F:pci/cs46xx/cs46xx_lib.c:1.75->1.76 
#   F:pci/emu10k1/emupcm.c:1.28->1.29 
#   L:Clean up of indirect PCM data transfer with helper functions.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/pcm-indirect.h
#   2004/07/01 18:07:24+02:00 perex@suse.cz +0 -0
#   BitKeeper file /home/perex/bk/linux-sound/work/include/sound/pcm-indirect.h
# 
# ChangeSet
#   2004/07/01 19:37:02+02:00 perex@suse.cz 
#   ALSA CVS update
#   AC97 Codec Core
#   Check the validity of registers before creating controls.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ac97/ac97_codec.c
#   2004/07/01 04:21:23+02:00 perex@suse.cz +9 -0
#   ALSA CVS update
#   D:2004/07/01 10:21:23
#   C:AC97 Codec Core
#   F:pci/ac97/ac97_codec.c:1.138->1.139 
#   L:Check the validity of registers before creating controls.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/01 19:36:42+02:00 perex@suse.cz 
#   ALSA CVS update
#   ALSA<-OSS sequencer
#   Suppress the error message when no device is found.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/oss/seq_oss_init.c
#   2004/07/01 04:20:50+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/01 10:20:50
#   C:ALSA<-OSS sequencer
#   F:core/seq/oss/seq_oss_init.c:1.13->1.14 
#   L:Suppress the error message when no device is found.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/01 19:36:21+02:00 perex@suse.cz 
#   ALSA CVS update
#   NM256 driver
#   Added AC97 CD register to the list of allowed registeres.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/nm256/nm256.c
#   2004/07/01 04:19:48+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/07/01 10:19:48
#   C:NM256 driver
#   F:pci/nm256/nm256.c:1.42->1.43 
#   L:Added AC97 CD register to the list of allowed registeres.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/01 19:35:59+02:00 perex@suse.cz 
#   ALSA CVS update
#   SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3,OPL4,L3 drivers
#   PARISC Harmony driver,Sound Core PDAudioCF driver
#   Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver
#   SPARC cs4231 driver,USB generic driver
#   Clean up of obsolete MODULE_* stuff (other part)
#   
#   Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/usb/usbaudio.c
#   2004/07/01 03:33:43+02:00 perex@suse.cz +1 -9
#   ALSA CVS update
#   D:2004/07/01 09:33:41
#   C:SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3,OPL4,L3 drivers
#   C:PARISC Harmony driver,Sound Core PDAudioCF driver
#   C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver
#   C:SPARC cs4231 driver,USB generic driver
#   F:arm/sa11xx-uda1341.c:1.16->1.17 
#   F:drivers/dummy.c:1.29->1.30 
#   F:drivers/mtpav.c:1.28->1.29 
#   F:drivers/serial-u16550.c:1.27->1.28 
#   F:drivers/virmidi.c:1.13->1.14 
#   F:drivers/mpu401/mpu401.c:1.18->1.19 
#   F:drivers/opl3/opl3_seq.c:1.14->1.15 
#   F:drivers/opl4/opl4_lib.c:1.6->1.7 
#   F:drivers/opl4/opl4_seq.c:1.5->1.6 
#   F:i2c/l3/uda1341.c:1.11->1.12 
#   F:parisc/harmony.c:1.13->1.14 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.8->1.9 
#   F:pcmcia/vx/vxpocket.c:1.4->1.5 
#   F:ppc/powermac.c:1.17->1.18 
#   F:sparc/amd7930.c:1.10->1.11 
#   F:sparc/cs4231.c:1.14->1.15 
#   F:usb/usbaudio.c:1.103->1.104 
#   L:Clean up of obsolete MODULE_* stuff (other part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/sparc/cs4231.c
#   2004/07/01 03:33:43+02:00 perex@suse.cz +1 -5
#   ALSA CVS update
#   D:2004/07/01 09:33:41
#   C:SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3,OPL4,L3 drivers
#   C:PARISC Harmony driver,Sound Core PDAudioCF driver
#   C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver
#   C:SPARC cs4231 driver,USB generic driver
#   F:arm/sa11xx-uda1341.c:1.16->1.17 
#   F:drivers/dummy.c:1.29->1.30 
#   F:drivers/mtpav.c:1.28->1.29 
#   F:drivers/serial-u16550.c:1.27->1.28 
#   F:drivers/virmidi.c:1.13->1.14 
#   F:drivers/mpu401/mpu401.c:1.18->1.19 
#   F:drivers/opl3/opl3_seq.c:1.14->1.15 
#   F:drivers/opl4/opl4_lib.c:1.6->1.7 
#   F:drivers/opl4/opl4_seq.c:1.5->1.6 
#   F:i2c/l3/uda1341.c:1.11->1.12 
#   F:parisc/harmony.c:1.13->1.14 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.8->1.9 
#   F:pcmcia/vx/vxpocket.c:1.4->1.5 
#   F:ppc/powermac.c:1.17->1.18 
#   F:sparc/amd7930.c:1.10->1.11 
#   F:sparc/cs4231.c:1.14->1.15 
#   F:usb/usbaudio.c:1.103->1.104 
#   L:Clean up of obsolete MODULE_* stuff (other part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/sparc/amd7930.c
#   2004/07/01 03:33:43+02:00 perex@suse.cz +1 -5
#   ALSA CVS update
#   D:2004/07/01 09:33:41
#   C:SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3,OPL4,L3 drivers
#   C:PARISC Harmony driver,Sound Core PDAudioCF driver
#   C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver
#   C:SPARC cs4231 driver,USB generic driver
#   F:arm/sa11xx-uda1341.c:1.16->1.17 
#   F:drivers/dummy.c:1.29->1.30 
#   F:drivers/mtpav.c:1.28->1.29 
#   F:drivers/serial-u16550.c:1.27->1.28 
#   F:drivers/virmidi.c:1.13->1.14 
#   F:drivers/mpu401/mpu401.c:1.18->1.19 
#   F:drivers/opl3/opl3_seq.c:1.14->1.15 
#   F:drivers/opl4/opl4_lib.c:1.6->1.7 
#   F:drivers/opl4/opl4_seq.c:1.5->1.6 
#   F:i2c/l3/uda1341.c:1.11->1.12 
#   F:parisc/harmony.c:1.13->1.14 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.8->1.9 
#   F:pcmcia/vx/vxpocket.c:1.4->1.5 
#   F:ppc/powermac.c:1.17->1.18 
#   F:sparc/amd7930.c:1.10->1.11 
#   F:sparc/cs4231.c:1.14->1.15 
#   F:usb/usbaudio.c:1.103->1.104 
#   L:Clean up of obsolete MODULE_* stuff (other part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/ppc/powermac.c
#   2004/07/01 03:33:43+02:00 perex@suse.cz +1 -6
#   ALSA CVS update
#   D:2004/07/01 09:33:41
#   C:SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3,OPL4,L3 drivers
#   C:PARISC Harmony driver,Sound Core PDAudioCF driver
#   C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver
#   C:SPARC cs4231 driver,USB generic driver
#   F:arm/sa11xx-uda1341.c:1.16->1.17 
#   F:drivers/dummy.c:1.29->1.30 
#   F:drivers/mtpav.c:1.28->1.29 
#   F:drivers/serial-u16550.c:1.27->1.28 
#   F:drivers/virmidi.c:1.13->1.14 
#   F:drivers/mpu401/mpu401.c:1.18->1.19 
#   F:drivers/opl3/opl3_seq.c:1.14->1.15 
#   F:drivers/opl4/opl4_lib.c:1.6->1.7 
#   F:drivers/opl4/opl4_seq.c:1.5->1.6 
#   F:i2c/l3/uda1341.c:1.11->1.12 
#   F:parisc/harmony.c:1.13->1.14 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.8->1.9 
#   F:pcmcia/vx/vxpocket.c:1.4->1.5 
#   F:ppc/powermac.c:1.17->1.18 
#   F:sparc/amd7930.c:1.10->1.11 
#   F:sparc/cs4231.c:1.14->1.15 
#   F:usb/usbaudio.c:1.103->1.104 
#   L:Clean up of obsolete MODULE_* stuff (other part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pcmcia/vx/vxpocket.c
#   2004/07/01 03:33:42+02:00 perex@suse.cz +1 -6
#   ALSA CVS update
#   D:2004/07/01 09:33:41
#   C:SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3,OPL4,L3 drivers
#   C:PARISC Harmony driver,Sound Core PDAudioCF driver
#   C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver
#   C:SPARC cs4231 driver,USB generic driver
#   F:arm/sa11xx-uda1341.c:1.16->1.17 
#   F:drivers/dummy.c:1.29->1.30 
#   F:drivers/mtpav.c:1.28->1.29 
#   F:drivers/serial-u16550.c:1.27->1.28 
#   F:drivers/virmidi.c:1.13->1.14 
#   F:drivers/mpu401/mpu401.c:1.18->1.19 
#   F:drivers/opl3/opl3_seq.c:1.14->1.15 
#   F:drivers/opl4/opl4_lib.c:1.6->1.7 
#   F:drivers/opl4/opl4_seq.c:1.5->1.6 
#   F:i2c/l3/uda1341.c:1.11->1.12 
#   F:parisc/harmony.c:1.13->1.14 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.8->1.9 
#   F:pcmcia/vx/vxpocket.c:1.4->1.5 
#   F:ppc/powermac.c:1.17->1.18 
#   F:sparc/amd7930.c:1.10->1.11 
#   F:sparc/cs4231.c:1.14->1.15 
#   F:usb/usbaudio.c:1.103->1.104 
#   L:Clean up of obsolete MODULE_* stuff (other part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pcmcia/pdaudiocf/pdaudiocf.c
#   2004/07/01 03:33:42+02:00 perex@suse.cz +1 -5
#   ALSA CVS update
#   D:2004/07/01 09:33:41
#   C:SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3,OPL4,L3 drivers
#   C:PARISC Harmony driver,Sound Core PDAudioCF driver
#   C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver
#   C:SPARC cs4231 driver,USB generic driver
#   F:arm/sa11xx-uda1341.c:1.16->1.17 
#   F:drivers/dummy.c:1.29->1.30 
#   F:drivers/mtpav.c:1.28->1.29 
#   F:drivers/serial-u16550.c:1.27->1.28 
#   F:drivers/virmidi.c:1.13->1.14 
#   F:drivers/mpu401/mpu401.c:1.18->1.19 
#   F:drivers/opl3/opl3_seq.c:1.14->1.15 
#   F:drivers/opl4/opl4_lib.c:1.6->1.7 
#   F:drivers/opl4/opl4_seq.c:1.5->1.6 
#   F:i2c/l3/uda1341.c:1.11->1.12 
#   F:parisc/harmony.c:1.13->1.14 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.8->1.9 
#   F:pcmcia/vx/vxpocket.c:1.4->1.5 
#   F:ppc/powermac.c:1.17->1.18 
#   F:sparc/amd7930.c:1.10->1.11 
#   F:sparc/cs4231.c:1.14->1.15 
#   F:usb/usbaudio.c:1.103->1.104 
#   L:Clean up of obsolete MODULE_* stuff (other part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/parisc/harmony.c
#   2004/07/01 03:33:42+02:00 perex@suse.cz +1 -5
#   ALSA CVS update
#   D:2004/07/01 09:33:41
#   C:SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3,OPL4,L3 drivers
#   C:PARISC Harmony driver,Sound Core PDAudioCF driver
#   C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver
#   C:SPARC cs4231 driver,USB generic driver
#   F:arm/sa11xx-uda1341.c:1.16->1.17 
#   F:drivers/dummy.c:1.29->1.30 
#   F:drivers/mtpav.c:1.28->1.29 
#   F:drivers/serial-u16550.c:1.27->1.28 
#   F:drivers/virmidi.c:1.13->1.14 
#   F:drivers/mpu401/mpu401.c:1.18->1.19 
#   F:drivers/opl3/opl3_seq.c:1.14->1.15 
#   F:drivers/opl4/opl4_lib.c:1.6->1.7 
#   F:drivers/opl4/opl4_seq.c:1.5->1.6 
#   F:i2c/l3/uda1341.c:1.11->1.12 
#   F:parisc/harmony.c:1.13->1.14 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.8->1.9 
#   F:pcmcia/vx/vxpocket.c:1.4->1.5 
#   F:ppc/powermac.c:1.17->1.18 
#   F:sparc/amd7930.c:1.10->1.11 
#   F:sparc/cs4231.c:1.14->1.15 
#   F:usb/usbaudio.c:1.103->1.104 
#   L:Clean up of obsolete MODULE_* stuff (other part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/i2c/l3/uda1341.c
#   2004/07/01 03:33:42+02:00 perex@suse.cz +2 -3
#   ALSA CVS update
#   D:2004/07/01 09:33:41
#   C:SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3,OPL4,L3 drivers
#   C:PARISC Harmony driver,Sound Core PDAudioCF driver
#   C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver
#   C:SPARC cs4231 driver,USB generic driver
#   F:arm/sa11xx-uda1341.c:1.16->1.17 
#   F:drivers/dummy.c:1.29->1.30 
#   F:drivers/mtpav.c:1.28->1.29 
#   F:drivers/serial-u16550.c:1.27->1.28 
#   F:drivers/virmidi.c:1.13->1.14 
#   F:drivers/mpu401/mpu401.c:1.18->1.19 
#   F:drivers/opl3/opl3_seq.c:1.14->1.15 
#   F:drivers/opl4/opl4_lib.c:1.6->1.7 
#   F:drivers/opl4/opl4_seq.c:1.5->1.6 
#   F:i2c/l3/uda1341.c:1.11->1.12 
#   F:parisc/harmony.c:1.13->1.14 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.8->1.9 
#   F:pcmcia/vx/vxpocket.c:1.4->1.5 
#   F:ppc/powermac.c:1.17->1.18 
#   F:sparc/amd7930.c:1.10->1.11 
#   F:sparc/cs4231.c:1.14->1.15 
#   F:usb/usbaudio.c:1.103->1.104 
#   L:Clean up of obsolete MODULE_* stuff (other part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/drivers/virmidi.c
#   2004/07/01 03:33:42+02:00 perex@suse.cz +1 -6
#   ALSA CVS update
#   D:2004/07/01 09:33:41
#   C:SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3,OPL4,L3 drivers
#   C:PARISC Harmony driver,Sound Core PDAudioCF driver
#   C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver
#   C:SPARC cs4231 driver,USB generic driver
#   F:arm/sa11xx-uda1341.c:1.16->1.17 
#   F:drivers/dummy.c:1.29->1.30 
#   F:drivers/mtpav.c:1.28->1.29 
#   F:drivers/serial-u16550.c:1.27->1.28 
#   F:drivers/virmidi.c:1.13->1.14 
#   F:drivers/mpu401/mpu401.c:1.18->1.19 
#   F:drivers/opl3/opl3_seq.c:1.14->1.15 
#   F:drivers/opl4/opl4_lib.c:1.6->1.7 
#   F:drivers/opl4/opl4_seq.c:1.5->1.6 
#   F:i2c/l3/uda1341.c:1.11->1.12 
#   F:parisc/harmony.c:1.13->1.14 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.8->1.9 
#   F:pcmcia/vx/vxpocket.c:1.4->1.5 
#   F:ppc/powermac.c:1.17->1.18 
#   F:sparc/amd7930.c:1.10->1.11 
#   F:sparc/cs4231.c:1.14->1.15 
#   F:usb/usbaudio.c:1.103->1.104 
#   L:Clean up of obsolete MODULE_* stuff (other part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/drivers/serial-u16550.c
#   2004/07/01 03:33:42+02:00 perex@suse.cz +1 -13
#   ALSA CVS update
#   D:2004/07/01 09:33:41
#   C:SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3,OPL4,L3 drivers
#   C:PARISC Harmony driver,Sound Core PDAudioCF driver
#   C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver
#   C:SPARC cs4231 driver,USB generic driver
#   F:arm/sa11xx-uda1341.c:1.16->1.17 
#   F:drivers/dummy.c:1.29->1.30 
#   F:drivers/mtpav.c:1.28->1.29 
#   F:drivers/serial-u16550.c:1.27->1.28 
#   F:drivers/virmidi.c:1.13->1.14 
#   F:drivers/mpu401/mpu401.c:1.18->1.19 
#   F:drivers/opl3/opl3_seq.c:1.14->1.15 
#   F:drivers/opl4/opl4_lib.c:1.6->1.7 
#   F:drivers/opl4/opl4_seq.c:1.5->1.6 
#   F:i2c/l3/uda1341.c:1.11->1.12 
#   F:parisc/harmony.c:1.13->1.14 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.8->1.9 
#   F:pcmcia/vx/vxpocket.c:1.4->1.5 
#   F:ppc/powermac.c:1.17->1.18 
#   F:sparc/amd7930.c:1.10->1.11 
#   F:sparc/cs4231.c:1.14->1.15 
#   F:usb/usbaudio.c:1.103->1.104 
#   L:Clean up of obsolete MODULE_* stuff (other part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/drivers/opl4/opl4_seq.c
#   2004/07/01 03:33:42+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/07/01 09:33:41
#   C:SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3,OPL4,L3 drivers
#   C:PARISC Harmony driver,Sound Core PDAudioCF driver
#   C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver
#   C:SPARC cs4231 driver,USB generic driver
#   F:arm/sa11xx-uda1341.c:1.16->1.17 
#   F:drivers/dummy.c:1.29->1.30 
#   F:drivers/mtpav.c:1.28->1.29 
#   F:drivers/serial-u16550.c:1.27->1.28 
#   F:drivers/virmidi.c:1.13->1.14 
#   F:drivers/mpu401/mpu401.c:1.18->1.19 
#   F:drivers/opl3/opl3_seq.c:1.14->1.15 
#   F:drivers/opl4/opl4_lib.c:1.6->1.7 
#   F:drivers/opl4/opl4_seq.c:1.5->1.6 
#   F:i2c/l3/uda1341.c:1.11->1.12 
#   F:parisc/harmony.c:1.13->1.14 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.8->1.9 
#   F:pcmcia/vx/vxpocket.c:1.4->1.5 
#   F:ppc/powermac.c:1.17->1.18 
#   F:sparc/amd7930.c:1.10->1.11 
#   F:sparc/cs4231.c:1.14->1.15 
#   F:usb/usbaudio.c:1.103->1.104 
#   L:Clean up of obsolete MODULE_* stuff (other part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/drivers/opl4/opl4_lib.c
#   2004/07/01 03:33:42+02:00 perex@suse.cz +0 -1
#   ALSA CVS update
#   D:2004/07/01 09:33:41
#   C:SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3,OPL4,L3 drivers
#   C:PARISC Harmony driver,Sound Core PDAudioCF driver
#   C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver
#   C:SPARC cs4231 driver,USB generic driver
#   F:arm/sa11xx-uda1341.c:1.16->1.17 
#   F:drivers/dummy.c:1.29->1.30 
#   F:drivers/mtpav.c:1.28->1.29 
#   F:drivers/serial-u16550.c:1.27->1.28 
#   F:drivers/virmidi.c:1.13->1.14 
#   F:drivers/mpu401/mpu401.c:1.18->1.19 
#   F:drivers/opl3/opl3_seq.c:1.14->1.15 
#   F:drivers/opl4/opl4_lib.c:1.6->1.7 
#   F:drivers/opl4/opl4_seq.c:1.5->1.6 
#   F:i2c/l3/uda1341.c:1.11->1.12 
#   F:parisc/harmony.c:1.13->1.14 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.8->1.9 
#   F:pcmcia/vx/vxpocket.c:1.4->1.5 
#   F:ppc/powermac.c:1.17->1.18 
#   F:sparc/amd7930.c:1.10->1.11 
#   F:sparc/cs4231.c:1.14->1.15 
#   F:usb/usbaudio.c:1.103->1.104 
#   L:Clean up of obsolete MODULE_* stuff (other part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/drivers/opl3/opl3_seq.c
#   2004/07/01 03:33:42+02:00 perex@suse.cz +0 -1
#   ALSA CVS update
#   D:2004/07/01 09:33:41
#   C:SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3,OPL4,L3 drivers
#   C:PARISC Harmony driver,Sound Core PDAudioCF driver
#   C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver
#   C:SPARC cs4231 driver,USB generic driver
#   F:arm/sa11xx-uda1341.c:1.16->1.17 
#   F:drivers/dummy.c:1.29->1.30 
#   F:drivers/mtpav.c:1.28->1.29 
#   F:drivers/serial-u16550.c:1.27->1.28 
#   F:drivers/virmidi.c:1.13->1.14 
#   F:drivers/mpu401/mpu401.c:1.18->1.19 
#   F:drivers/opl3/opl3_seq.c:1.14->1.15 
#   F:drivers/opl4/opl4_lib.c:1.6->1.7 
#   F:drivers/opl4/opl4_seq.c:1.5->1.6 
#   F:i2c/l3/uda1341.c:1.11->1.12 
#   F:parisc/harmony.c:1.13->1.14 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.8->1.9 
#   F:pcmcia/vx/vxpocket.c:1.4->1.5 
#   F:ppc/powermac.c:1.17->1.18 
#   F:sparc/amd7930.c:1.10->1.11 
#   F:sparc/cs4231.c:1.14->1.15 
#   F:usb/usbaudio.c:1.103->1.104 
#   L:Clean up of obsolete MODULE_* stuff (other part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/drivers/mtpav.c
#   2004/07/01 03:33:42+02:00 perex@suse.cz +1 -7
#   ALSA CVS update
#   D:2004/07/01 09:33:41
#   C:SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3,OPL4,L3 drivers
#   C:PARISC Harmony driver,Sound Core PDAudioCF driver
#   C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver
#   C:SPARC cs4231 driver,USB generic driver
#   F:arm/sa11xx-uda1341.c:1.16->1.17 
#   F:drivers/dummy.c:1.29->1.30 
#   F:drivers/mtpav.c:1.28->1.29 
#   F:drivers/serial-u16550.c:1.27->1.28 
#   F:drivers/virmidi.c:1.13->1.14 
#   F:drivers/mpu401/mpu401.c:1.18->1.19 
#   F:drivers/opl3/opl3_seq.c:1.14->1.15 
#   F:drivers/opl4/opl4_lib.c:1.6->1.7 
#   F:drivers/opl4/opl4_seq.c:1.5->1.6 
#   F:i2c/l3/uda1341.c:1.11->1.12 
#   F:parisc/harmony.c:1.13->1.14 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.8->1.9 
#   F:pcmcia/vx/vxpocket.c:1.4->1.5 
#   F:ppc/powermac.c:1.17->1.18 
#   F:sparc/amd7930.c:1.10->1.11 
#   F:sparc/cs4231.c:1.14->1.15 
#   F:usb/usbaudio.c:1.103->1.104 
#   L:Clean up of obsolete MODULE_* stuff (other part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/drivers/mpu401/mpu401.c
#   2004/07/01 03:33:42+02:00 perex@suse.cz +0 -7
#   ALSA CVS update
#   D:2004/07/01 09:33:41
#   C:SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3,OPL4,L3 drivers
#   C:PARISC Harmony driver,Sound Core PDAudioCF driver
#   C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver
#   C:SPARC cs4231 driver,USB generic driver
#   F:arm/sa11xx-uda1341.c:1.16->1.17 
#   F:drivers/dummy.c:1.29->1.30 
#   F:drivers/mtpav.c:1.28->1.29 
#   F:drivers/serial-u16550.c:1.27->1.28 
#   F:drivers/virmidi.c:1.13->1.14 
#   F:drivers/mpu401/mpu401.c:1.18->1.19 
#   F:drivers/opl3/opl3_seq.c:1.14->1.15 
#   F:drivers/opl4/opl4_lib.c:1.6->1.7 
#   F:drivers/opl4/opl4_seq.c:1.5->1.6 
#   F:i2c/l3/uda1341.c:1.11->1.12 
#   F:parisc/harmony.c:1.13->1.14 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.8->1.9 
#   F:pcmcia/vx/vxpocket.c:1.4->1.5 
#   F:ppc/powermac.c:1.17->1.18 
#   F:sparc/amd7930.c:1.10->1.11 
#   F:sparc/cs4231.c:1.14->1.15 
#   F:usb/usbaudio.c:1.103->1.104 
#   L:Clean up of obsolete MODULE_* stuff (other part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/drivers/dummy.c
#   2004/07/01 03:33:42+02:00 perex@suse.cz +1 -8
#   ALSA CVS update
#   D:2004/07/01 09:33:41
#   C:SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3,OPL4,L3 drivers
#   C:PARISC Harmony driver,Sound Core PDAudioCF driver
#   C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver
#   C:SPARC cs4231 driver,USB generic driver
#   F:arm/sa11xx-uda1341.c:1.16->1.17 
#   F:drivers/dummy.c:1.29->1.30 
#   F:drivers/mtpav.c:1.28->1.29 
#   F:drivers/serial-u16550.c:1.27->1.28 
#   F:drivers/virmidi.c:1.13->1.14 
#   F:drivers/mpu401/mpu401.c:1.18->1.19 
#   F:drivers/opl3/opl3_seq.c:1.14->1.15 
#   F:drivers/opl4/opl4_lib.c:1.6->1.7 
#   F:drivers/opl4/opl4_seq.c:1.5->1.6 
#   F:i2c/l3/uda1341.c:1.11->1.12 
#   F:parisc/harmony.c:1.13->1.14 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.8->1.9 
#   F:pcmcia/vx/vxpocket.c:1.4->1.5 
#   F:ppc/powermac.c:1.17->1.18 
#   F:sparc/amd7930.c:1.10->1.11 
#   F:sparc/cs4231.c:1.14->1.15 
#   F:usb/usbaudio.c:1.103->1.104 
#   L:Clean up of obsolete MODULE_* stuff (other part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/arm/sa11xx-uda1341.c
#   2004/07/01 03:33:41+02:00 perex@suse.cz +2 -3
#   ALSA CVS update
#   D:2004/07/01 09:33:41
#   C:SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3,OPL4,L3 drivers
#   C:PARISC Harmony driver,Sound Core PDAudioCF driver
#   C:Digigram VX Pocket driver,PPC PowerMac driver,SPARC AMD7930 driver
#   C:SPARC cs4231 driver,USB generic driver
#   F:arm/sa11xx-uda1341.c:1.16->1.17 
#   F:drivers/dummy.c:1.29->1.30 
#   F:drivers/mtpav.c:1.28->1.29 
#   F:drivers/serial-u16550.c:1.27->1.28 
#   F:drivers/virmidi.c:1.13->1.14 
#   F:drivers/mpu401/mpu401.c:1.18->1.19 
#   F:drivers/opl3/opl3_seq.c:1.14->1.15 
#   F:drivers/opl4/opl4_lib.c:1.6->1.7 
#   F:drivers/opl4/opl4_seq.c:1.5->1.6 
#   F:i2c/l3/uda1341.c:1.11->1.12 
#   F:parisc/harmony.c:1.13->1.14 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.8->1.9 
#   F:pcmcia/vx/vxpocket.c:1.4->1.5 
#   F:ppc/powermac.c:1.17->1.18 
#   F:sparc/amd7930.c:1.10->1.11 
#   F:sparc/cs4231.c:1.14->1.15 
#   F:usb/usbaudio.c:1.103->1.104 
#   L:Clean up of obsolete MODULE_* stuff (other part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/01 19:35:33+02:00 perex@suse.cz 
#   ALSA CVS update
#   ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   Trident driver,Digigram VX222 driver,YMFPCI driver
#   Clean up of obsolete MODULE_* stuff (pci part)
#   
#   Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ymfpci/ymfpci.c
#   2004/07/01 03:30:29+02:00 perex@suse.cz +1 -9
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/vx222/vx222.c
#   2004/07/01 03:30:29+02:00 perex@suse.cz +1 -7
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/via82xx.c
#   2004/07/01 03:30:24+02:00 perex@suse.cz +1 -10
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/trident/trident.c
#   2004/07/01 03:30:28+02:00 perex@suse.cz +1 -7
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/sonicvibes.c
#   2004/07/01 03:30:23+02:00 perex@suse.cz +1 -8
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/rme9652/rme9652.c
#   2004/07/01 03:30:28+02:00 perex@suse.cz +1 -6
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/rme9652/hdsp.c
#   2004/07/01 03:30:27+02:00 perex@suse.cz +1 -7
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/rme96.c
#   2004/07/01 03:30:23+02:00 perex@suse.cz +1 -5
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/rme32.c
#   2004/07/01 03:30:22+02:00 perex@suse.cz +1 -5
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/nm256/nm256.c
#   2004/07/01 03:30:27+02:00 perex@suse.cz +1 -11
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/mixart/mixart.c
#   2004/07/01 03:30:26+02:00 perex@suse.cz +1 -5
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/maestro3.c
#   2004/07/01 03:30:22+02:00 perex@suse.cz +1 -7
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/korg1212/korg1212.c
#   2004/07/01 03:30:26+02:00 perex@suse.cz +1 -5
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/intel8x0m.c
#   2004/07/01 03:30:22+02:00 perex@suse.cz +1 -6
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/intel8x0.c
#   2004/07/01 03:30:22+02:00 perex@suse.cz +1 -9
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/ice1724.c
#   2004/07/01 03:30:26+02:00 perex@suse.cz +1 -5
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/ice1712.c
#   2004/07/01 03:30:26+02:00 perex@suse.cz +1 -7
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/ak4xxx.c
#   2004/07/01 03:30:25+02:00 perex@suse.cz +0 -1
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/fm801.c
#   2004/07/01 03:30:22+02:00 perex@suse.cz +1 -6
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/es1968.c
#   2004/07/01 03:30:22+02:00 perex@suse.cz +1 -12
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/es1938.c
#   2004/07/01 03:30:22+02:00 perex@suse.cz +1 -5
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ens1370.c
#   2004/07/01 03:30:21+02:00 perex@suse.cz +2 -8
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/emu10k1/emu10k1.c
#   2004/07/01 03:30:25+02:00 perex@suse.cz +1 -11
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/cs46xx/cs46xx.c
#   2004/07/01 03:30:25+02:00 perex@suse.cz +1 -8
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/cs4281.c
#   2004/07/01 03:30:21+02:00 perex@suse.cz +1 -6
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/cmipci.c
#   2004/07/01 03:30:21+02:00 perex@suse.cz +1 -8
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/bt87x.c
#   2004/07/01 03:30:21+02:00 perex@suse.cz +1 -6
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/azt3328.c
#   2004/07/01 03:30:21+02:00 perex@suse.cz +1 -6
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/au88x0/au88x0.c
#   2004/07/01 03:30:25+02:00 perex@suse.cz +1 -8
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/atiixp.c
#   2004/07/01 03:30:20+02:00 perex@suse.cz +1 -7
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/als4000.c
#   2004/07/01 03:30:20+02:00 perex@suse.cz +1 -6
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ali5451/ali5451.c
#   2004/07/01 03:30:24+02:00 perex@suse.cz +1 -7
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ac97/ac97_codec.c
#   2004/07/01 03:30:24+02:00 perex@suse.cz +0 -1
#   ALSA CVS update
#   D:2004/07/01 09:30:20
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.34->1.35 
#   F:pci/atiixp.c:1.12->1.13 
#   F:pci/azt3328.c:1.14->1.15 
#   F:pci/bt87x.c:1.6->1.7 
#   F:pci/cmipci.c:1.69->1.70 
#   F:pci/cs4281.c:1.56->1.57 
#   F:pci/ens1370.c:1.61->1.62 
#   F:pci/es1938.c:1.37->1.38 
#   F:pci/es1968.c:1.69->1.70 
#   F:pci/fm801.c:1.46->1.47 
#   F:pci/intel8x0.c:1.140->1.141 
#   F:pci/intel8x0m.c:1.6->1.7 
#   F:pci/maestro3.c:1.53->1.54 
#   F:pci/rme32.c:1.36->1.37 
#   F:pci/rme96.c:1.38->1.39 
#   F:pci/sonicvibes.c:1.36->1.37 
#   F:pci/via82xx.c:1.106->1.107 
#   F:pci/ac97/ac97_codec.c:1.137->1.138 
#   F:pci/ali5451/ali5451.c:1.49->1.50 
#   F:pci/au88x0/au88x0.c:1.10->1.11 
#   F:pci/cs46xx/cs46xx.c:1.27->1.28 
#   F:pci/emu10k1/emu10k1.c:1.25->1.26 
#   F:pci/ice1712/ak4xxx.c:1.8->1.9 
#   F:pci/ice1712/ice1712.c:1.54->1.55 
#   F:pci/ice1712/ice1724.c:1.36->1.37 
#   F:pci/korg1212/korg1212.c:1.41->1.42 
#   F:pci/mixart/mixart.c:1.11->1.12 
#   F:pci/nm256/nm256.c:1.41->1.42 
#   F:pci/rme9652/hdsp.c:1.60->1.61 
#   F:pci/rme9652/rme9652.c:1.47->1.48 
#   F:pci/trident/trident.c:1.24->1.25 
#   F:pci/vx222/vx222.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci.c:1.36->1.37 
#   L:Clean up of obsolete MODULE_* stuff (pci part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/01 19:35:06+02:00 perex@suse.cz 
#   ALSA CVS update
#   ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver,ES18xx driver
#   OPL3SA2 driver,Sound Galaxy driver,Sound Scape driver,AD1816A driver
#   AD1848 driver,CS4231 driver,CS4236+ driver,ES1688 driver
#   GUS Classic driver,GUS Extreme driver,GUS MAX driver
#   AMD InterWave driver,Opti9xx drivers,EMU8000 driver,ES968 driver
#   SB16/AWE driver,SB8 driver,SB drivers,Wavefront drivers
#   Clean up of obsolete MODULE_* stuff (isa part)
#   
#   Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/wavefront/wavefront.c
#   2004/07/01 03:29:30+02:00 perex@suse.cz +1 -16
#   ALSA CVS update
#   D:2004/07/01 09:29:29
#   C:ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver,ES18xx driver
#   C:OPL3SA2 driver,Sound Galaxy driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,ES1688 driver
#   C:GUS Classic driver,GUS Extreme driver,GUS MAX driver
#   C:AMD InterWave driver,Opti9xx drivers,EMU8000 driver,ES968 driver
#   C:SB16/AWE driver,SB8 driver,SB drivers,Wavefront drivers
#   F:isa/als100.c:1.26->1.27 
#   F:isa/azt2320.c:1.26->1.27 
#   F:isa/cmi8330.c:1.30->1.31 
#   F:isa/dt019x.c:1.20->1.21 
#   F:isa/es18xx.c:1.47->1.48 
#   F:isa/opl3sa2.c:1.36->1.37 
#   F:isa/sgalaxy.c:1.20->1.21 
#   F:isa/sscape.c:1.14->1.15 
#   F:isa/ad1816a/ad1816a.c:1.20->1.21 
#   F:isa/ad1848/ad1848.c:1.12->1.13 
#   F:isa/cs423x/cs4231.c:1.14->1.15 
#   F:isa/cs423x/cs4236.c:1.44->1.45 
#   F:isa/es1688/es1688.c:1.16->1.17 
#   F:isa/es1688/es1688_lib.c:1.25->1.26 
#   F:isa/gus/gusclassic.c:1.14->1.15 
#   F:isa/gus/gusextreme.c:1.16->1.17 
#   F:isa/gus/gusmax.c:1.15->1.16 
#   F:isa/gus/interwave.c:1.33->1.34 
#   F:isa/opti9xx/opti92x-ad1848.c:1.46->1.47 
#   F:isa/sb/emu8000_synth.c:1.7->1.8 
#   F:isa/sb/es968.c:1.26->1.27 
#   F:isa/sb/sb16.c:1.48->1.49 
#   F:isa/sb/sb16_csp.c:1.14->1.15 
#   F:isa/sb/sb8.c:1.20->1.21 
#   F:isa/sb/sb_common.c:1.20->1.21 
#   F:isa/wavefront/wavefront.c:1.29->1.30 
#   L:Clean up of obsolete MODULE_* stuff (isa part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/sscape.c
#   2004/07/01 03:29:29+02:00 perex@suse.cz +0 -6
#   ALSA CVS update
#   D:2004/07/01 09:29:29
#   C:ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver,ES18xx driver
#   C:OPL3SA2 driver,Sound Galaxy driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,ES1688 driver
#   C:GUS Classic driver,GUS Extreme driver,GUS MAX driver
#   C:AMD InterWave driver,Opti9xx drivers,EMU8000 driver,ES968 driver
#   C:SB16/AWE driver,SB8 driver,SB drivers,Wavefront drivers
#   F:isa/als100.c:1.26->1.27 
#   F:isa/azt2320.c:1.26->1.27 
#   F:isa/cmi8330.c:1.30->1.31 
#   F:isa/dt019x.c:1.20->1.21 
#   F:isa/es18xx.c:1.47->1.48 
#   F:isa/opl3sa2.c:1.36->1.37 
#   F:isa/sgalaxy.c:1.20->1.21 
#   F:isa/sscape.c:1.14->1.15 
#   F:isa/ad1816a/ad1816a.c:1.20->1.21 
#   F:isa/ad1848/ad1848.c:1.12->1.13 
#   F:isa/cs423x/cs4231.c:1.14->1.15 
#   F:isa/cs423x/cs4236.c:1.44->1.45 
#   F:isa/es1688/es1688.c:1.16->1.17 
#   F:isa/es1688/es1688_lib.c:1.25->1.26 
#   F:isa/gus/gusclassic.c:1.14->1.15 
#   F:isa/gus/gusextreme.c:1.16->1.17 
#   F:isa/gus/gusmax.c:1.15->1.16 
#   F:isa/gus/interwave.c:1.33->1.34 
#   F:isa/opti9xx/opti92x-ad1848.c:1.46->1.47 
#   F:isa/sb/emu8000_synth.c:1.7->1.8 
#   F:isa/sb/es968.c:1.26->1.27 
#   F:isa/sb/sb16.c:1.48->1.49 
#   F:isa/sb/sb16_csp.c:1.14->1.15 
#   F:isa/sb/sb8.c:1.20->1.21 
#   F:isa/sb/sb_common.c:1.20->1.21 
#   F:isa/wavefront/wavefront.c:1.29->1.30 
#   L:Clean up of obsolete MODULE_* stuff (isa part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/sgalaxy.c
#   2004/07/01 03:29:29+02:00 perex@suse.cz +1 -8
#   ALSA CVS update
#   D:2004/07/01 09:29:29
#   C:ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver,ES18xx driver
#   C:OPL3SA2 driver,Sound Galaxy driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,ES1688 driver
#   C:GUS Classic driver,GUS Extreme driver,GUS MAX driver
#   C:AMD InterWave driver,Opti9xx drivers,EMU8000 driver,ES968 driver
#   C:SB16/AWE driver,SB8 driver,SB drivers,Wavefront drivers
#   F:isa/als100.c:1.26->1.27 
#   F:isa/azt2320.c:1.26->1.27 
#   F:isa/cmi8330.c:1.30->1.31 
#   F:isa/dt019x.c:1.20->1.21 
#   F:isa/es18xx.c:1.47->1.48 
#   F:isa/opl3sa2.c:1.36->1.37 
#   F:isa/sgalaxy.c:1.20->1.21 
#   F:isa/sscape.c:1.14->1.15 
#   F:isa/ad1816a/ad1816a.c:1.20->1.21 
#   F:isa/ad1848/ad1848.c:1.12->1.13 
#   F:isa/cs423x/cs4231.c:1.14->1.15 
#   F:isa/cs423x/cs4236.c:1.44->1.45 
#   F:isa/es1688/es1688.c:1.16->1.17 
#   F:isa/es1688/es1688_lib.c:1.25->1.26 
#   F:isa/gus/gusclassic.c:1.14->1.15 
#   F:isa/gus/gusextreme.c:1.16->1.17 
#   F:isa/gus/gusmax.c:1.15->1.16 
#   F:isa/gus/interwave.c:1.33->1.34 
#   F:isa/opti9xx/opti92x-ad1848.c:1.46->1.47 
#   F:isa/sb/emu8000_synth.c:1.7->1.8 
#   F:isa/sb/es968.c:1.26->1.27 
#   F:isa/sb/sb16.c:1.48->1.49 
#   F:isa/sb/sb16_csp.c:1.14->1.15 
#   F:isa/sb/sb8.c:1.20->1.21 
#   F:isa/sb/sb_common.c:1.20->1.21 
#   F:isa/wavefront/wavefront.c:1.29->1.30 
#   L:Clean up of obsolete MODULE_* stuff (isa part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/sb/sb_common.c
#   2004/07/01 03:29:30+02:00 perex@suse.cz +0 -1
#   ALSA CVS update
#   D:2004/07/01 09:29:29
#   C:ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver,ES18xx driver
#   C:OPL3SA2 driver,Sound Galaxy driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,ES1688 driver
#   C:GUS Classic driver,GUS Extreme driver,GUS MAX driver
#   C:AMD InterWave driver,Opti9xx drivers,EMU8000 driver,ES968 driver
#   C:SB16/AWE driver,SB8 driver,SB drivers,Wavefront drivers
#   F:isa/als100.c:1.26->1.27 
#   F:isa/azt2320.c:1.26->1.27 
#   F:isa/cmi8330.c:1.30->1.31 
#   F:isa/dt019x.c:1.20->1.21 
#   F:isa/es18xx.c:1.47->1.48 
#   F:isa/opl3sa2.c:1.36->1.37 
#   F:isa/sgalaxy.c:1.20->1.21 
#   F:isa/sscape.c:1.14->1.15 
#   F:isa/ad1816a/ad1816a.c:1.20->1.21 
#   F:isa/ad1848/ad1848.c:1.12->1.13 
#   F:isa/cs423x/cs4231.c:1.14->1.15 
#   F:isa/cs423x/cs4236.c:1.44->1.45 
#   F:isa/es1688/es1688.c:1.16->1.17 
#   F:isa/es1688/es1688_lib.c:1.25->1.26 
#   F:isa/gus/gusclassic.c:1.14->1.15 
#   F:isa/gus/gusextreme.c:1.16->1.17 
#   F:isa/gus/gusmax.c:1.15->1.16 
#   F:isa/gus/interwave.c:1.33->1.34 
#   F:isa/opti9xx/opti92x-ad1848.c:1.46->1.47 
#   F:isa/sb/emu8000_synth.c:1.7->1.8 
#   F:isa/sb/es968.c:1.26->1.27 
#   F:isa/sb/sb16.c:1.48->1.49 
#   F:isa/sb/sb16_csp.c:1.14->1.15 
#   F:isa/sb/sb8.c:1.20->1.21 
#   F:isa/sb/sb_common.c:1.20->1.21 
#   F:isa/wavefront/wavefront.c:1.29->1.30 
#   L:Clean up of obsolete MODULE_* stuff (isa part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/sb/sb8.c
#   2004/07/01 03:29:30+02:00 perex@suse.cz +1 -8
#   ALSA CVS update
#   D:2004/07/01 09:29:29
#   C:ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver,ES18xx driver
#   C:OPL3SA2 driver,Sound Galaxy driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,ES1688 driver
#   C:GUS Classic driver,GUS Extreme driver,GUS MAX driver
#   C:AMD InterWave driver,Opti9xx drivers,EMU8000 driver,ES968 driver
#   C:SB16/AWE driver,SB8 driver,SB drivers,Wavefront drivers
#   F:isa/als100.c:1.26->1.27 
#   F:isa/azt2320.c:1.26->1.27 
#   F:isa/cmi8330.c:1.30->1.31 
#   F:isa/dt019x.c:1.20->1.21 
#   F:isa/es18xx.c:1.47->1.48 
#   F:isa/opl3sa2.c:1.36->1.37 
#   F:isa/sgalaxy.c:1.20->1.21 
#   F:isa/sscape.c:1.14->1.15 
#   F:isa/ad1816a/ad1816a.c:1.20->1.21 
#   F:isa/ad1848/ad1848.c:1.12->1.13 
#   F:isa/cs423x/cs4231.c:1.14->1.15 
#   F:isa/cs423x/cs4236.c:1.44->1.45 
#   F:isa/es1688/es1688.c:1.16->1.17 
#   F:isa/es1688/es1688_lib.c:1.25->1.26 
#   F:isa/gus/gusclassic.c:1.14->1.15 
#   F:isa/gus/gusextreme.c:1.16->1.17 
#   F:isa/gus/gusmax.c:1.15->1.16 
#   F:isa/gus/interwave.c:1.33->1.34 
#   F:isa/opti9xx/opti92x-ad1848.c:1.46->1.47 
#   F:isa/sb/emu8000_synth.c:1.7->1.8 
#   F:isa/sb/es968.c:1.26->1.27 
#   F:isa/sb/sb16.c:1.48->1.49 
#   F:isa/sb/sb16_csp.c:1.14->1.15 
#   F:isa/sb/sb8.c:1.20->1.21 
#   F:isa/sb/sb_common.c:1.20->1.21 
#   F:isa/wavefront/wavefront.c:1.29->1.30 
#   L:Clean up of obsolete MODULE_* stuff (isa part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/sb/sb16_csp.c
#   2004/07/01 03:29:30+02:00 perex@suse.cz +0 -1
#   ALSA CVS update
#   D:2004/07/01 09:29:29
#   C:ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver,ES18xx driver
#   C:OPL3SA2 driver,Sound Galaxy driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,ES1688 driver
#   C:GUS Classic driver,GUS Extreme driver,GUS MAX driver
#   C:AMD InterWave driver,Opti9xx drivers,EMU8000 driver,ES968 driver
#   C:SB16/AWE driver,SB8 driver,SB drivers,Wavefront drivers
#   F:isa/als100.c:1.26->1.27 
#   F:isa/azt2320.c:1.26->1.27 
#   F:isa/cmi8330.c:1.30->1.31 
#   F:isa/dt019x.c:1.20->1.21 
#   F:isa/es18xx.c:1.47->1.48 
#   F:isa/opl3sa2.c:1.36->1.37 
#   F:isa/sgalaxy.c:1.20->1.21 
#   F:isa/sscape.c:1.14->1.15 
#   F:isa/ad1816a/ad1816a.c:1.20->1.21 
#   F:isa/ad1848/ad1848.c:1.12->1.13 
#   F:isa/cs423x/cs4231.c:1.14->1.15 
#   F:isa/cs423x/cs4236.c:1.44->1.45 
#   F:isa/es1688/es1688.c:1.16->1.17 
#   F:isa/es1688/es1688_lib.c:1.25->1.26 
#   F:isa/gus/gusclassic.c:1.14->1.15 
#   F:isa/gus/gusextreme.c:1.16->1.17 
#   F:isa/gus/gusmax.c:1.15->1.16 
#   F:isa/gus/interwave.c:1.33->1.34 
#   F:isa/opti9xx/opti92x-ad1848.c:1.46->1.47 
#   F:isa/sb/emu8000_synth.c:1.7->1.8 
#   F:isa/sb/es968.c:1.26->1.27 
#   F:isa/sb/sb16.c:1.48->1.49 
#   F:isa/sb/sb16_csp.c:1.14->1.15 
#   F:isa/sb/sb8.c:1.20->1.21 
#   F:isa/sb/sb_common.c:1.20->1.21 
#   F:isa/wavefront/wavefront.c:1.29->1.30 
#   L:Clean up of obsolete MODULE_* stuff (isa part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/sb/sb16.c
#   2004/07/01 03:29:30+02:00 perex@suse.cz +2 -17
#   ALSA CVS update
#   D:2004/07/01 09:29:29
#   C:ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver,ES18xx driver
#   C:OPL3SA2 driver,Sound Galaxy driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,ES1688 driver
#   C:GUS Classic driver,GUS Extreme driver,GUS MAX driver
#   C:AMD InterWave driver,Opti9xx drivers,EMU8000 driver,ES968 driver
#   C:SB16/AWE driver,SB8 driver,SB drivers,Wavefront drivers
#   F:isa/als100.c:1.26->1.27 
#   F:isa/azt2320.c:1.26->1.27 
#   F:isa/cmi8330.c:1.30->1.31 
#   F:isa/dt019x.c:1.20->1.21 
#   F:isa/es18xx.c:1.47->1.48 
#   F:isa/opl3sa2.c:1.36->1.37 
#   F:isa/sgalaxy.c:1.20->1.21 
#   F:isa/sscape.c:1.14->1.15 
#   F:isa/ad1816a/ad1816a.c:1.20->1.21 
#   F:isa/ad1848/ad1848.c:1.12->1.13 
#   F:isa/cs423x/cs4231.c:1.14->1.15 
#   F:isa/cs423x/cs4236.c:1.44->1.45 
#   F:isa/es1688/es1688.c:1.16->1.17 
#   F:isa/es1688/es1688_lib.c:1.25->1.26 
#   F:isa/gus/gusclassic.c:1.14->1.15 
#   F:isa/gus/gusextreme.c:1.16->1.17 
#   F:isa/gus/gusmax.c:1.15->1.16 
#   F:isa/gus/interwave.c:1.33->1.34 
#   F:isa/opti9xx/opti92x-ad1848.c:1.46->1.47 
#   F:isa/sb/emu8000_synth.c:1.7->1.8 
#   F:isa/sb/es968.c:1.26->1.27 
#   F:isa/sb/sb16.c:1.48->1.49 
#   F:isa/sb/sb16_csp.c:1.14->1.15 
#   F:isa/sb/sb8.c:1.20->1.21 
#   F:isa/sb/sb_common.c:1.20->1.21 
#   F:isa/wavefront/wavefront.c:1.29->1.30 
#   L:Clean up of obsolete MODULE_* stuff (isa part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/sb/es968.c
#   2004/07/01 03:29:30+02:00 perex@suse.cz +1 -8
#   ALSA CVS update
#   D:2004/07/01 09:29:29
#   C:ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver,ES18xx driver
#   C:OPL3SA2 driver,Sound Galaxy driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,ES1688 driver
#   C:GUS Classic driver,GUS Extreme driver,GUS MAX driver
#   C:AMD InterWave driver,Opti9xx drivers,EMU8000 driver,ES968 driver
#   C:SB16/AWE driver,SB8 driver,SB drivers,Wavefront drivers
#   F:isa/als100.c:1.26->1.27 
#   F:isa/azt2320.c:1.26->1.27 
#   F:isa/cmi8330.c:1.30->1.31 
#   F:isa/dt019x.c:1.20->1.21 
#   F:isa/es18xx.c:1.47->1.48 
#   F:isa/opl3sa2.c:1.36->1.37 
#   F:isa/sgalaxy.c:1.20->1.21 
#   F:isa/sscape.c:1.14->1.15 
#   F:isa/ad1816a/ad1816a.c:1.20->1.21 
#   F:isa/ad1848/ad1848.c:1.12->1.13 
#   F:isa/cs423x/cs4231.c:1.14->1.15 
#   F:isa/cs423x/cs4236.c:1.44->1.45 
#   F:isa/es1688/es1688.c:1.16->1.17 
#   F:isa/es1688/es1688_lib.c:1.25->1.26 
#   F:isa/gus/gusclassic.c:1.14->1.15 
#   F:isa/gus/gusextreme.c:1.16->1.17 
#   F:isa/gus/gusmax.c:1.15->1.16 
#   F:isa/gus/interwave.c:1.33->1.34 
#   F:isa/opti9xx/opti92x-ad1848.c:1.46->1.47 
#   F:isa/sb/emu8000_synth.c:1.7->1.8 
#   F:isa/sb/es968.c:1.26->1.27 
#   F:isa/sb/sb16.c:1.48->1.49 
#   F:isa/sb/sb16_csp.c:1.14->1.15 
#   F:isa/sb/sb8.c:1.20->1.21 
#   F:isa/sb/sb_common.c:1.20->1.21 
#   F:isa/wavefront/wavefront.c:1.29->1.30 
#   L:Clean up of obsolete MODULE_* stuff (isa part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/sb/emu8000_synth.c
#   2004/07/01 03:29:30+02:00 perex@suse.cz +0 -1
#   ALSA CVS update
#   D:2004/07/01 09:29:29
#   C:ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver,ES18xx driver
#   C:OPL3SA2 driver,Sound Galaxy driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,ES1688 driver
#   C:GUS Classic driver,GUS Extreme driver,GUS MAX driver
#   C:AMD InterWave driver,Opti9xx drivers,EMU8000 driver,ES968 driver
#   C:SB16/AWE driver,SB8 driver,SB drivers,Wavefront drivers
#   F:isa/als100.c:1.26->1.27 
#   F:isa/azt2320.c:1.26->1.27 
#   F:isa/cmi8330.c:1.30->1.31 
#   F:isa/dt019x.c:1.20->1.21 
#   F:isa/es18xx.c:1.47->1.48 
#   F:isa/opl3sa2.c:1.36->1.37 
#   F:isa/sgalaxy.c:1.20->1.21 
#   F:isa/sscape.c:1.14->1.15 
#   F:isa/ad1816a/ad1816a.c:1.20->1.21 
#   F:isa/ad1848/ad1848.c:1.12->1.13 
#   F:isa/cs423x/cs4231.c:1.14->1.15 
#   F:isa/cs423x/cs4236.c:1.44->1.45 
#   F:isa/es1688/es1688.c:1.16->1.17 
#   F:isa/es1688/es1688_lib.c:1.25->1.26 
#   F:isa/gus/gusclassic.c:1.14->1.15 
#   F:isa/gus/gusextreme.c:1.16->1.17 
#   F:isa/gus/gusmax.c:1.15->1.16 
#   F:isa/gus/interwave.c:1.33->1.34 
#   F:isa/opti9xx/opti92x-ad1848.c:1.46->1.47 
#   F:isa/sb/emu8000_synth.c:1.7->1.8 
#   F:isa/sb/es968.c:1.26->1.27 
#   F:isa/sb/sb16.c:1.48->1.49 
#   F:isa/sb/sb16_csp.c:1.14->1.15 
#   F:isa/sb/sb8.c:1.20->1.21 
#   F:isa/sb/sb_common.c:1.20->1.21 
#   F:isa/wavefront/wavefront.c:1.29->1.30 
#   L:Clean up of obsolete MODULE_* stuff (isa part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/opti9xx/opti92x-ad1848.c
#   2004/07/01 03:29:30+02:00 perex@suse.cz +3 -15
#   ALSA CVS update
#   D:2004/07/01 09:29:29
#   C:ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver,ES18xx driver
#   C:OPL3SA2 driver,Sound Galaxy driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,ES1688 driver
#   C:GUS Classic driver,GUS Extreme driver,GUS MAX driver
#   C:AMD InterWave driver,Opti9xx drivers,EMU8000 driver,ES968 driver
#   C:SB16/AWE driver,SB8 driver,SB drivers,Wavefront drivers
#   F:isa/als100.c:1.26->1.27 
#   F:isa/azt2320.c:1.26->1.27 
#   F:isa/cmi8330.c:1.30->1.31 
#   F:isa/dt019x.c:1.20->1.21 
#   F:isa/es18xx.c:1.47->1.48 
#   F:isa/opl3sa2.c:1.36->1.37 
#   F:isa/sgalaxy.c:1.20->1.21 
#   F:isa/sscape.c:1.14->1.15 
#   F:isa/ad1816a/ad1816a.c:1.20->1.21 
#   F:isa/ad1848/ad1848.c:1.12->1.13 
#   F:isa/cs423x/cs4231.c:1.14->1.15 
#   F:isa/cs423x/cs4236.c:1.44->1.45 
#   F:isa/es1688/es1688.c:1.16->1.17 
#   F:isa/es1688/es1688_lib.c:1.25->1.26 
#   F:isa/gus/gusclassic.c:1.14->1.15 
#   F:isa/gus/gusextreme.c:1.16->1.17 
#   F:isa/gus/gusmax.c:1.15->1.16 
#   F:isa/gus/interwave.c:1.33->1.34 
#   F:isa/opti9xx/opti92x-ad1848.c:1.46->1.47 
#   F:isa/sb/emu8000_synth.c:1.7->1.8 
#   F:isa/sb/es968.c:1.26->1.27 
#   F:isa/sb/sb16.c:1.48->1.49 
#   F:isa/sb/sb16_csp.c:1.14->1.15 
#   F:isa/sb/sb8.c:1.20->1.21 
#   F:isa/sb/sb_common.c:1.20->1.21 
#   F:isa/wavefront/wavefront.c:1.29->1.30 
#   L:Clean up of obsolete MODULE_* stuff (isa part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/opl3sa2.c
#   2004/07/01 03:29:29+02:00 perex@suse.cz +1 -15
#   ALSA CVS update
#   D:2004/07/01 09:29:29
#   C:ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver,ES18xx driver
#   C:OPL3SA2 driver,Sound Galaxy driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,ES1688 driver
#   C:GUS Classic driver,GUS Extreme driver,GUS MAX driver
#   C:AMD InterWave driver,Opti9xx drivers,EMU8000 driver,ES968 driver
#   C:SB16/AWE driver,SB8 driver,SB drivers,Wavefront drivers
#   F:isa/als100.c:1.26->1.27 
#   F:isa/azt2320.c:1.26->1.27 
#   F:isa/cmi8330.c:1.30->1.31 
#   F:isa/dt019x.c:1.20->1.21 
#   F:isa/es18xx.c:1.47->1.48 
#   F:isa/opl3sa2.c:1.36->1.37 
#   F:isa/sgalaxy.c:1.20->1.21 
#   F:isa/sscape.c:1.14->1.15 
#   F:isa/ad1816a/ad1816a.c:1.20->1.21 
#   F:isa/ad1848/ad1848.c:1.12->1.13 
#   F:isa/cs423x/cs4231.c:1.14->1.15 
#   F:isa/cs423x/cs4236.c:1.44->1.45 
#   F:isa/es1688/es1688.c:1.16->1.17 
#   F:isa/es1688/es1688_lib.c:1.25->1.26 
#   F:isa/gus/gusclassic.c:1.14->1.15 
#   F:isa/gus/gusextreme.c:1.16->1.17 
#   F:isa/gus/gusmax.c:1.15->1.16 
#   F:isa/gus/interwave.c:1.33->1.34 
#   F:isa/opti9xx/opti92x-ad1848.c:1.46->1.47 
#   F:isa/sb/emu8000_synth.c:1.7->1.8 
#   F:isa/sb/es968.c:1.26->1.27 
#   F:isa/sb/sb16.c:1.48->1.49 
#   F:isa/sb/sb16_csp.c:1.14->1.15 
#   F:isa/sb/sb8.c:1.20->1.21 
#   F:isa/sb/sb_common.c:1.20->1.21 
#   F:isa/wavefront/wavefront.c:1.29->1.30 
#   L:Clean up of obsolete MODULE_* stuff (isa part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/gus/interwave.c
#   2004/07/01 03:29:30+02:00 perex@suse.cz +2 -16
#   ALSA CVS update
#   D:2004/07/01 09:29:29
#   C:ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver,ES18xx driver
#   C:OPL3SA2 driver,Sound Galaxy driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,ES1688 driver
#   C:GUS Classic driver,GUS Extreme driver,GUS MAX driver
#   C:AMD InterWave driver,Opti9xx drivers,EMU8000 driver,ES968 driver
#   C:SB16/AWE driver,SB8 driver,SB drivers,Wavefront drivers
#   F:isa/als100.c:1.26->1.27 
#   F:isa/azt2320.c:1.26->1.27 
#   F:isa/cmi8330.c:1.30->1.31 
#   F:isa/dt019x.c:1.20->1.21 
#   F:isa/es18xx.c:1.47->1.48 
#   F:isa/opl3sa2.c:1.36->1.37 
#   F:isa/sgalaxy.c:1.20->1.21 
#   F:isa/sscape.c:1.14->1.15 
#   F:isa/ad1816a/ad1816a.c:1.20->1.21 
#   F:isa/ad1848/ad1848.c:1.12->1.13 
#   F:isa/cs423x/cs4231.c:1.14->1.15 
#   F:isa/cs423x/cs4236.c:1.44->1.45 
#   F:isa/es1688/es1688.c:1.16->1.17 
#   F:isa/es1688/es1688_lib.c:1.25->1.26 
#   F:isa/gus/gusclassic.c:1.14->1.15 
#   F:isa/gus/gusextreme.c:1.16->1.17 
#   F:isa/gus/gusmax.c:1.15->1.16 
#   F:isa/gus/interwave.c:1.33->1.34 
#   F:isa/opti9xx/opti92x-ad1848.c:1.46->1.47 
#   F:isa/sb/emu8000_synth.c:1.7->1.8 
#   F:isa/sb/es968.c:1.26->1.27 
#   F:isa/sb/sb16.c:1.48->1.49 
#   F:isa/sb/sb16_csp.c:1.14->1.15 
#   F:isa/sb/sb8.c:1.20->1.21 
#   F:isa/sb/sb_common.c:1.20->1.21 
#   F:isa/wavefront/wavefront.c:1.29->1.30 
#   L:Clean up of obsolete MODULE_* stuff (isa part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/gus/gusmax.c
#   2004/07/01 03:29:30+02:00 perex@suse.cz +1 -12
#   ALSA CVS update
#   D:2004/07/01 09:29:29
#   C:ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver,ES18xx driver
#   C:OPL3SA2 driver,Sound Galaxy driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,ES1688 driver
#   C:GUS Classic driver,GUS Extreme driver,GUS MAX driver
#   C:AMD InterWave driver,Opti9xx drivers,EMU8000 driver,ES968 driver
#   C:SB16/AWE driver,SB8 driver,SB drivers,Wavefront drivers
#   F:isa/als100.c:1.26->1.27 
#   F:isa/azt2320.c:1.26->1.27 
#   F:isa/cmi8330.c:1.30->1.31 
#   F:isa/dt019x.c:1.20->1.21 
#   F:isa/es18xx.c:1.47->1.48 
#   F:isa/opl3sa2.c:1.36->1.37 
#   F:isa/sgalaxy.c:1.20->1.21 
#   F:isa/sscape.c:1.14->1.15 
#   F:isa/ad1816a/ad1816a.c:1.20->1.21 
#   F:isa/ad1848/ad1848.c:1.12->1.13 
#   F:isa/cs423x/cs4231.c:1.14->1.15 
#   F:isa/cs423x/cs4236.c:1.44->1.45 
#   F:isa/es1688/es1688.c:1.16->1.17 
#   F:isa/es1688/es1688_lib.c:1.25->1.26 
#   F:isa/gus/gusclassic.c:1.14->1.15 
#   F:isa/gus/gusextreme.c:1.16->1.17 
#   F:isa/gus/gusmax.c:1.15->1.16 
#   F:isa/gus/interwave.c:1.33->1.34 
#   F:isa/opti9xx/opti92x-ad1848.c:1.46->1.47 
#   F:isa/sb/emu8000_synth.c:1.7->1.8 
#   F:isa/sb/es968.c:1.26->1.27 
#   F:isa/sb/sb16.c:1.48->1.49 
#   F:isa/sb/sb16_csp.c:1.14->1.15 
#   F:isa/sb/sb8.c:1.20->1.21 
#   F:isa/sb/sb_common.c:1.20->1.21 
#   F:isa/wavefront/wavefront.c:1.29->1.30 
#   L:Clean up of obsolete MODULE_* stuff (isa part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/gus/gusextreme.c
#   2004/07/01 03:29:30+02:00 perex@suse.cz +1 -16
#   ALSA CVS update
#   D:2004/07/01 09:29:29
#   C:ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver,ES18xx driver
#   C:OPL3SA2 driver,Sound Galaxy driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,ES1688 driver
#   C:GUS Classic driver,GUS Extreme driver,GUS MAX driver
#   C:AMD InterWave driver,Opti9xx drivers,EMU8000 driver,ES968 driver
#   C:SB16/AWE driver,SB8 driver,SB drivers,Wavefront drivers
#   F:isa/als100.c:1.26->1.27 
#   F:isa/azt2320.c:1.26->1.27 
#   F:isa/cmi8330.c:1.30->1.31 
#   F:isa/dt019x.c:1.20->1.21 
#   F:isa/es18xx.c:1.47->1.48 
#   F:isa/opl3sa2.c:1.36->1.37 
#   F:isa/sgalaxy.c:1.20->1.21 
#   F:isa/sscape.c:1.14->1.15 
#   F:isa/ad1816a/ad1816a.c:1.20->1.21 
#   F:isa/ad1848/ad1848.c:1.12->1.13 
#   F:isa/cs423x/cs4231.c:1.14->1.15 
#   F:isa/cs423x/cs4236.c:1.44->1.45 
#   F:isa/es1688/es1688.c:1.16->1.17 
#   F:isa/es1688/es1688_lib.c:1.25->1.26 
#   F:isa/gus/gusclassic.c:1.14->1.15 
#   F:isa/gus/gusextreme.c:1.16->1.17 
#   F:isa/gus/gusmax.c:1.15->1.16 
#   F:isa/gus/interwave.c:1.33->1.34 
#   F:isa/opti9xx/opti92x-ad1848.c:1.46->1.47 
#   F:isa/sb/emu8000_synth.c:1.7->1.8 
#   F:isa/sb/es968.c:1.26->1.27 
#   F:isa/sb/sb16.c:1.48->1.49 
#   F:isa/sb/sb16_csp.c:1.14->1.15 
#   F:isa/sb/sb8.c:1.20->1.21 
#   F:isa/sb/sb_common.c:1.20->1.21 
#   F:isa/wavefront/wavefront.c:1.29->1.30 
#   L:Clean up of obsolete MODULE_* stuff (isa part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/gus/gusclassic.c
#   2004/07/01 03:29:30+02:00 perex@suse.cz +1 -12
#   ALSA CVS update
#   D:2004/07/01 09:29:29
#   C:ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver,ES18xx driver
#   C:OPL3SA2 driver,Sound Galaxy driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,ES1688 driver
#   C:GUS Classic driver,GUS Extreme driver,GUS MAX driver
#   C:AMD InterWave driver,Opti9xx drivers,EMU8000 driver,ES968 driver
#   C:SB16/AWE driver,SB8 driver,SB drivers,Wavefront drivers
#   F:isa/als100.c:1.26->1.27 
#   F:isa/azt2320.c:1.26->1.27 
#   F:isa/cmi8330.c:1.30->1.31 
#   F:isa/dt019x.c:1.20->1.21 
#   F:isa/es18xx.c:1.47->1.48 
#   F:isa/opl3sa2.c:1.36->1.37 
#   F:isa/sgalaxy.c:1.20->1.21 
#   F:isa/sscape.c:1.14->1.15 
#   F:isa/ad1816a/ad1816a.c:1.20->1.21 
#   F:isa/ad1848/ad1848.c:1.12->1.13 
#   F:isa/cs423x/cs4231.c:1.14->1.15 
#   F:isa/cs423x/cs4236.c:1.44->1.45 
#   F:isa/es1688/es1688.c:1.16->1.17 
#   F:isa/es1688/es1688_lib.c:1.25->1.26 
#   F:isa/gus/gusclassic.c:1.14->1.15 
#   F:isa/gus/gusextreme.c:1.16->1.17 
#   F:isa/gus/gusmax.c:1.15->1.16 
#   F:isa/gus/interwave.c:1.33->1.34 
#   F:isa/opti9xx/opti92x-ad1848.c:1.46->1.47 
#   F:isa/sb/emu8000_synth.c:1.7->1.8 
#   F:isa/sb/es968.c:1.26->1.27 
#   F:isa/sb/sb16.c:1.48->1.49 
#   F:isa/sb/sb16_csp.c:1.14->1.15 
#   F:isa/sb/sb8.c:1.20->1.21 
#   F:isa/sb/sb_common.c:1.20->1.21 
#   F:isa/wavefront/wavefront.c:1.29->1.30 
#   L:Clean up of obsolete MODULE_* stuff (isa part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/es18xx.c
#   2004/07/01 03:29:29+02:00 perex@suse.cz +1 -12
#   ALSA CVS update
#   D:2004/07/01 09:29:29
#   C:ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver,ES18xx driver
#   C:OPL3SA2 driver,Sound Galaxy driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,ES1688 driver
#   C:GUS Classic driver,GUS Extreme driver,GUS MAX driver
#   C:AMD InterWave driver,Opti9xx drivers,EMU8000 driver,ES968 driver
#   C:SB16/AWE driver,SB8 driver,SB drivers,Wavefront drivers
#   F:isa/als100.c:1.26->1.27 
#   F:isa/azt2320.c:1.26->1.27 
#   F:isa/cmi8330.c:1.30->1.31 
#   F:isa/dt019x.c:1.20->1.21 
#   F:isa/es18xx.c:1.47->1.48 
#   F:isa/opl3sa2.c:1.36->1.37 
#   F:isa/sgalaxy.c:1.20->1.21 
#   F:isa/sscape.c:1.14->1.15 
#   F:isa/ad1816a/ad1816a.c:1.20->1.21 
#   F:isa/ad1848/ad1848.c:1.12->1.13 
#   F:isa/cs423x/cs4231.c:1.14->1.15 
#   F:isa/cs423x/cs4236.c:1.44->1.45 
#   F:isa/es1688/es1688.c:1.16->1.17 
#   F:isa/es1688/es1688_lib.c:1.25->1.26 
#   F:isa/gus/gusclassic.c:1.14->1.15 
#   F:isa/gus/gusextreme.c:1.16->1.17 
#   F:isa/gus/gusmax.c:1.15->1.16 
#   F:isa/gus/interwave.c:1.33->1.34 
#   F:isa/opti9xx/opti92x-ad1848.c:1.46->1.47 
#   F:isa/sb/emu8000_synth.c:1.7->1.8 
#   F:isa/sb/es968.c:1.26->1.27 
#   F:isa/sb/sb16.c:1.48->1.49 
#   F:isa/sb/sb16_csp.c:1.14->1.15 
#   F:isa/sb/sb8.c:1.20->1.21 
#   F:isa/sb/sb_common.c:1.20->1.21 
#   F:isa/wavefront/wavefront.c:1.29->1.30 
#   L:Clean up of obsolete MODULE_* stuff (isa part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/es1688/es1688_lib.c
#   2004/07/01 03:29:30+02:00 perex@suse.cz +0 -1
#   ALSA CVS update
#   D:2004/07/01 09:29:29
#   C:ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver,ES18xx driver
#   C:OPL3SA2 driver,Sound Galaxy driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,ES1688 driver
#   C:GUS Classic driver,GUS Extreme driver,GUS MAX driver
#   C:AMD InterWave driver,Opti9xx drivers,EMU8000 driver,ES968 driver
#   C:SB16/AWE driver,SB8 driver,SB drivers,Wavefront drivers
#   F:isa/als100.c:1.26->1.27 
#   F:isa/azt2320.c:1.26->1.27 
#   F:isa/cmi8330.c:1.30->1.31 
#   F:isa/dt019x.c:1.20->1.21 
#   F:isa/es18xx.c:1.47->1.48 
#   F:isa/opl3sa2.c:1.36->1.37 
#   F:isa/sgalaxy.c:1.20->1.21 
#   F:isa/sscape.c:1.14->1.15 
#   F:isa/ad1816a/ad1816a.c:1.20->1.21 
#   F:isa/ad1848/ad1848.c:1.12->1.13 
#   F:isa/cs423x/cs4231.c:1.14->1.15 
#   F:isa/cs423x/cs4236.c:1.44->1.45 
#   F:isa/es1688/es1688.c:1.16->1.17 
#   F:isa/es1688/es1688_lib.c:1.25->1.26 
#   F:isa/gus/gusclassic.c:1.14->1.15 
#   F:isa/gus/gusextreme.c:1.16->1.17 
#   F:isa/gus/gusmax.c:1.15->1.16 
#   F:isa/gus/interwave.c:1.33->1.34 
#   F:isa/opti9xx/opti92x-ad1848.c:1.46->1.47 
#   F:isa/sb/emu8000_synth.c:1.7->1.8 
#   F:isa/sb/es968.c:1.26->1.27 
#   F:isa/sb/sb16.c:1.48->1.49 
#   F:isa/sb/sb16_csp.c:1.14->1.15 
#   F:isa/sb/sb8.c:1.20->1.21 
#   F:isa/sb/sb_common.c:1.20->1.21 
#   F:isa/wavefront/wavefront.c:1.29->1.30 
#   L:Clean up of obsolete MODULE_* stuff (isa part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/es1688/es1688.c
#   2004/07/01 03:29:30+02:00 perex@suse.cz +1 -10
#   ALSA CVS update
#   D:2004/07/01 09:29:29
#   C:ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver,ES18xx driver
#   C:OPL3SA2 driver,Sound Galaxy driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,ES1688 driver
#   C:GUS Classic driver,GUS Extreme driver,GUS MAX driver
#   C:AMD InterWave driver,Opti9xx drivers,EMU8000 driver,ES968 driver
#   C:SB16/AWE driver,SB8 driver,SB drivers,Wavefront drivers
#   F:isa/als100.c:1.26->1.27 
#   F:isa/azt2320.c:1.26->1.27 
#   F:isa/cmi8330.c:1.30->1.31 
#   F:isa/dt019x.c:1.20->1.21 
#   F:isa/es18xx.c:1.47->1.48 
#   F:isa/opl3sa2.c:1.36->1.37 
#   F:isa/sgalaxy.c:1.20->1.21 
#   F:isa/sscape.c:1.14->1.15 
#   F:isa/ad1816a/ad1816a.c:1.20->1.21 
#   F:isa/ad1848/ad1848.c:1.12->1.13 
#   F:isa/cs423x/cs4231.c:1.14->1.15 
#   F:isa/cs423x/cs4236.c:1.44->1.45 
#   F:isa/es1688/es1688.c:1.16->1.17 
#   F:isa/es1688/es1688_lib.c:1.25->1.26 
#   F:isa/gus/gusclassic.c:1.14->1.15 
#   F:isa/gus/gusextreme.c:1.16->1.17 
#   F:isa/gus/gusmax.c:1.15->1.16 
#   F:isa/gus/interwave.c:1.33->1.34 
#   F:isa/opti9xx/opti92x-ad1848.c:1.46->1.47 
#   F:isa/sb/emu8000_synth.c:1.7->1.8 
#   F:isa/sb/es968.c:1.26->1.27 
#   F:isa/sb/sb16.c:1.48->1.49 
#   F:isa/sb/sb16_csp.c:1.14->1.15 
#   F:isa/sb/sb8.c:1.20->1.21 
#   F:isa/sb/sb_common.c:1.20->1.21 
#   F:isa/wavefront/wavefront.c:1.29->1.30 
#   L:Clean up of obsolete MODULE_* stuff (isa part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/dt019x.c
#   2004/07/01 03:29:29+02:00 perex@suse.cz +1 -11
#   ALSA CVS update
#   D:2004/07/01 09:29:29
#   C:ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver,ES18xx driver
#   C:OPL3SA2 driver,Sound Galaxy driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,ES1688 driver
#   C:GUS Classic driver,GUS Extreme driver,GUS MAX driver
#   C:AMD InterWave driver,Opti9xx drivers,EMU8000 driver,ES968 driver
#   C:SB16/AWE driver,SB8 driver,SB drivers,Wavefront drivers
#   F:isa/als100.c:1.26->1.27 
#   F:isa/azt2320.c:1.26->1.27 
#   F:isa/cmi8330.c:1.30->1.31 
#   F:isa/dt019x.c:1.20->1.21 
#   F:isa/es18xx.c:1.47->1.48 
#   F:isa/opl3sa2.c:1.36->1.37 
#   F:isa/sgalaxy.c:1.20->1.21 
#   F:isa/sscape.c:1.14->1.15 
#   F:isa/ad1816a/ad1816a.c:1.20->1.21 
#   F:isa/ad1848/ad1848.c:1.12->1.13 
#   F:isa/cs423x/cs4231.c:1.14->1.15 
#   F:isa/cs423x/cs4236.c:1.44->1.45 
#   F:isa/es1688/es1688.c:1.16->1.17 
#   F:isa/es1688/es1688_lib.c:1.25->1.26 
#   F:isa/gus/gusclassic.c:1.14->1.15 
#   F:isa/gus/gusextreme.c:1.16->1.17 
#   F:isa/gus/gusmax.c:1.15->1.16 
#   F:isa/gus/interwave.c:1.33->1.34 
#   F:isa/opti9xx/opti92x-ad1848.c:1.46->1.47 
#   F:isa/sb/emu8000_synth.c:1.7->1.8 
#   F:isa/sb/es968.c:1.26->1.27 
#   F:isa/sb/sb16.c:1.48->1.49 
#   F:isa/sb/sb16_csp.c:1.14->1.15 
#   F:isa/sb/sb8.c:1.20->1.21 
#   F:isa/sb/sb_common.c:1.20->1.21 
#   F:isa/wavefront/wavefront.c:1.29->1.30 
#   L:Clean up of obsolete MODULE_* stuff (isa part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/cs423x/cs4236.c
#   2004/07/01 03:29:29+02:00 perex@suse.cz +2 -16
#   ALSA CVS update
#   D:2004/07/01 09:29:29
#   C:ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver,ES18xx driver
#   C:OPL3SA2 driver,Sound Galaxy driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,ES1688 driver
#   C:GUS Classic driver,GUS Extreme driver,GUS MAX driver
#   C:AMD InterWave driver,Opti9xx drivers,EMU8000 driver,ES968 driver
#   C:SB16/AWE driver,SB8 driver,SB drivers,Wavefront drivers
#   F:isa/als100.c:1.26->1.27 
#   F:isa/azt2320.c:1.26->1.27 
#   F:isa/cmi8330.c:1.30->1.31 
#   F:isa/dt019x.c:1.20->1.21 
#   F:isa/es18xx.c:1.47->1.48 
#   F:isa/opl3sa2.c:1.36->1.37 
#   F:isa/sgalaxy.c:1.20->1.21 
#   F:isa/sscape.c:1.14->1.15 
#   F:isa/ad1816a/ad1816a.c:1.20->1.21 
#   F:isa/ad1848/ad1848.c:1.12->1.13 
#   F:isa/cs423x/cs4231.c:1.14->1.15 
#   F:isa/cs423x/cs4236.c:1.44->1.45 
#   F:isa/es1688/es1688.c:1.16->1.17 
#   F:isa/es1688/es1688_lib.c:1.25->1.26 
#   F:isa/gus/gusclassic.c:1.14->1.15 
#   F:isa/gus/gusextreme.c:1.16->1.17 
#   F:isa/gus/gusmax.c:1.15->1.16 
#   F:isa/gus/interwave.c:1.33->1.34 
#   F:isa/opti9xx/opti92x-ad1848.c:1.46->1.47 
#   F:isa/sb/emu8000_synth.c:1.7->1.8 
#   F:isa/sb/es968.c:1.26->1.27 
#   F:isa/sb/sb16.c:1.48->1.49 
#   F:isa/sb/sb16_csp.c:1.14->1.15 
#   F:isa/sb/sb8.c:1.20->1.21 
#   F:isa/sb/sb_common.c:1.20->1.21 
#   F:isa/wavefront/wavefront.c:1.29->1.30 
#   L:Clean up of obsolete MODULE_* stuff (isa part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/cs423x/cs4231.c
#   2004/07/01 03:29:29+02:00 perex@suse.cz +1 -11
#   ALSA CVS update
#   D:2004/07/01 09:29:29
#   C:ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver,ES18xx driver
#   C:OPL3SA2 driver,Sound Galaxy driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,ES1688 driver
#   C:GUS Classic driver,GUS Extreme driver,GUS MAX driver
#   C:AMD InterWave driver,Opti9xx drivers,EMU8000 driver,ES968 driver
#   C:SB16/AWE driver,SB8 driver,SB drivers,Wavefront drivers
#   F:isa/als100.c:1.26->1.27 
#   F:isa/azt2320.c:1.26->1.27 
#   F:isa/cmi8330.c:1.30->1.31 
#   F:isa/dt019x.c:1.20->1.21 
#   F:isa/es18xx.c:1.47->1.48 
#   F:isa/opl3sa2.c:1.36->1.37 
#   F:isa/sgalaxy.c:1.20->1.21 
#   F:isa/sscape.c:1.14->1.15 
#   F:isa/ad1816a/ad1816a.c:1.20->1.21 
#   F:isa/ad1848/ad1848.c:1.12->1.13 
#   F:isa/cs423x/cs4231.c:1.14->1.15 
#   F:isa/cs423x/cs4236.c:1.44->1.45 
#   F:isa/es1688/es1688.c:1.16->1.17 
#   F:isa/es1688/es1688_lib.c:1.25->1.26 
#   F:isa/gus/gusclassic.c:1.14->1.15 
#   F:isa/gus/gusextreme.c:1.16->1.17 
#   F:isa/gus/gusmax.c:1.15->1.16 
#   F:isa/gus/interwave.c:1.33->1.34 
#   F:isa/opti9xx/opti92x-ad1848.c:1.46->1.47 
#   F:isa/sb/emu8000_synth.c:1.7->1.8 
#   F:isa/sb/es968.c:1.26->1.27 
#   F:isa/sb/sb16.c:1.48->1.49 
#   F:isa/sb/sb16_csp.c:1.14->1.15 
#   F:isa/sb/sb8.c:1.20->1.21 
#   F:isa/sb/sb_common.c:1.20->1.21 
#   F:isa/wavefront/wavefront.c:1.29->1.30 
#   L:Clean up of obsolete MODULE_* stuff (isa part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/cmi8330.c
#   2004/07/01 03:29:29+02:00 perex@suse.cz +1 -13
#   ALSA CVS update
#   D:2004/07/01 09:29:29
#   C:ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver,ES18xx driver
#   C:OPL3SA2 driver,Sound Galaxy driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,ES1688 driver
#   C:GUS Classic driver,GUS Extreme driver,GUS MAX driver
#   C:AMD InterWave driver,Opti9xx drivers,EMU8000 driver,ES968 driver
#   C:SB16/AWE driver,SB8 driver,SB drivers,Wavefront drivers
#   F:isa/als100.c:1.26->1.27 
#   F:isa/azt2320.c:1.26->1.27 
#   F:isa/cmi8330.c:1.30->1.31 
#   F:isa/dt019x.c:1.20->1.21 
#   F:isa/es18xx.c:1.47->1.48 
#   F:isa/opl3sa2.c:1.36->1.37 
#   F:isa/sgalaxy.c:1.20->1.21 
#   F:isa/sscape.c:1.14->1.15 
#   F:isa/ad1816a/ad1816a.c:1.20->1.21 
#   F:isa/ad1848/ad1848.c:1.12->1.13 
#   F:isa/cs423x/cs4231.c:1.14->1.15 
#   F:isa/cs423x/cs4236.c:1.44->1.45 
#   F:isa/es1688/es1688.c:1.16->1.17 
#   F:isa/es1688/es1688_lib.c:1.25->1.26 
#   F:isa/gus/gusclassic.c:1.14->1.15 
#   F:isa/gus/gusextreme.c:1.16->1.17 
#   F:isa/gus/gusmax.c:1.15->1.16 
#   F:isa/gus/interwave.c:1.33->1.34 
#   F:isa/opti9xx/opti92x-ad1848.c:1.46->1.47 
#   F:isa/sb/emu8000_synth.c:1.7->1.8 
#   F:isa/sb/es968.c:1.26->1.27 
#   F:isa/sb/sb16.c:1.48->1.49 
#   F:isa/sb/sb16_csp.c:1.14->1.15 
#   F:isa/sb/sb8.c:1.20->1.21 
#   F:isa/sb/sb_common.c:1.20->1.21 
#   F:isa/wavefront/wavefront.c:1.29->1.30 
#   L:Clean up of obsolete MODULE_* stuff (isa part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/azt2320.c
#   2004/07/01 03:29:29+02:00 perex@suse.cz +1 -13
#   ALSA CVS update
#   D:2004/07/01 09:29:29
#   C:ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver,ES18xx driver
#   C:OPL3SA2 driver,Sound Galaxy driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,ES1688 driver
#   C:GUS Classic driver,GUS Extreme driver,GUS MAX driver
#   C:AMD InterWave driver,Opti9xx drivers,EMU8000 driver,ES968 driver
#   C:SB16/AWE driver,SB8 driver,SB drivers,Wavefront drivers
#   F:isa/als100.c:1.26->1.27 
#   F:isa/azt2320.c:1.26->1.27 
#   F:isa/cmi8330.c:1.30->1.31 
#   F:isa/dt019x.c:1.20->1.21 
#   F:isa/es18xx.c:1.47->1.48 
#   F:isa/opl3sa2.c:1.36->1.37 
#   F:isa/sgalaxy.c:1.20->1.21 
#   F:isa/sscape.c:1.14->1.15 
#   F:isa/ad1816a/ad1816a.c:1.20->1.21 
#   F:isa/ad1848/ad1848.c:1.12->1.13 
#   F:isa/cs423x/cs4231.c:1.14->1.15 
#   F:isa/cs423x/cs4236.c:1.44->1.45 
#   F:isa/es1688/es1688.c:1.16->1.17 
#   F:isa/es1688/es1688_lib.c:1.25->1.26 
#   F:isa/gus/gusclassic.c:1.14->1.15 
#   F:isa/gus/gusextreme.c:1.16->1.17 
#   F:isa/gus/gusmax.c:1.15->1.16 
#   F:isa/gus/interwave.c:1.33->1.34 
#   F:isa/opti9xx/opti92x-ad1848.c:1.46->1.47 
#   F:isa/sb/emu8000_synth.c:1.7->1.8 
#   F:isa/sb/es968.c:1.26->1.27 
#   F:isa/sb/sb16.c:1.48->1.49 
#   F:isa/sb/sb16_csp.c:1.14->1.15 
#   F:isa/sb/sb8.c:1.20->1.21 
#   F:isa/sb/sb_common.c:1.20->1.21 
#   F:isa/wavefront/wavefront.c:1.29->1.30 
#   L:Clean up of obsolete MODULE_* stuff (isa part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/als100.c
#   2004/07/01 03:29:29+02:00 perex@suse.cz +1 -12
#   ALSA CVS update
#   D:2004/07/01 09:29:29
#   C:ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver,ES18xx driver
#   C:OPL3SA2 driver,Sound Galaxy driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,ES1688 driver
#   C:GUS Classic driver,GUS Extreme driver,GUS MAX driver
#   C:AMD InterWave driver,Opti9xx drivers,EMU8000 driver,ES968 driver
#   C:SB16/AWE driver,SB8 driver,SB drivers,Wavefront drivers
#   F:isa/als100.c:1.26->1.27 
#   F:isa/azt2320.c:1.26->1.27 
#   F:isa/cmi8330.c:1.30->1.31 
#   F:isa/dt019x.c:1.20->1.21 
#   F:isa/es18xx.c:1.47->1.48 
#   F:isa/opl3sa2.c:1.36->1.37 
#   F:isa/sgalaxy.c:1.20->1.21 
#   F:isa/sscape.c:1.14->1.15 
#   F:isa/ad1816a/ad1816a.c:1.20->1.21 
#   F:isa/ad1848/ad1848.c:1.12->1.13 
#   F:isa/cs423x/cs4231.c:1.14->1.15 
#   F:isa/cs423x/cs4236.c:1.44->1.45 
#   F:isa/es1688/es1688.c:1.16->1.17 
#   F:isa/es1688/es1688_lib.c:1.25->1.26 
#   F:isa/gus/gusclassic.c:1.14->1.15 
#   F:isa/gus/gusextreme.c:1.16->1.17 
#   F:isa/gus/gusmax.c:1.15->1.16 
#   F:isa/gus/interwave.c:1.33->1.34 
#   F:isa/opti9xx/opti92x-ad1848.c:1.46->1.47 
#   F:isa/sb/emu8000_synth.c:1.7->1.8 
#   F:isa/sb/es968.c:1.26->1.27 
#   F:isa/sb/sb16.c:1.48->1.49 
#   F:isa/sb/sb16_csp.c:1.14->1.15 
#   F:isa/sb/sb8.c:1.20->1.21 
#   F:isa/sb/sb_common.c:1.20->1.21 
#   F:isa/wavefront/wavefront.c:1.29->1.30 
#   L:Clean up of obsolete MODULE_* stuff (isa part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/ad1848/ad1848.c
#   2004/07/01 03:29:29+02:00 perex@suse.cz +1 -9
#   ALSA CVS update
#   D:2004/07/01 09:29:29
#   C:ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver,ES18xx driver
#   C:OPL3SA2 driver,Sound Galaxy driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,ES1688 driver
#   C:GUS Classic driver,GUS Extreme driver,GUS MAX driver
#   C:AMD InterWave driver,Opti9xx drivers,EMU8000 driver,ES968 driver
#   C:SB16/AWE driver,SB8 driver,SB drivers,Wavefront drivers
#   F:isa/als100.c:1.26->1.27 
#   F:isa/azt2320.c:1.26->1.27 
#   F:isa/cmi8330.c:1.30->1.31 
#   F:isa/dt019x.c:1.20->1.21 
#   F:isa/es18xx.c:1.47->1.48 
#   F:isa/opl3sa2.c:1.36->1.37 
#   F:isa/sgalaxy.c:1.20->1.21 
#   F:isa/sscape.c:1.14->1.15 
#   F:isa/ad1816a/ad1816a.c:1.20->1.21 
#   F:isa/ad1848/ad1848.c:1.12->1.13 
#   F:isa/cs423x/cs4231.c:1.14->1.15 
#   F:isa/cs423x/cs4236.c:1.44->1.45 
#   F:isa/es1688/es1688.c:1.16->1.17 
#   F:isa/es1688/es1688_lib.c:1.25->1.26 
#   F:isa/gus/gusclassic.c:1.14->1.15 
#   F:isa/gus/gusextreme.c:1.16->1.17 
#   F:isa/gus/gusmax.c:1.15->1.16 
#   F:isa/gus/interwave.c:1.33->1.34 
#   F:isa/opti9xx/opti92x-ad1848.c:1.46->1.47 
#   F:isa/sb/emu8000_synth.c:1.7->1.8 
#   F:isa/sb/es968.c:1.26->1.27 
#   F:isa/sb/sb16.c:1.48->1.49 
#   F:isa/sb/sb16_csp.c:1.14->1.15 
#   F:isa/sb/sb8.c:1.20->1.21 
#   F:isa/sb/sb_common.c:1.20->1.21 
#   F:isa/wavefront/wavefront.c:1.29->1.30 
#   L:Clean up of obsolete MODULE_* stuff (isa part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/ad1816a/ad1816a.c
#   2004/07/01 03:29:29+02:00 perex@suse.cz +1 -12
#   ALSA CVS update
#   D:2004/07/01 09:29:29
#   C:ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver,ES18xx driver
#   C:OPL3SA2 driver,Sound Galaxy driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,ES1688 driver
#   C:GUS Classic driver,GUS Extreme driver,GUS MAX driver
#   C:AMD InterWave driver,Opti9xx drivers,EMU8000 driver,ES968 driver
#   C:SB16/AWE driver,SB8 driver,SB drivers,Wavefront drivers
#   F:isa/als100.c:1.26->1.27 
#   F:isa/azt2320.c:1.26->1.27 
#   F:isa/cmi8330.c:1.30->1.31 
#   F:isa/dt019x.c:1.20->1.21 
#   F:isa/es18xx.c:1.47->1.48 
#   F:isa/opl3sa2.c:1.36->1.37 
#   F:isa/sgalaxy.c:1.20->1.21 
#   F:isa/sscape.c:1.14->1.15 
#   F:isa/ad1816a/ad1816a.c:1.20->1.21 
#   F:isa/ad1848/ad1848.c:1.12->1.13 
#   F:isa/cs423x/cs4231.c:1.14->1.15 
#   F:isa/cs423x/cs4236.c:1.44->1.45 
#   F:isa/es1688/es1688.c:1.16->1.17 
#   F:isa/es1688/es1688_lib.c:1.25->1.26 
#   F:isa/gus/gusclassic.c:1.14->1.15 
#   F:isa/gus/gusextreme.c:1.16->1.17 
#   F:isa/gus/gusmax.c:1.15->1.16 
#   F:isa/gus/interwave.c:1.33->1.34 
#   F:isa/opti9xx/opti92x-ad1848.c:1.46->1.47 
#   F:isa/sb/emu8000_synth.c:1.7->1.8 
#   F:isa/sb/es968.c:1.26->1.27 
#   F:isa/sb/sb16.c:1.48->1.49 
#   F:isa/sb/sb16_csp.c:1.14->1.15 
#   F:isa/sb/sb8.c:1.20->1.21 
#   F:isa/sb/sb_common.c:1.20->1.21 
#   F:isa/wavefront/wavefront.c:1.29->1.30 
#   L:Clean up of obsolete MODULE_* stuff (isa part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/01 19:34:41+02:00 perex@suse.cz 
#   ALSA CVS update
#   Documentation,PCM Midlevel,RawMidi Midlevel,ALSA Core,Timer Midlevel
#   ALSA<-OSS emulation,ALSA sequencer,Instrument layer,ALSA<-OSS sequencer
#   Clean up of obsolete MODULE_* stuff (core part)
#   
#   Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/timer.c
#   2004/07/01 03:28:48+02:00 perex@suse.cz +0 -1
#   ALSA CVS update
#   D:2004/07/01 09:28:48
#   C:Documentation,PCM Midlevel,RawMidi Midlevel,ALSA Core,Timer Midlevel
#   C:ALSA<-OSS emulation,ALSA sequencer,Instrument layer,ALSA<-OSS sequencer
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.29->1.30 
#   F:core/pcm_memory.c:1.30->1.31 
#   F:core/rawmidi.c:1.45->1.46 
#   F:core/sound.c:1.64->1.65 
#   F:core/timer.c:1.60->1.61 
#   F:core/oss/pcm_oss.c:1.72->1.73 
#   F:core/seq/seq.c:1.13->1.14 
#   F:core/seq/seq_device.c:1.15->1.16 
#   F:core/seq/seq_dummy.c:1.12->1.13 
#   F:core/seq/seq_instr.c:1.9->1.10 
#   F:core/seq/seq_midi.c:1.21->1.22 
#   F:core/seq/seq_midi_emul.c:1.10->1.11 
#   F:core/seq/instr/ainstr_fm.c:1.7->1.8 
#   F:core/seq/instr/ainstr_gf1.c:1.8->1.9 
#   F:core/seq/instr/ainstr_iw.c:1.9->1.10 
#   F:core/seq/instr/ainstr_simple.c:1.7->1.8 
#   F:core/seq/oss/seq_oss.c:1.14->1.15 
#   F:include/initval.h:1.20->1.21 
#   L:Clean up of obsolete MODULE_* stuff (core part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/sound.c
#   2004/07/01 03:28:48+02:00 perex@suse.cz +0 -5
#   ALSA CVS update
#   D:2004/07/01 09:28:48
#   C:Documentation,PCM Midlevel,RawMidi Midlevel,ALSA Core,Timer Midlevel
#   C:ALSA<-OSS emulation,ALSA sequencer,Instrument layer,ALSA<-OSS sequencer
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.29->1.30 
#   F:core/pcm_memory.c:1.30->1.31 
#   F:core/rawmidi.c:1.45->1.46 
#   F:core/sound.c:1.64->1.65 
#   F:core/timer.c:1.60->1.61 
#   F:core/oss/pcm_oss.c:1.72->1.73 
#   F:core/seq/seq.c:1.13->1.14 
#   F:core/seq/seq_device.c:1.15->1.16 
#   F:core/seq/seq_dummy.c:1.12->1.13 
#   F:core/seq/seq_instr.c:1.9->1.10 
#   F:core/seq/seq_midi.c:1.21->1.22 
#   F:core/seq/seq_midi_emul.c:1.10->1.11 
#   F:core/seq/instr/ainstr_fm.c:1.7->1.8 
#   F:core/seq/instr/ainstr_gf1.c:1.8->1.9 
#   F:core/seq/instr/ainstr_iw.c:1.9->1.10 
#   F:core/seq/instr/ainstr_simple.c:1.7->1.8 
#   F:core/seq/oss/seq_oss.c:1.14->1.15 
#   F:include/initval.h:1.20->1.21 
#   L:Clean up of obsolete MODULE_* stuff (core part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/seq_midi_emul.c
#   2004/07/01 03:28:49+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/07/01 09:28:48
#   C:Documentation,PCM Midlevel,RawMidi Midlevel,ALSA Core,Timer Midlevel
#   C:ALSA<-OSS emulation,ALSA sequencer,Instrument layer,ALSA<-OSS sequencer
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.29->1.30 
#   F:core/pcm_memory.c:1.30->1.31 
#   F:core/rawmidi.c:1.45->1.46 
#   F:core/sound.c:1.64->1.65 
#   F:core/timer.c:1.60->1.61 
#   F:core/oss/pcm_oss.c:1.72->1.73 
#   F:core/seq/seq.c:1.13->1.14 
#   F:core/seq/seq_device.c:1.15->1.16 
#   F:core/seq/seq_dummy.c:1.12->1.13 
#   F:core/seq/seq_instr.c:1.9->1.10 
#   F:core/seq/seq_midi.c:1.21->1.22 
#   F:core/seq/seq_midi_emul.c:1.10->1.11 
#   F:core/seq/instr/ainstr_fm.c:1.7->1.8 
#   F:core/seq/instr/ainstr_gf1.c:1.8->1.9 
#   F:core/seq/instr/ainstr_iw.c:1.9->1.10 
#   F:core/seq/instr/ainstr_simple.c:1.7->1.8 
#   F:core/seq/oss/seq_oss.c:1.14->1.15 
#   F:include/initval.h:1.20->1.21 
#   L:Clean up of obsolete MODULE_* stuff (core part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/seq_midi.c
#   2004/07/01 03:28:49+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/07/01 09:28:48
#   C:Documentation,PCM Midlevel,RawMidi Midlevel,ALSA Core,Timer Midlevel
#   C:ALSA<-OSS emulation,ALSA sequencer,Instrument layer,ALSA<-OSS sequencer
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.29->1.30 
#   F:core/pcm_memory.c:1.30->1.31 
#   F:core/rawmidi.c:1.45->1.46 
#   F:core/sound.c:1.64->1.65 
#   F:core/timer.c:1.60->1.61 
#   F:core/oss/pcm_oss.c:1.72->1.73 
#   F:core/seq/seq.c:1.13->1.14 
#   F:core/seq/seq_device.c:1.15->1.16 
#   F:core/seq/seq_dummy.c:1.12->1.13 
#   F:core/seq/seq_instr.c:1.9->1.10 
#   F:core/seq/seq_midi.c:1.21->1.22 
#   F:core/seq/seq_midi_emul.c:1.10->1.11 
#   F:core/seq/instr/ainstr_fm.c:1.7->1.8 
#   F:core/seq/instr/ainstr_gf1.c:1.8->1.9 
#   F:core/seq/instr/ainstr_iw.c:1.9->1.10 
#   F:core/seq/instr/ainstr_simple.c:1.7->1.8 
#   F:core/seq/oss/seq_oss.c:1.14->1.15 
#   F:include/initval.h:1.20->1.21 
#   L:Clean up of obsolete MODULE_* stuff (core part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/seq_instr.c
#   2004/07/01 03:28:49+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/07/01 09:28:48
#   C:Documentation,PCM Midlevel,RawMidi Midlevel,ALSA Core,Timer Midlevel
#   C:ALSA<-OSS emulation,ALSA sequencer,Instrument layer,ALSA<-OSS sequencer
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.29->1.30 
#   F:core/pcm_memory.c:1.30->1.31 
#   F:core/rawmidi.c:1.45->1.46 
#   F:core/sound.c:1.64->1.65 
#   F:core/timer.c:1.60->1.61 
#   F:core/oss/pcm_oss.c:1.72->1.73 
#   F:core/seq/seq.c:1.13->1.14 
#   F:core/seq/seq_device.c:1.15->1.16 
#   F:core/seq/seq_dummy.c:1.12->1.13 
#   F:core/seq/seq_instr.c:1.9->1.10 
#   F:core/seq/seq_midi.c:1.21->1.22 
#   F:core/seq/seq_midi_emul.c:1.10->1.11 
#   F:core/seq/instr/ainstr_fm.c:1.7->1.8 
#   F:core/seq/instr/ainstr_gf1.c:1.8->1.9 
#   F:core/seq/instr/ainstr_iw.c:1.9->1.10 
#   F:core/seq/instr/ainstr_simple.c:1.7->1.8 
#   F:core/seq/oss/seq_oss.c:1.14->1.15 
#   F:include/initval.h:1.20->1.21 
#   L:Clean up of obsolete MODULE_* stuff (core part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/seq_dummy.c
#   2004/07/01 03:28:49+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/07/01 09:28:48
#   C:Documentation,PCM Midlevel,RawMidi Midlevel,ALSA Core,Timer Midlevel
#   C:ALSA<-OSS emulation,ALSA sequencer,Instrument layer,ALSA<-OSS sequencer
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.29->1.30 
#   F:core/pcm_memory.c:1.30->1.31 
#   F:core/rawmidi.c:1.45->1.46 
#   F:core/sound.c:1.64->1.65 
#   F:core/timer.c:1.60->1.61 
#   F:core/oss/pcm_oss.c:1.72->1.73 
#   F:core/seq/seq.c:1.13->1.14 
#   F:core/seq/seq_device.c:1.15->1.16 
#   F:core/seq/seq_dummy.c:1.12->1.13 
#   F:core/seq/seq_instr.c:1.9->1.10 
#   F:core/seq/seq_midi.c:1.21->1.22 
#   F:core/seq/seq_midi_emul.c:1.10->1.11 
#   F:core/seq/instr/ainstr_fm.c:1.7->1.8 
#   F:core/seq/instr/ainstr_gf1.c:1.8->1.9 
#   F:core/seq/instr/ainstr_iw.c:1.9->1.10 
#   F:core/seq/instr/ainstr_simple.c:1.7->1.8 
#   F:core/seq/oss/seq_oss.c:1.14->1.15 
#   F:include/initval.h:1.20->1.21 
#   L:Clean up of obsolete MODULE_* stuff (core part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/seq_device.c
#   2004/07/01 03:28:49+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/07/01 09:28:48
#   C:Documentation,PCM Midlevel,RawMidi Midlevel,ALSA Core,Timer Midlevel
#   C:ALSA<-OSS emulation,ALSA sequencer,Instrument layer,ALSA<-OSS sequencer
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.29->1.30 
#   F:core/pcm_memory.c:1.30->1.31 
#   F:core/rawmidi.c:1.45->1.46 
#   F:core/sound.c:1.64->1.65 
#   F:core/timer.c:1.60->1.61 
#   F:core/oss/pcm_oss.c:1.72->1.73 
#   F:core/seq/seq.c:1.13->1.14 
#   F:core/seq/seq_device.c:1.15->1.16 
#   F:core/seq/seq_dummy.c:1.12->1.13 
#   F:core/seq/seq_instr.c:1.9->1.10 
#   F:core/seq/seq_midi.c:1.21->1.22 
#   F:core/seq/seq_midi_emul.c:1.10->1.11 
#   F:core/seq/instr/ainstr_fm.c:1.7->1.8 
#   F:core/seq/instr/ainstr_gf1.c:1.8->1.9 
#   F:core/seq/instr/ainstr_iw.c:1.9->1.10 
#   F:core/seq/instr/ainstr_simple.c:1.7->1.8 
#   F:core/seq/oss/seq_oss.c:1.14->1.15 
#   F:include/initval.h:1.20->1.21 
#   L:Clean up of obsolete MODULE_* stuff (core part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/seq.c
#   2004/07/01 03:28:49+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/07/01 09:28:48
#   C:Documentation,PCM Midlevel,RawMidi Midlevel,ALSA Core,Timer Midlevel
#   C:ALSA<-OSS emulation,ALSA sequencer,Instrument layer,ALSA<-OSS sequencer
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.29->1.30 
#   F:core/pcm_memory.c:1.30->1.31 
#   F:core/rawmidi.c:1.45->1.46 
#   F:core/sound.c:1.64->1.65 
#   F:core/timer.c:1.60->1.61 
#   F:core/oss/pcm_oss.c:1.72->1.73 
#   F:core/seq/seq.c:1.13->1.14 
#   F:core/seq/seq_device.c:1.15->1.16 
#   F:core/seq/seq_dummy.c:1.12->1.13 
#   F:core/seq/seq_instr.c:1.9->1.10 
#   F:core/seq/seq_midi.c:1.21->1.22 
#   F:core/seq/seq_midi_emul.c:1.10->1.11 
#   F:core/seq/instr/ainstr_fm.c:1.7->1.8 
#   F:core/seq/instr/ainstr_gf1.c:1.8->1.9 
#   F:core/seq/instr/ainstr_iw.c:1.9->1.10 
#   F:core/seq/instr/ainstr_simple.c:1.7->1.8 
#   F:core/seq/oss/seq_oss.c:1.14->1.15 
#   F:include/initval.h:1.20->1.21 
#   L:Clean up of obsolete MODULE_* stuff (core part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/oss/seq_oss.c
#   2004/07/01 03:28:49+02:00 perex@suse.cz +0 -1
#   ALSA CVS update
#   D:2004/07/01 09:28:48
#   C:Documentation,PCM Midlevel,RawMidi Midlevel,ALSA Core,Timer Midlevel
#   C:ALSA<-OSS emulation,ALSA sequencer,Instrument layer,ALSA<-OSS sequencer
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.29->1.30 
#   F:core/pcm_memory.c:1.30->1.31 
#   F:core/rawmidi.c:1.45->1.46 
#   F:core/sound.c:1.64->1.65 
#   F:core/timer.c:1.60->1.61 
#   F:core/oss/pcm_oss.c:1.72->1.73 
#   F:core/seq/seq.c:1.13->1.14 
#   F:core/seq/seq_device.c:1.15->1.16 
#   F:core/seq/seq_dummy.c:1.12->1.13 
#   F:core/seq/seq_instr.c:1.9->1.10 
#   F:core/seq/seq_midi.c:1.21->1.22 
#   F:core/seq/seq_midi_emul.c:1.10->1.11 
#   F:core/seq/instr/ainstr_fm.c:1.7->1.8 
#   F:core/seq/instr/ainstr_gf1.c:1.8->1.9 
#   F:core/seq/instr/ainstr_iw.c:1.9->1.10 
#   F:core/seq/instr/ainstr_simple.c:1.7->1.8 
#   F:core/seq/oss/seq_oss.c:1.14->1.15 
#   F:include/initval.h:1.20->1.21 
#   L:Clean up of obsolete MODULE_* stuff (core part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/instr/ainstr_simple.c
#   2004/07/01 03:28:49+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/07/01 09:28:48
#   C:Documentation,PCM Midlevel,RawMidi Midlevel,ALSA Core,Timer Midlevel
#   C:ALSA<-OSS emulation,ALSA sequencer,Instrument layer,ALSA<-OSS sequencer
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.29->1.30 
#   F:core/pcm_memory.c:1.30->1.31 
#   F:core/rawmidi.c:1.45->1.46 
#   F:core/sound.c:1.64->1.65 
#   F:core/timer.c:1.60->1.61 
#   F:core/oss/pcm_oss.c:1.72->1.73 
#   F:core/seq/seq.c:1.13->1.14 
#   F:core/seq/seq_device.c:1.15->1.16 
#   F:core/seq/seq_dummy.c:1.12->1.13 
#   F:core/seq/seq_instr.c:1.9->1.10 
#   F:core/seq/seq_midi.c:1.21->1.22 
#   F:core/seq/seq_midi_emul.c:1.10->1.11 
#   F:core/seq/instr/ainstr_fm.c:1.7->1.8 
#   F:core/seq/instr/ainstr_gf1.c:1.8->1.9 
#   F:core/seq/instr/ainstr_iw.c:1.9->1.10 
#   F:core/seq/instr/ainstr_simple.c:1.7->1.8 
#   F:core/seq/oss/seq_oss.c:1.14->1.15 
#   F:include/initval.h:1.20->1.21 
#   L:Clean up of obsolete MODULE_* stuff (core part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/instr/ainstr_iw.c
#   2004/07/01 03:28:49+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/07/01 09:28:48
#   C:Documentation,PCM Midlevel,RawMidi Midlevel,ALSA Core,Timer Midlevel
#   C:ALSA<-OSS emulation,ALSA sequencer,Instrument layer,ALSA<-OSS sequencer
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.29->1.30 
#   F:core/pcm_memory.c:1.30->1.31 
#   F:core/rawmidi.c:1.45->1.46 
#   F:core/sound.c:1.64->1.65 
#   F:core/timer.c:1.60->1.61 
#   F:core/oss/pcm_oss.c:1.72->1.73 
#   F:core/seq/seq.c:1.13->1.14 
#   F:core/seq/seq_device.c:1.15->1.16 
#   F:core/seq/seq_dummy.c:1.12->1.13 
#   F:core/seq/seq_instr.c:1.9->1.10 
#   F:core/seq/seq_midi.c:1.21->1.22 
#   F:core/seq/seq_midi_emul.c:1.10->1.11 
#   F:core/seq/instr/ainstr_fm.c:1.7->1.8 
#   F:core/seq/instr/ainstr_gf1.c:1.8->1.9 
#   F:core/seq/instr/ainstr_iw.c:1.9->1.10 
#   F:core/seq/instr/ainstr_simple.c:1.7->1.8 
#   F:core/seq/oss/seq_oss.c:1.14->1.15 
#   F:include/initval.h:1.20->1.21 
#   L:Clean up of obsolete MODULE_* stuff (core part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/instr/ainstr_gf1.c
#   2004/07/01 03:28:49+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/07/01 09:28:48
#   C:Documentation,PCM Midlevel,RawMidi Midlevel,ALSA Core,Timer Midlevel
#   C:ALSA<-OSS emulation,ALSA sequencer,Instrument layer,ALSA<-OSS sequencer
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.29->1.30 
#   F:core/pcm_memory.c:1.30->1.31 
#   F:core/rawmidi.c:1.45->1.46 
#   F:core/sound.c:1.64->1.65 
#   F:core/timer.c:1.60->1.61 
#   F:core/oss/pcm_oss.c:1.72->1.73 
#   F:core/seq/seq.c:1.13->1.14 
#   F:core/seq/seq_device.c:1.15->1.16 
#   F:core/seq/seq_dummy.c:1.12->1.13 
#   F:core/seq/seq_instr.c:1.9->1.10 
#   F:core/seq/seq_midi.c:1.21->1.22 
#   F:core/seq/seq_midi_emul.c:1.10->1.11 
#   F:core/seq/instr/ainstr_fm.c:1.7->1.8 
#   F:core/seq/instr/ainstr_gf1.c:1.8->1.9 
#   F:core/seq/instr/ainstr_iw.c:1.9->1.10 
#   F:core/seq/instr/ainstr_simple.c:1.7->1.8 
#   F:core/seq/oss/seq_oss.c:1.14->1.15 
#   F:include/initval.h:1.20->1.21 
#   L:Clean up of obsolete MODULE_* stuff (core part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/instr/ainstr_fm.c
#   2004/07/01 03:28:49+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/07/01 09:28:48
#   C:Documentation,PCM Midlevel,RawMidi Midlevel,ALSA Core,Timer Midlevel
#   C:ALSA<-OSS emulation,ALSA sequencer,Instrument layer,ALSA<-OSS sequencer
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.29->1.30 
#   F:core/pcm_memory.c:1.30->1.31 
#   F:core/rawmidi.c:1.45->1.46 
#   F:core/sound.c:1.64->1.65 
#   F:core/timer.c:1.60->1.61 
#   F:core/oss/pcm_oss.c:1.72->1.73 
#   F:core/seq/seq.c:1.13->1.14 
#   F:core/seq/seq_device.c:1.15->1.16 
#   F:core/seq/seq_dummy.c:1.12->1.13 
#   F:core/seq/seq_instr.c:1.9->1.10 
#   F:core/seq/seq_midi.c:1.21->1.22 
#   F:core/seq/seq_midi_emul.c:1.10->1.11 
#   F:core/seq/instr/ainstr_fm.c:1.7->1.8 
#   F:core/seq/instr/ainstr_gf1.c:1.8->1.9 
#   F:core/seq/instr/ainstr_iw.c:1.9->1.10 
#   F:core/seq/instr/ainstr_simple.c:1.7->1.8 
#   F:core/seq/oss/seq_oss.c:1.14->1.15 
#   F:include/initval.h:1.20->1.21 
#   L:Clean up of obsolete MODULE_* stuff (core part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/rawmidi.c
#   2004/07/01 03:28:48+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/07/01 09:28:48
#   C:Documentation,PCM Midlevel,RawMidi Midlevel,ALSA Core,Timer Midlevel
#   C:ALSA<-OSS emulation,ALSA sequencer,Instrument layer,ALSA<-OSS sequencer
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.29->1.30 
#   F:core/pcm_memory.c:1.30->1.31 
#   F:core/rawmidi.c:1.45->1.46 
#   F:core/sound.c:1.64->1.65 
#   F:core/timer.c:1.60->1.61 
#   F:core/oss/pcm_oss.c:1.72->1.73 
#   F:core/seq/seq.c:1.13->1.14 
#   F:core/seq/seq_device.c:1.15->1.16 
#   F:core/seq/seq_dummy.c:1.12->1.13 
#   F:core/seq/seq_instr.c:1.9->1.10 
#   F:core/seq/seq_midi.c:1.21->1.22 
#   F:core/seq/seq_midi_emul.c:1.10->1.11 
#   F:core/seq/instr/ainstr_fm.c:1.7->1.8 
#   F:core/seq/instr/ainstr_gf1.c:1.8->1.9 
#   F:core/seq/instr/ainstr_iw.c:1.9->1.10 
#   F:core/seq/instr/ainstr_simple.c:1.7->1.8 
#   F:core/seq/oss/seq_oss.c:1.14->1.15 
#   F:include/initval.h:1.20->1.21 
#   L:Clean up of obsolete MODULE_* stuff (core part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/pcm_memory.c
#   2004/07/01 03:28:48+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/07/01 09:28:48
#   C:Documentation,PCM Midlevel,RawMidi Midlevel,ALSA Core,Timer Midlevel
#   C:ALSA<-OSS emulation,ALSA sequencer,Instrument layer,ALSA<-OSS sequencer
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.29->1.30 
#   F:core/pcm_memory.c:1.30->1.31 
#   F:core/rawmidi.c:1.45->1.46 
#   F:core/sound.c:1.64->1.65 
#   F:core/timer.c:1.60->1.61 
#   F:core/oss/pcm_oss.c:1.72->1.73 
#   F:core/seq/seq.c:1.13->1.14 
#   F:core/seq/seq_device.c:1.15->1.16 
#   F:core/seq/seq_dummy.c:1.12->1.13 
#   F:core/seq/seq_instr.c:1.9->1.10 
#   F:core/seq/seq_midi.c:1.21->1.22 
#   F:core/seq/seq_midi_emul.c:1.10->1.11 
#   F:core/seq/instr/ainstr_fm.c:1.7->1.8 
#   F:core/seq/instr/ainstr_gf1.c:1.8->1.9 
#   F:core/seq/instr/ainstr_iw.c:1.9->1.10 
#   F:core/seq/instr/ainstr_simple.c:1.7->1.8 
#   F:core/seq/oss/seq_oss.c:1.14->1.15 
#   F:include/initval.h:1.20->1.21 
#   L:Clean up of obsolete MODULE_* stuff (core part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/oss/pcm_oss.c
#   2004/07/01 03:28:48+02:00 perex@suse.cz +0 -3
#   ALSA CVS update
#   D:2004/07/01 09:28:48
#   C:Documentation,PCM Midlevel,RawMidi Midlevel,ALSA Core,Timer Midlevel
#   C:ALSA<-OSS emulation,ALSA sequencer,Instrument layer,ALSA<-OSS sequencer
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.29->1.30 
#   F:core/pcm_memory.c:1.30->1.31 
#   F:core/rawmidi.c:1.45->1.46 
#   F:core/sound.c:1.64->1.65 
#   F:core/timer.c:1.60->1.61 
#   F:core/oss/pcm_oss.c:1.72->1.73 
#   F:core/seq/seq.c:1.13->1.14 
#   F:core/seq/seq_device.c:1.15->1.16 
#   F:core/seq/seq_dummy.c:1.12->1.13 
#   F:core/seq/seq_instr.c:1.9->1.10 
#   F:core/seq/seq_midi.c:1.21->1.22 
#   F:core/seq/seq_midi_emul.c:1.10->1.11 
#   F:core/seq/instr/ainstr_fm.c:1.7->1.8 
#   F:core/seq/instr/ainstr_gf1.c:1.8->1.9 
#   F:core/seq/instr/ainstr_iw.c:1.9->1.10 
#   F:core/seq/instr/ainstr_simple.c:1.7->1.8 
#   F:core/seq/oss/seq_oss.c:1.14->1.15 
#   F:include/initval.h:1.20->1.21 
#   L:Clean up of obsolete MODULE_* stuff (core part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/initval.h
#   2004/07/01 03:28:49+02:00 perex@suse.cz +0 -33
#   ALSA CVS update
#   D:2004/07/01 09:28:48
#   C:Documentation,PCM Midlevel,RawMidi Midlevel,ALSA Core,Timer Midlevel
#   C:ALSA<-OSS emulation,ALSA sequencer,Instrument layer,ALSA<-OSS sequencer
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.29->1.30 
#   F:core/pcm_memory.c:1.30->1.31 
#   F:core/rawmidi.c:1.45->1.46 
#   F:core/sound.c:1.64->1.65 
#   F:core/timer.c:1.60->1.61 
#   F:core/oss/pcm_oss.c:1.72->1.73 
#   F:core/seq/seq.c:1.13->1.14 
#   F:core/seq/seq_device.c:1.15->1.16 
#   F:core/seq/seq_dummy.c:1.12->1.13 
#   F:core/seq/seq_instr.c:1.9->1.10 
#   F:core/seq/seq_midi.c:1.21->1.22 
#   F:core/seq/seq_midi_emul.c:1.10->1.11 
#   F:core/seq/instr/ainstr_fm.c:1.7->1.8 
#   F:core/seq/instr/ainstr_gf1.c:1.8->1.9 
#   F:core/seq/instr/ainstr_iw.c:1.9->1.10 
#   F:core/seq/instr/ainstr_simple.c:1.7->1.8 
#   F:core/seq/oss/seq_oss.c:1.14->1.15 
#   F:include/initval.h:1.20->1.21 
#   L:Clean up of obsolete MODULE_* stuff (core part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
#   2004/07/01 03:28:48+02:00 perex@suse.cz +1 -2
#   ALSA CVS update
#   D:2004/07/01 09:28:48
#   C:Documentation,PCM Midlevel,RawMidi Midlevel,ALSA Core,Timer Midlevel
#   C:ALSA<-OSS emulation,ALSA sequencer,Instrument layer,ALSA<-OSS sequencer
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.29->1.30 
#   F:core/pcm_memory.c:1.30->1.31 
#   F:core/rawmidi.c:1.45->1.46 
#   F:core/sound.c:1.64->1.65 
#   F:core/timer.c:1.60->1.61 
#   F:core/oss/pcm_oss.c:1.72->1.73 
#   F:core/seq/seq.c:1.13->1.14 
#   F:core/seq/seq_device.c:1.15->1.16 
#   F:core/seq/seq_dummy.c:1.12->1.13 
#   F:core/seq/seq_instr.c:1.9->1.10 
#   F:core/seq/seq_midi.c:1.21->1.22 
#   F:core/seq/seq_midi_emul.c:1.10->1.11 
#   F:core/seq/instr/ainstr_fm.c:1.7->1.8 
#   F:core/seq/instr/ainstr_gf1.c:1.8->1.9 
#   F:core/seq/instr/ainstr_iw.c:1.9->1.10 
#   F:core/seq/instr/ainstr_simple.c:1.7->1.8 
#   F:core/seq/oss/seq_oss.c:1.14->1.15 
#   F:include/initval.h:1.20->1.21 
#   L:Clean up of obsolete MODULE_* stuff (core part)
#   L:
#   L:Removed MODULE_CLASSES() and MODULE_SYNTAX().
#   L:Replaced MODULE_DEVICES() with MODULE_SUPPORTED_DEVICE()
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/01 19:34:16+02:00 perex@suse.cz 
#   ALSA CVS update
#   CMIPCI driver
#   Fix the i/o port range of gameport on cmipci
#   
#   Gameport use only 1 I/O port not 8.
#   Attached patch fix gameport on CMIPCI soundcards.
#   
#   Signed-off-by: Artur Frysiak <wiget@pld-linux.org>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/cmipci.c
#   2004/06/30 04:54:31+02:00 perex@suse.cz +2 -2
#   ALSA CVS update
#   D:2004/06/30 10:54:31
#   C:CMIPCI driver
#   F:pci/cmipci.c:1.68->1.69 
#   L:Fix the i/o port range of gameport on cmipci
#   L:
#   L:Gameport use only 1 I/O port not 8.
#   L:Attached patch fix gameport on CMIPCI soundcards.
#   Signed-off-by: Artur Frysiak <wiget@pld-linux.org>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/01 19:33:55+02:00 perex@suse.cz 
#   ALSA CVS update
#   AC97 Codec Core
#   Fixed STAC9758 output jack selection control
#   
#   - fixed unbalnaced mutex.
#   - use ac97_update_bits_page() instead of snd_ac97_update_bits().
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ac97/ac97_patch.c
#   2004/06/29 11:29:06+02:00 perex@suse.cz +2 -5
#   ALSA CVS update
#   D:2004/06/29 17:29:06
#   C:AC97 Codec Core
#   F:pci/ac97/ac97_patch.c:1.55->1.56 
#   L:Fixed STAC9758 output jack selection control
#   L:
#   L:- fixed unbalnaced mutex.
#   L:- use ac97_update_bits_page() instead of snd_ac97_update_bits().
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/01 19:33:30+02:00 perex@suse.cz 
#   ALSA CVS update
#   Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   USB generic driver
#   Removal and replacement of magic memory allocators and casts (other parts)
#   
#   This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   with kmalloc(), kcalloc() and kfree(), respectively.
#   The cast via snd_magic_cast() is replaced with the standard cast, too.
#   
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/usb/usbmixer.c
#   2004/06/29 11:14:25+02:00 perex@suse.cz +21 -21
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/usb/usbmidi.c
#   2004/06/29 11:14:25+02:00 perex@suse.cz +13 -13
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/usb/usbaudio.c
#   2004/06/29 11:14:25+02:00 perex@suse.cz +10 -12
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/synth/emux/emux_synth.c
#   2004/06/29 11:14:25+02:00 perex@suse.cz +6 -6
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/synth/emux/emux_seq.c
#   2004/06/29 11:14:25+02:00 perex@suse.cz +8 -8
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/synth/emux/emux_proc.c
#   2004/06/29 11:14:25+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/synth/emux/emux_oss.c
#   2004/06/29 11:14:25+02:00 perex@suse.cz +6 -6
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/synth/emux/emux_nrpn.c
#   2004/06/29 11:14:25+02:00 perex@suse.cz +2 -2
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/synth/emux/emux_hwdep.c
#   2004/06/29 11:14:25+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/synth/emux/emux.c
#   2004/06/29 11:14:25+02:00 perex@suse.cz +2 -2
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/sparc/cs4231.c
#   2004/06/29 11:14:25+02:00 perex@suse.cz +11 -12
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/sparc/amd7930.c
#   2004/06/29 11:14:25+02:00 perex@suse.cz +4 -5
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/ppc/tumbler.c
#   2004/06/29 11:14:25+02:00 perex@suse.cz +1 -3
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/ppc/pmac.c
#   2004/06/29 11:14:25+02:00 perex@suse.cz +8 -10
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/ppc/daca.c
#   2004/06/29 11:14:25+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/ppc/burgundy.c
#   2004/06/29 11:14:25+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/ppc/awacs.c
#   2004/06/29 11:14:24+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pcmcia/vx/vxp_ops.c
#   2004/06/29 11:14:24+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pcmcia/vx/vxp_mixer.c
#   2004/06/29 11:14:24+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pcmcia/vx/vx_entry.c
#   2004/06/29 11:14:24+02:00 perex@suse.cz +5 -5
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pcmcia/pdaudiocf/pdaudiocf_pcm.c
#   2004/06/29 11:14:24+02:00 perex@suse.cz +1 -3
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pcmcia/pdaudiocf/pdaudiocf_irq.c
#   2004/06/29 11:14:24+02:00 perex@suse.cz +2 -2
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pcmcia/pdaudiocf/pdaudiocf_core.c
#   2004/06/29 11:14:24+02:00 perex@suse.cz +6 -6
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pcmcia/pdaudiocf/pdaudiocf.c
#   2004/06/29 11:14:24+02:00 perex@suse.cz +5 -5
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/parisc/harmony.c
#   2004/06/29 11:14:24+02:00 perex@suse.cz +2 -3
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/i2c/tea6330t.c
#   2004/06/29 11:14:23+02:00 perex@suse.cz +4 -6
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/i2c/other/ak4xxx-adda.c
#   2004/06/29 11:14:24+02:00 perex@suse.cz +6 -6
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/i2c/other/ak4117.c
#   2004/06/29 11:14:24+02:00 perex@suse.cz +4 -6
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/i2c/l3/uda1341.c
#   2004/06/29 11:14:23+02:00 perex@suse.cz +8 -9
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/i2c/i2c.c
#   2004/06/29 11:14:23+02:00 perex@suse.cz +5 -5
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/i2c/cs8427.c
#   2004/06/29 11:14:23+02:00 perex@suse.cz +10 -12
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/drivers/vx/vx_pcm.c
#   2004/06/29 11:14:22+02:00 perex@suse.cz +11 -13
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/drivers/vx/vx_mixer.c
#   2004/06/29 11:14:22+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/drivers/vx/vx_hwdep.c
#   2004/06/29 11:14:22+02:00 perex@suse.cz +2 -2
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/drivers/vx/vx_core.c
#   2004/06/29 11:14:22+02:00 perex@suse.cz +4 -4
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/drivers/virmidi.c
#   2004/06/29 11:14:22+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/drivers/serial-u16550.c
#   2004/06/29 11:14:22+02:00 perex@suse.cz +10 -10
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/drivers/opl4/opl4_synth.c
#   2004/06/29 11:14:22+02:00 perex@suse.cz +5 -5
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/drivers/opl4/opl4_seq.c
#   2004/06/29 11:14:22+02:00 perex@suse.cz +4 -4
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/drivers/opl4/opl4_proc.c
#   2004/06/29 11:14:22+02:00 perex@suse.cz +4 -4
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/drivers/opl4/opl4_mixer.c
#   2004/06/29 11:14:22+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/drivers/opl4/opl4_lib.c
#   2004/06/29 11:14:22+02:00 perex@suse.cz +4 -4
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/drivers/opl3/opl3_synth.c
#   2004/06/29 11:14:22+02:00 perex@suse.cz +3 -3
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/drivers/opl3/opl3_seq.c
#   2004/06/29 11:14:22+02:00 perex@suse.cz +4 -4
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/drivers/opl3/opl3_oss.c
#   2004/06/29 11:14:22+02:00 perex@suse.cz +7 -7
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/drivers/opl3/opl3_midi.c
#   2004/06/29 11:14:22+02:00 perex@suse.cz +7 -7
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/drivers/opl3/opl3_lib.c
#   2004/06/29 11:14:22+02:00 perex@suse.cz +4 -6
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/drivers/mtpav.c
#   2004/06/29 11:14:22+02:00 perex@suse.cz +4 -4
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/drivers/mpu401/mpu401_uart.c
#   2004/06/29 11:14:22+02:00 perex@suse.cz +11 -11
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/drivers/dummy.c
#   2004/06/29 11:14:22+02:00 perex@suse.cz +16 -16
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/arm/sa11xx-uda1341.c
#   2004/06/29 11:14:21+02:00 perex@suse.cz +5 -7
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl
#   2004/06/29 11:14:21+02:00 perex@suse.cz +46 -232
#   ALSA CVS update
#   D:2004/06/29 17:14:21
#   C:Documentation,SA11xx UDA1341 driver,Generic drivers,MPU401 UART,OPL3
#   C:OPL4,Digigram VX core,I2C cs8427,I2C lib core,I2C tea6330t,L3 drivers
#   C:AK4117 receiver,Serial BUS drivers,PARISC Harmony driver
#   C:Sound Core PDAudioCF driver,Digigram VX Pocket driver,PPC AWACS driver
#   C:PPC Burgundy driver,PPC DACA driver,PPC PMAC driver,PPC Tumbler driver
#   C:SPARC AMD7930 driver,SPARC cs4231 driver,Common EMU synth
#   C:USB generic driver
#   F:Documentation/DocBook/writing-an-alsa-driver.tmpl:1.28->1.29 
#   F:arm/sa11xx-uda1341.c:1.15->1.16 
#   F:drivers/dummy.c:1.28->1.29 
#   F:drivers/mtpav.c:1.27->1.28 
#   F:drivers/serial-u16550.c:1.26->1.27 
#   F:drivers/virmidi.c:1.12->1.13 
#   F:drivers/mpu401/mpu401_uart.c:1.30->1.31 
#   F:drivers/opl3/opl3_lib.c:1.20->1.21 
#   F:drivers/opl3/opl3_midi.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.13->1.14 
#   F:drivers/opl3/opl3_seq.c:1.13->1.14 
#   F:drivers/opl3/opl3_synth.c:1.7->1.8 
#   F:drivers/opl4/opl4_lib.c:1.5->1.6 
#   F:drivers/opl4/opl4_mixer.c:1.1->1.2 
#   F:drivers/opl4/opl4_proc.c:1.4->1.5 
#   F:drivers/opl4/opl4_seq.c:1.4->1.5 
#   F:drivers/opl4/opl4_synth.c:1.3->1.4 
#   F:drivers/vx/vx_core.c:1.8->1.9 
#   F:drivers/vx/vx_hwdep.c:1.1->1.2 
#   F:drivers/vx/vx_mixer.c:1.3->1.4 
#   F:drivers/vx/vx_pcm.c:1.5->1.6 
#   F:i2c/cs8427.c:1.19->1.20 
#   F:i2c/i2c.c:1.10->1.11 
#   F:i2c/tea6330t.c:1.8->1.9 
#   F:i2c/l3/uda1341.c:1.10->1.11 
#   F:i2c/other/ak4117.c:1.2->1.3 
#   F:i2c/other/ak4xxx-adda.c:1.7->1.8 
#   F:parisc/harmony.c:1.12->1.13 
#   F:pcmcia/pdaudiocf/pdaudiocf.c:1.7->1.8 
#   F:pcmcia/pdaudiocf/pdaudiocf_core.c:1.3->1.4 
#   F:pcmcia/pdaudiocf/pdaudiocf_irq.c:1.5->1.6 
#   F:pcmcia/pdaudiocf/pdaudiocf_pcm.c:1.1->1.2 
#   F:pcmcia/vx/vx_entry.c:1.5->1.6 
#   F:pcmcia/vx/vxp_mixer.c:1.1->1.2 
#   F:pcmcia/vx/vxp_ops.c:1.3->1.4 
#   F:ppc/awacs.c:1.22->1.23 
#   F:ppc/burgundy.c:1.11->1.12 
#   F:ppc/daca.c:1.11->1.12 
#   F:ppc/pmac.c:1.31->1.32 
#   F:ppc/tumbler.c:1.31->1.32 
#   F:sparc/amd7930.c:1.9->1.10 
#   F:sparc/cs4231.c:1.13->1.14 
#   F:synth/emux/emux.c:1.11->1.12 
#   F:synth/emux/emux_hwdep.c:1.1->1.2 
#   F:synth/emux/emux_nrpn.c:1.5->1.6 
#   F:synth/emux/emux_oss.c:1.9->1.10 
#   F:synth/emux/emux_proc.c:1.5->1.6 
#   F:synth/emux/emux_seq.c:1.11->1.12 
#   F:synth/emux/emux_synth.c:1.9->1.10 
#   F:usb/usbaudio.c:1.102->1.103 
#   F:usb/usbmidi.c:1.29->1.30 
#   F:usb/usbmixer.c:1.27->1.28 
#   L:Removal and replacement of magic memory allocators and casts (other parts)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/01 19:33:00+02:00 perex@suse.cz 
#   ALSA CVS update
#   ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   Wavefront drivers
#   Removal and replacement of magic memory allocators and casts (isa part)
#   
#   This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   with kmalloc(), kcalloc() and kfree(), respectively.
#   The cast via snd_magic_cast() is replaced with the standard cast, too.
#   
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/wavefront/wavefront.c
#   2004/06/29 11:12:29+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/sscape.c
#   2004/06/29 11:12:23+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/sb/sb_mixer.c
#   2004/06/29 11:12:28+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/sb/sb_common.c
#   2004/06/29 11:12:28+02:00 perex@suse.cz +3 -5
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/sb/sb8_midi.c
#   2004/06/29 11:12:28+02:00 perex@suse.cz +8 -8
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/sb/sb8_main.c
#   2004/06/29 11:12:28+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/sb/sb8.c
#   2004/06/29 11:12:28+02:00 perex@suse.cz +1 -3
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/sb/sb16_main.c
#   2004/06/29 11:12:28+02:00 perex@suse.cz +8 -10
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/sb/sb16_csp.c
#   2004/06/29 11:12:27+02:00 perex@suse.cz +7 -9
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/sb/sb16.c
#   2004/06/29 11:12:27+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/sb/es968.c
#   2004/06/29 11:12:27+02:00 perex@suse.cz +1 -3
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/sb/emu8000_pcm.c
#   2004/06/29 11:12:27+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/sb/emu8000_patch.c
#   2004/06/29 11:12:27+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/sb/emu8000_callback.c
#   2004/06/29 11:12:27+02:00 perex@suse.cz +10 -10
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/sb/emu8000.c
#   2004/06/29 11:12:27+02:00 perex@suse.cz +3 -5
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/opti9xx/opti92x-ad1848.c
#   2004/06/29 11:12:27+02:00 perex@suse.cz +5 -7
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/opl3sa2.c
#   2004/06/29 11:12:23+02:00 perex@suse.cz +7 -8
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/gus/gus_uart.c
#   2004/06/29 11:12:27+02:00 perex@suse.cz +6 -6
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/gus/gus_timer.c
#   2004/06/29 11:12:27+02:00 perex@suse.cz +2 -4
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/gus/gus_synth.c
#   2004/06/29 11:12:27+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/gus/gus_pcm.c
#   2004/06/29 11:12:26+02:00 perex@suse.cz +18 -20
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/gus/gus_mixer.c
#   2004/06/29 11:12:26+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/gus/gus_mem_proc.c
#   2004/06/29 11:12:26+02:00 perex@suse.cz +6 -6
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/gus/gus_mem.c
#   2004/06/29 11:12:26+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/gus/gus_main.c
#   2004/06/29 11:12:26+02:00 perex@suse.cz +4 -6
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/gus/gus_irq.c
#   2004/06/29 11:12:26+02:00 perex@suse.cz +2 -2
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/gus/gus_instr.c
#   2004/06/29 11:12:26+02:00 perex@suse.cz +9 -9
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/es18xx.c
#   2004/06/29 11:12:23+02:00 perex@suse.cz +8 -10
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/es1688/es1688_lib.c
#   2004/06/29 11:12:26+02:00 perex@suse.cz +5 -5
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/dt019x.c
#   2004/06/29 11:12:23+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/cs423x/cs4236_lib.c
#   2004/06/29 11:12:26+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/cs423x/cs4236.c
#   2004/06/29 11:12:25+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/cs423x/cs4231_lib.c
#   2004/06/29 11:12:25+02:00 perex@suse.cz +8 -10
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/cs423x/cs4231.c
#   2004/06/29 11:12:25+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/cmi8330.c
#   2004/06/29 11:12:23+02:00 perex@suse.cz +2 -2
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/azt2320.c
#   2004/06/29 11:12:23+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/als100.c
#   2004/06/29 11:12:23+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/ad1848/ad1848_lib.c
#   2004/06/29 11:12:25+02:00 perex@suse.cz +7 -9
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/ad1848/ad1848.c
#   2004/06/29 11:12:24+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/ad1816a/ad1816a_lib.c
#   2004/06/29 11:12:24+02:00 perex@suse.cz +6 -8
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/ad1816a/ad1816a.c
#   2004/06/29 11:12:24+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/es1688.h
#   2004/06/29 11:12:23+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/06/29 17:12:23
#   C:ES1688 driver,ALS100 driver,AZT2320 driver,CMI8330 driver,DT019x driver
#   C:ES18xx driver,OPL3SA2 driver,Sound Scape driver,AD1816A driver
#   C:AD1848 driver,CS4231 driver,CS4236+ driver,GUS Library,Opti9xx drivers
#   C:EMU8000 driver,ES968 driver,SB16/AWE driver,SB8 driver,SB drivers
#   C:Wavefront drivers
#   F:include/es1688.h:1.5->1.6 
#   F:isa/als100.c:1.25->1.26 
#   F:isa/azt2320.c:1.25->1.26 
#   F:isa/cmi8330.c:1.29->1.30 
#   F:isa/dt019x.c:1.19->1.20 
#   F:isa/es18xx.c:1.46->1.47 
#   F:isa/opl3sa2.c:1.35->1.36 
#   F:isa/sscape.c:1.13->1.14 
#   F:isa/ad1816a/ad1816a.c:1.19->1.20 
#   F:isa/ad1816a/ad1816a_lib.c:1.22->1.23 
#   F:isa/ad1848/ad1848.c:1.11->1.12 
#   F:isa/ad1848/ad1848_lib.c:1.35->1.36 
#   F:isa/cs423x/cs4231.c:1.13->1.14 
#   F:isa/cs423x/cs4231_lib.c:1.41->1.42 
#   F:isa/cs423x/cs4236.c:1.43->1.44 
#   F:isa/cs423x/cs4236_lib.c:1.10->1.11 
#   F:isa/es1688/es1688_lib.c:1.24->1.25 
#   F:isa/gus/gus_instr.c:1.6->1.7 
#   F:isa/gus/gus_irq.c:1.7->1.8 
#   F:isa/gus/gus_main.c:1.14->1.15 
#   F:isa/gus/gus_mem.c:1.8->1.9 
#   F:isa/gus/gus_mem_proc.c:1.9->1.10 
#   F:isa/gus/gus_mixer.c:1.8->1.9 
#   F:isa/gus/gus_pcm.c:1.22->1.23 
#   F:isa/gus/gus_synth.c:1.11->1.12 
#   F:isa/gus/gus_timer.c:1.6->1.7 
#   F:isa/gus/gus_uart.c:1.8->1.9 
#   F:isa/opti9xx/opti92x-ad1848.c:1.45->1.46 
#   F:isa/sb/emu8000.c:1.21->1.22 
#   F:isa/sb/emu8000_callback.c:1.9->1.10 
#   F:isa/sb/emu8000_patch.c:1.10->1.11 
#   F:isa/sb/emu8000_pcm.c:1.13->1.14 
#   F:isa/sb/es968.c:1.25->1.26 
#   F:isa/sb/sb16.c:1.47->1.48 
#   F:isa/sb/sb16_csp.c:1.13->1.14 
#   F:isa/sb/sb16_main.c:1.20->1.21 
#   F:isa/sb/sb8.c:1.19->1.20 
#   F:isa/sb/sb8_main.c:1.15->1.16 
#   F:isa/sb/sb8_midi.c:1.10->1.11 
#   F:isa/sb/sb_common.c:1.19->1.20 
#   F:isa/sb/sb_mixer.c:1.13->1.14 
#   F:isa/wavefront/wavefront.c:1.28->1.29 
#   L:Removal and replacement of magic memory allocators and casts (isa part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/01 19:32:29+02:00 perex@suse.cz 
#   ALSA CVS update
#   ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   Trident driver,Digigram VX222 driver,YMFPCI driver
#   Removal and replacement of magic memory allocators and casts (pci part)
#   
#   This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   with kmalloc(), kcalloc() and kfree(), respectively.
#   The cast via snd_magic_cast() is replaced with the standard cast, too.
#   
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ymfpci/ymfpci_main.c
#   2004/06/29 11:10:37+02:00 perex@suse.cz +33 -35
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/vx222/vx222_ops.c
#   2004/06/29 11:10:37+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/vx222/vx222.c
#   2004/06/29 11:10:37+02:00 perex@suse.cz +2 -4
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/via82xx.c
#   2004/06/29 11:10:26+02:00 perex@suse.cz +12 -13
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/trident/trident_synth.c
#   2004/06/29 11:10:37+02:00 perex@suse.cz +4 -4
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/trident/trident_main.c
#   2004/06/29 11:10:37+02:00 perex@suse.cz +17 -19
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/sonicvibes.c
#   2004/06/29 11:10:26+02:00 perex@suse.cz +10 -11
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/rme9652/rme9652.c
#   2004/06/29 11:10:36+02:00 perex@suse.cz +36 -36
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/rme9652/hdsp.c
#   2004/06/29 11:10:36+02:00 perex@suse.cz +61 -61
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/rme96.c
#   2004/06/29 11:10:26+02:00 perex@suse.cz +35 -35
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/rme32.c
#   2004/06/29 11:10:25+02:00 perex@suse.cz +28 -28
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/nm256/nm256.c
#   2004/06/29 11:10:35+02:00 perex@suse.cz +10 -11
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/mixart/mixart_mixer.c
#   2004/06/29 11:10:35+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/mixart/mixart_hwdep.c
#   2004/06/29 11:10:35+02:00 perex@suse.cz +2 -2
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/mixart/mixart_core.c
#   2004/06/29 11:10:35+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/mixart/mixart.c
#   2004/06/29 11:10:35+02:00 perex@suse.cz +8 -10
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/maestro3.c
#   2004/06/29 11:10:25+02:00 perex@suse.cz +9 -11
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/korg1212/korg1212.c
#   2004/06/29 11:10:35+02:00 perex@suse.cz +27 -27
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/intel8x0m.c
#   2004/06/29 11:10:25+02:00 perex@suse.cz +11 -12
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/intel8x0.c
#   2004/06/29 11:10:25+02:00 perex@suse.cz +13 -14
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/ice1724.c
#   2004/06/29 11:10:35+02:00 perex@suse.cz +5 -5
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/ice1712.h
#   2004/06/29 11:10:35+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/ice1712.c
#   2004/06/29 11:10:34+02:00 perex@suse.cz +9 -9
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/ews.c
#   2004/06/29 11:10:34+02:00 perex@suse.cz +6 -6
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/delta.c
#   2004/06/29 11:10:33+02:00 perex@suse.cz +2 -2
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/fm801.c
#   2004/06/29 11:10:25+02:00 perex@suse.cz +9 -11
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/es1968.c
#   2004/06/29 11:10:25+02:00 perex@suse.cz +22 -24
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/es1938.c
#   2004/06/29 11:10:25+02:00 perex@suse.cz +5 -7
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ens1370.c
#   2004/06/29 11:10:24+02:00 perex@suse.cz +18 -20
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/emu10k1/irq.c
#   2004/06/29 11:10:33+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/emu10k1/io.c
#   2004/06/29 11:10:33+02:00 perex@suse.cz +2 -2
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/emu10k1/emuproc.c
#   2004/06/29 11:10:33+02:00 perex@suse.cz +3 -3
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/emu10k1/emupcm.c
#   2004/06/29 11:10:33+02:00 perex@suse.cz +20 -22
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/emu10k1/emumixer.c
#   2004/06/29 11:10:33+02:00 perex@suse.cz +1 -3
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/emu10k1/emufx.c
#   2004/06/29 11:10:33+02:00 perex@suse.cz +1 -3
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/emu10k1/emu10k1_synth.c
#   2004/06/29 11:10:33+02:00 perex@suse.cz +2 -2
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/emu10k1/emu10k1_patch.c
#   2004/06/29 11:10:33+02:00 perex@suse.cz +2 -2
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/emu10k1/emu10k1_main.c
#   2004/06/29 11:10:33+02:00 perex@suse.cz +4 -4
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/emu10k1/emu10k1_callback.c
#   2004/06/29 11:10:33+02:00 perex@suse.cz +8 -8
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/cs46xx/dsp_spos_scb_lib.c
#   2004/06/29 11:10:33+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/cs46xx/dsp_spos.c
#   2004/06/29 11:10:33+02:00 perex@suse.cz +6 -6
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/cs46xx/cs46xx_lib.h
#   2004/06/29 11:10:33+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/cs46xx/cs46xx_lib.c
#   2004/06/29 11:10:32+02:00 perex@suse.cz +38 -40
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/cs4281.c
#   2004/06/29 11:10:24+02:00 perex@suse.cz +23 -25
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/cmipci.c
#   2004/06/29 11:10:24+02:00 perex@suse.cz +5 -7
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/bt87x.c
#   2004/06/29 11:10:24+02:00 perex@suse.cz +4 -5
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/azt3328.c
#   2004/06/29 11:10:24+02:00 perex@suse.cz +5 -6
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/au88x0/au88x0_pcm.c
#   2004/06/29 11:10:32+02:00 perex@suse.cz +3 -4
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/au88x0/au88x0_mpu401.c
#   2004/06/29 11:10:32+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/au88x0/au88x0_core.c
#   2004/06/29 11:10:32+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/au88x0/au88x0.h
#   2004/06/29 11:10:32+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/au88x0/au88x0.c
#   2004/06/29 11:10:32+02:00 perex@suse.cz +3 -4
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/atiixp.c
#   2004/06/29 11:10:24+02:00 perex@suse.cz +9 -10
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/als4000.c
#   2004/06/29 11:10:23+02:00 perex@suse.cz +2 -4
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ali5451/ali5451.c
#   2004/06/29 11:10:31+02:00 perex@suse.cz +14 -15
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ac97/ak4531_codec.c
#   2004/06/29 11:10:31+02:00 perex@suse.cz +4 -6
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ac97/ac97_proc.c
#   2004/06/29 11:10:31+02:00 perex@suse.cz +3 -3
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ac97/ac97_pcm.c
#   2004/06/29 11:10:31+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ac97/ac97_patch.c
#   2004/06/29 11:10:30+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ac97/ac97_codec.c
#   2004/06/29 11:10:26+02:00 perex@suse.cz +6 -8
#   ALSA CVS update
#   D:2004/06/29 17:10:23
#   C:ALS4000 driver,ATIIXP driver,AZT3328 driver,BT87x driver,CMIPCI driver
#   C:CS4281 driver,ENS1370/1+ driver,ES1938 driver,ES1968 driver
#   C:FM801 driver,Intel8x0 driver,Intel8x0-modem driver,Maestro3 driver
#   C:RME32 driver,RME96 driver,SonicVibes driver,VIA82xx driver
#   C:AC97 Codec Core,AK4531 codec,ALI5451 driver,au88x0 driver,CS46xx driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,KORG1212 driver
#   C:MIXART driver,NM256 driver,RME HDSP driver,RME9652 driver
#   C:Trident driver,Digigram VX222 driver,YMFPCI driver
#   F:pci/als4000.c:1.33->1.34 
#   F:pci/atiixp.c:1.11->1.12 
#   F:pci/azt3328.c:1.13->1.14 
#   F:pci/bt87x.c:1.5->1.6 
#   F:pci/cmipci.c:1.67->1.68 
#   F:pci/cs4281.c:1.55->1.56 
#   F:pci/ens1370.c:1.60->1.61 
#   F:pci/es1938.c:1.36->1.37 
#   F:pci/es1968.c:1.68->1.69 
#   F:pci/fm801.c:1.45->1.46 
#   F:pci/intel8x0.c:1.139->1.140 
#   F:pci/intel8x0m.c:1.5->1.6 
#   F:pci/maestro3.c:1.52->1.53 
#   F:pci/rme32.c:1.35->1.36 
#   F:pci/rme96.c:1.37->1.38 
#   F:pci/sonicvibes.c:1.35->1.36 
#   F:pci/via82xx.c:1.105->1.106 
#   F:pci/ac97/ac97_codec.c:1.136->1.137 
#   F:pci/ac97/ac97_patch.c:1.54->1.55 
#   F:pci/ac97/ac97_pcm.c:1.14->1.15 
#   F:pci/ac97/ac97_proc.c:1.8->1.9 
#   F:pci/ac97/ak4531_codec.c:1.10->1.11 
#   F:pci/ali5451/ali5451.c:1.48->1.49 
#   F:pci/au88x0/au88x0.c:1.9->1.10 
#   F:pci/au88x0/au88x0.h:1.5->1.6 
#   F:pci/au88x0/au88x0_core.c:1.4->1.5 
#   F:pci/au88x0/au88x0_mpu401.c:1.1->1.2 
#   F:pci/au88x0/au88x0_pcm.c:1.3->1.4 
#   F:pci/cs46xx/cs46xx_lib.c:1.74->1.75 
#   F:pci/cs46xx/cs46xx_lib.h:1.12->1.13 
#   F:pci/cs46xx/dsp_spos.c:1.24->1.25 
#   F:pci/cs46xx/dsp_spos_scb_lib.c:1.23->1.24 
#   F:pci/emu10k1/emu10k1_callback.c:1.11->1.12 
#   F:pci/emu10k1/emu10k1_main.c:1.34->1.35 
#   F:pci/emu10k1/emu10k1_patch.c:1.5->1.6 
#   F:pci/emu10k1/emu10k1_synth.c:1.8->1.9 
#   F:pci/emu10k1/emufx.c:1.56->1.57 
#   F:pci/emu10k1/emumixer.c:1.22->1.23 
#   F:pci/emu10k1/emupcm.c:1.27->1.28 
#   F:pci/emu10k1/emuproc.c:1.17->1.18 
#   F:pci/emu10k1/io.c:1.6->1.7 
#   F:pci/emu10k1/irq.c:1.9->1.10 
#   F:pci/ice1712/delta.c:1.17->1.18 
#   F:pci/ice1712/ews.c:1.17->1.18 
#   F:pci/ice1712/ice1712.c:1.53->1.54 
#   F:pci/ice1712/ice1712.h:1.21->1.22 
#   F:pci/ice1712/ice1724.c:1.35->1.36 
#   F:pci/korg1212/korg1212.c:1.40->1.41 
#   F:pci/mixart/mixart.c:1.10->1.11 
#   F:pci/mixart/mixart_core.c:1.6->1.7 
#   F:pci/mixart/mixart_hwdep.c:1.5->1.6 
#   F:pci/mixart/mixart_mixer.c:1.2->1.3 
#   F:pci/nm256/nm256.c:1.40->1.41 
#   F:pci/rme9652/hdsp.c:1.59->1.60 
#   F:pci/rme9652/rme9652.c:1.46->1.47 
#   F:pci/trident/trident_main.c:1.58->1.59 
#   F:pci/trident/trident_synth.c:1.13->1.14 
#   F:pci/vx222/vx222.c:1.5->1.6 
#   F:pci/vx222/vx222_ops.c:1.6->1.7 
#   F:pci/ymfpci/ymfpci_main.c:1.51->1.52 
#   L:Removal and replacement of magic memory allocators and casts (pci part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/01 19:31:59+02:00 perex@suse.cz 
#   ALSA CVS update
#   Control Midlevel,ALSA Core,HWDEP Midlevel,PCM Midlevel,RawMidi Midlevel
#   Timer Midlevel,IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer
#   Removal and replacement of magic memory allocators and casts (core part)
#   
#   This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   with kmalloc(), kcalloc() and kfree(), respectively.
#   The cast via snd_magic_cast() is replaced with the standard cast, too.
#   
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/timer.c
#   2004/06/29 11:09:18+02:00 perex@suse.cz +23 -23
#   ALSA CVS update
#   D:2004/06/29 17:09:17
#   C:Control Midlevel,ALSA Core,HWDEP Midlevel,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer
#   F:core/control.c:1.45->1.46 
#   F:core/device.c:1.15->1.16 
#   F:core/hwdep.c:1.25->1.26 
#   F:core/info.c:1.45->1.46 
#   F:core/memory.c:1.29->1.30 
#   F:core/pcm.c:1.43->1.44 
#   F:core/pcm_native.c:1.97->1.98 
#   F:core/pcm_timer.c:1.7->1.8 
#   F:core/rawmidi.c:1.44->1.45 
#   F:core/sound.c:1.63->1.64 
#   F:core/timer.c:1.59->1.60 
#   F:core/ioctl32/ioctl32.c:1.19->1.20 
#   F:core/ioctl32/pcm32.c:1.16->1.17 
#   F:core/oss/mixer_oss.c:1.31->1.32 
#   F:core/oss/pcm_oss.c:1.71->1.72 
#   F:core/seq/seq_device.c:1.14->1.15 
#   F:core/seq/seq_dummy.c:1.11->1.12 
#   F:core/seq/seq_virmidi.c:1.11->1.12 
#   F:include/control.h:1.7->1.8 
#   F:include/driver.h:1.16->1.17 
#   F:include/pcm.h:1.43->1.44 
#   F:include/sndmagic.h:1.27->1.28(DEAD) 
#   F:include/timer.h:1.17->1.18 
#   L:Removal and replacement of magic memory allocators and casts (core part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/sound.c
#   2004/06/29 11:09:17+02:00 perex@suse.cz +0 -3
#   ALSA CVS update
#   D:2004/06/29 17:09:17
#   C:Control Midlevel,ALSA Core,HWDEP Midlevel,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer
#   F:core/control.c:1.45->1.46 
#   F:core/device.c:1.15->1.16 
#   F:core/hwdep.c:1.25->1.26 
#   F:core/info.c:1.45->1.46 
#   F:core/memory.c:1.29->1.30 
#   F:core/pcm.c:1.43->1.44 
#   F:core/pcm_native.c:1.97->1.98 
#   F:core/pcm_timer.c:1.7->1.8 
#   F:core/rawmidi.c:1.44->1.45 
#   F:core/sound.c:1.63->1.64 
#   F:core/timer.c:1.59->1.60 
#   F:core/ioctl32/ioctl32.c:1.19->1.20 
#   F:core/ioctl32/pcm32.c:1.16->1.17 
#   F:core/oss/mixer_oss.c:1.31->1.32 
#   F:core/oss/pcm_oss.c:1.71->1.72 
#   F:core/seq/seq_device.c:1.14->1.15 
#   F:core/seq/seq_dummy.c:1.11->1.12 
#   F:core/seq/seq_virmidi.c:1.11->1.12 
#   F:include/control.h:1.7->1.8 
#   F:include/driver.h:1.16->1.17 
#   F:include/pcm.h:1.43->1.44 
#   F:include/sndmagic.h:1.27->1.28(DEAD) 
#   F:include/timer.h:1.17->1.18 
#   L:Removal and replacement of magic memory allocators and casts (core part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/seq_virmidi.c
#   2004/06/29 11:09:19+02:00 perex@suse.cz +23 -23
#   ALSA CVS update
#   D:2004/06/29 17:09:17
#   C:Control Midlevel,ALSA Core,HWDEP Midlevel,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer
#   F:core/control.c:1.45->1.46 
#   F:core/device.c:1.15->1.16 
#   F:core/hwdep.c:1.25->1.26 
#   F:core/info.c:1.45->1.46 
#   F:core/memory.c:1.29->1.30 
#   F:core/pcm.c:1.43->1.44 
#   F:core/pcm_native.c:1.97->1.98 
#   F:core/pcm_timer.c:1.7->1.8 
#   F:core/rawmidi.c:1.44->1.45 
#   F:core/sound.c:1.63->1.64 
#   F:core/timer.c:1.59->1.60 
#   F:core/ioctl32/ioctl32.c:1.19->1.20 
#   F:core/ioctl32/pcm32.c:1.16->1.17 
#   F:core/oss/mixer_oss.c:1.31->1.32 
#   F:core/oss/pcm_oss.c:1.71->1.72 
#   F:core/seq/seq_device.c:1.14->1.15 
#   F:core/seq/seq_dummy.c:1.11->1.12 
#   F:core/seq/seq_virmidi.c:1.11->1.12 
#   F:include/control.h:1.7->1.8 
#   F:include/driver.h:1.16->1.17 
#   F:include/pcm.h:1.43->1.44 
#   F:include/sndmagic.h:1.27->1.28(DEAD) 
#   F:include/timer.h:1.17->1.18 
#   L:Removal and replacement of magic memory allocators and casts (core part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/seq_dummy.c
#   2004/06/29 11:09:19+02:00 perex@suse.cz +6 -6
#   ALSA CVS update
#   D:2004/06/29 17:09:17
#   C:Control Midlevel,ALSA Core,HWDEP Midlevel,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer
#   F:core/control.c:1.45->1.46 
#   F:core/device.c:1.15->1.16 
#   F:core/hwdep.c:1.25->1.26 
#   F:core/info.c:1.45->1.46 
#   F:core/memory.c:1.29->1.30 
#   F:core/pcm.c:1.43->1.44 
#   F:core/pcm_native.c:1.97->1.98 
#   F:core/pcm_timer.c:1.7->1.8 
#   F:core/rawmidi.c:1.44->1.45 
#   F:core/sound.c:1.63->1.64 
#   F:core/timer.c:1.59->1.60 
#   F:core/ioctl32/ioctl32.c:1.19->1.20 
#   F:core/ioctl32/pcm32.c:1.16->1.17 
#   F:core/oss/mixer_oss.c:1.31->1.32 
#   F:core/oss/pcm_oss.c:1.71->1.72 
#   F:core/seq/seq_device.c:1.14->1.15 
#   F:core/seq/seq_dummy.c:1.11->1.12 
#   F:core/seq/seq_virmidi.c:1.11->1.12 
#   F:include/control.h:1.7->1.8 
#   F:include/driver.h:1.16->1.17 
#   F:include/pcm.h:1.43->1.44 
#   F:include/sndmagic.h:1.27->1.28(DEAD) 
#   F:include/timer.h:1.17->1.18 
#   L:Removal and replacement of magic memory allocators and casts (core part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/seq_device.c
#   2004/06/29 11:09:19+02:00 perex@suse.cz +6 -6
#   ALSA CVS update
#   D:2004/06/29 17:09:17
#   C:Control Midlevel,ALSA Core,HWDEP Midlevel,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer
#   F:core/control.c:1.45->1.46 
#   F:core/device.c:1.15->1.16 
#   F:core/hwdep.c:1.25->1.26 
#   F:core/info.c:1.45->1.46 
#   F:core/memory.c:1.29->1.30 
#   F:core/pcm.c:1.43->1.44 
#   F:core/pcm_native.c:1.97->1.98 
#   F:core/pcm_timer.c:1.7->1.8 
#   F:core/rawmidi.c:1.44->1.45 
#   F:core/sound.c:1.63->1.64 
#   F:core/timer.c:1.59->1.60 
#   F:core/ioctl32/ioctl32.c:1.19->1.20 
#   F:core/ioctl32/pcm32.c:1.16->1.17 
#   F:core/oss/mixer_oss.c:1.31->1.32 
#   F:core/oss/pcm_oss.c:1.71->1.72 
#   F:core/seq/seq_device.c:1.14->1.15 
#   F:core/seq/seq_dummy.c:1.11->1.12 
#   F:core/seq/seq_virmidi.c:1.11->1.12 
#   F:include/control.h:1.7->1.8 
#   F:include/driver.h:1.16->1.17 
#   F:include/pcm.h:1.43->1.44 
#   F:include/sndmagic.h:1.27->1.28(DEAD) 
#   F:include/timer.h:1.17->1.18 
#   L:Removal and replacement of magic memory allocators and casts (core part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/rawmidi.c
#   2004/06/29 11:09:17+02:00 perex@suse.cz +16 -16
#   ALSA CVS update
#   D:2004/06/29 17:09:17
#   C:Control Midlevel,ALSA Core,HWDEP Midlevel,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer
#   F:core/control.c:1.45->1.46 
#   F:core/device.c:1.15->1.16 
#   F:core/hwdep.c:1.25->1.26 
#   F:core/info.c:1.45->1.46 
#   F:core/memory.c:1.29->1.30 
#   F:core/pcm.c:1.43->1.44 
#   F:core/pcm_native.c:1.97->1.98 
#   F:core/pcm_timer.c:1.7->1.8 
#   F:core/rawmidi.c:1.44->1.45 
#   F:core/sound.c:1.63->1.64 
#   F:core/timer.c:1.59->1.60 
#   F:core/ioctl32/ioctl32.c:1.19->1.20 
#   F:core/ioctl32/pcm32.c:1.16->1.17 
#   F:core/oss/mixer_oss.c:1.31->1.32 
#   F:core/oss/pcm_oss.c:1.71->1.72 
#   F:core/seq/seq_device.c:1.14->1.15 
#   F:core/seq/seq_dummy.c:1.11->1.12 
#   F:core/seq/seq_virmidi.c:1.11->1.12 
#   F:include/control.h:1.7->1.8 
#   F:include/driver.h:1.16->1.17 
#   F:include/pcm.h:1.43->1.44 
#   F:include/sndmagic.h:1.27->1.28(DEAD) 
#   F:include/timer.h:1.17->1.18 
#   L:Removal and replacement of magic memory allocators and casts (core part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/pcm_timer.c
#   2004/06/29 11:09:17+02:00 perex@suse.cz +2 -4
#   ALSA CVS update
#   D:2004/06/29 17:09:17
#   C:Control Midlevel,ALSA Core,HWDEP Midlevel,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer
#   F:core/control.c:1.45->1.46 
#   F:core/device.c:1.15->1.16 
#   F:core/hwdep.c:1.25->1.26 
#   F:core/info.c:1.45->1.46 
#   F:core/memory.c:1.29->1.30 
#   F:core/pcm.c:1.43->1.44 
#   F:core/pcm_native.c:1.97->1.98 
#   F:core/pcm_timer.c:1.7->1.8 
#   F:core/rawmidi.c:1.44->1.45 
#   F:core/sound.c:1.63->1.64 
#   F:core/timer.c:1.59->1.60 
#   F:core/ioctl32/ioctl32.c:1.19->1.20 
#   F:core/ioctl32/pcm32.c:1.16->1.17 
#   F:core/oss/mixer_oss.c:1.31->1.32 
#   F:core/oss/pcm_oss.c:1.71->1.72 
#   F:core/seq/seq_device.c:1.14->1.15 
#   F:core/seq/seq_dummy.c:1.11->1.12 
#   F:core/seq/seq_virmidi.c:1.11->1.12 
#   F:include/control.h:1.7->1.8 
#   F:include/driver.h:1.16->1.17 
#   F:include/pcm.h:1.43->1.44 
#   F:include/sndmagic.h:1.27->1.28(DEAD) 
#   F:include/timer.h:1.17->1.18 
#   L:Removal and replacement of magic memory allocators and casts (core part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/pcm_native.c
#   2004/06/29 11:09:17+02:00 perex@suse.cz +15 -15
#   ALSA CVS update
#   D:2004/06/29 17:09:17
#   C:Control Midlevel,ALSA Core,HWDEP Midlevel,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer
#   F:core/control.c:1.45->1.46 
#   F:core/device.c:1.15->1.16 
#   F:core/hwdep.c:1.25->1.26 
#   F:core/info.c:1.45->1.46 
#   F:core/memory.c:1.29->1.30 
#   F:core/pcm.c:1.43->1.44 
#   F:core/pcm_native.c:1.97->1.98 
#   F:core/pcm_timer.c:1.7->1.8 
#   F:core/rawmidi.c:1.44->1.45 
#   F:core/sound.c:1.63->1.64 
#   F:core/timer.c:1.59->1.60 
#   F:core/ioctl32/ioctl32.c:1.19->1.20 
#   F:core/ioctl32/pcm32.c:1.16->1.17 
#   F:core/oss/mixer_oss.c:1.31->1.32 
#   F:core/oss/pcm_oss.c:1.71->1.72 
#   F:core/seq/seq_device.c:1.14->1.15 
#   F:core/seq/seq_dummy.c:1.11->1.12 
#   F:core/seq/seq_virmidi.c:1.11->1.12 
#   F:include/control.h:1.7->1.8 
#   F:include/driver.h:1.16->1.17 
#   F:include/pcm.h:1.43->1.44 
#   F:include/sndmagic.h:1.27->1.28(DEAD) 
#   F:include/timer.h:1.17->1.18 
#   L:Removal and replacement of magic memory allocators and casts (core part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/pcm.c
#   2004/06/29 11:09:17+02:00 perex@suse.cz +9 -9
#   ALSA CVS update
#   D:2004/06/29 17:09:17
#   C:Control Midlevel,ALSA Core,HWDEP Midlevel,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer
#   F:core/control.c:1.45->1.46 
#   F:core/device.c:1.15->1.16 
#   F:core/hwdep.c:1.25->1.26 
#   F:core/info.c:1.45->1.46 
#   F:core/memory.c:1.29->1.30 
#   F:core/pcm.c:1.43->1.44 
#   F:core/pcm_native.c:1.97->1.98 
#   F:core/pcm_timer.c:1.7->1.8 
#   F:core/rawmidi.c:1.44->1.45 
#   F:core/sound.c:1.63->1.64 
#   F:core/timer.c:1.59->1.60 
#   F:core/ioctl32/ioctl32.c:1.19->1.20 
#   F:core/ioctl32/pcm32.c:1.16->1.17 
#   F:core/oss/mixer_oss.c:1.31->1.32 
#   F:core/oss/pcm_oss.c:1.71->1.72 
#   F:core/seq/seq_device.c:1.14->1.15 
#   F:core/seq/seq_dummy.c:1.11->1.12 
#   F:core/seq/seq_virmidi.c:1.11->1.12 
#   F:include/control.h:1.7->1.8 
#   F:include/driver.h:1.16->1.17 
#   F:include/pcm.h:1.43->1.44 
#   F:include/sndmagic.h:1.27->1.28(DEAD) 
#   F:include/timer.h:1.17->1.18 
#   L:Removal and replacement of magic memory allocators and casts (core part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/oss/pcm_oss.c
#   2004/06/29 11:09:19+02:00 perex@suse.cz +8 -8
#   ALSA CVS update
#   D:2004/06/29 17:09:17
#   C:Control Midlevel,ALSA Core,HWDEP Midlevel,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer
#   F:core/control.c:1.45->1.46 
#   F:core/device.c:1.15->1.16 
#   F:core/hwdep.c:1.25->1.26 
#   F:core/info.c:1.45->1.46 
#   F:core/memory.c:1.29->1.30 
#   F:core/pcm.c:1.43->1.44 
#   F:core/pcm_native.c:1.97->1.98 
#   F:core/pcm_timer.c:1.7->1.8 
#   F:core/rawmidi.c:1.44->1.45 
#   F:core/sound.c:1.63->1.64 
#   F:core/timer.c:1.59->1.60 
#   F:core/ioctl32/ioctl32.c:1.19->1.20 
#   F:core/ioctl32/pcm32.c:1.16->1.17 
#   F:core/oss/mixer_oss.c:1.31->1.32 
#   F:core/oss/pcm_oss.c:1.71->1.72 
#   F:core/seq/seq_device.c:1.14->1.15 
#   F:core/seq/seq_dummy.c:1.11->1.12 
#   F:core/seq/seq_virmidi.c:1.11->1.12 
#   F:include/control.h:1.7->1.8 
#   F:include/driver.h:1.16->1.17 
#   F:include/pcm.h:1.43->1.44 
#   F:include/sndmagic.h:1.27->1.28(DEAD) 
#   F:include/timer.h:1.17->1.18 
#   L:Removal and replacement of magic memory allocators and casts (core part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/oss/mixer_oss.c
#   2004/06/29 11:09:18+02:00 perex@suse.cz +6 -6
#   ALSA CVS update
#   D:2004/06/29 17:09:17
#   C:Control Midlevel,ALSA Core,HWDEP Midlevel,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer
#   F:core/control.c:1.45->1.46 
#   F:core/device.c:1.15->1.16 
#   F:core/hwdep.c:1.25->1.26 
#   F:core/info.c:1.45->1.46 
#   F:core/memory.c:1.29->1.30 
#   F:core/pcm.c:1.43->1.44 
#   F:core/pcm_native.c:1.97->1.98 
#   F:core/pcm_timer.c:1.7->1.8 
#   F:core/rawmidi.c:1.44->1.45 
#   F:core/sound.c:1.63->1.64 
#   F:core/timer.c:1.59->1.60 
#   F:core/ioctl32/ioctl32.c:1.19->1.20 
#   F:core/ioctl32/pcm32.c:1.16->1.17 
#   F:core/oss/mixer_oss.c:1.31->1.32 
#   F:core/oss/pcm_oss.c:1.71->1.72 
#   F:core/seq/seq_device.c:1.14->1.15 
#   F:core/seq/seq_dummy.c:1.11->1.12 
#   F:core/seq/seq_virmidi.c:1.11->1.12 
#   F:include/control.h:1.7->1.8 
#   F:include/driver.h:1.16->1.17 
#   F:include/pcm.h:1.43->1.44 
#   F:include/sndmagic.h:1.27->1.28(DEAD) 
#   F:include/timer.h:1.17->1.18 
#   L:Removal and replacement of magic memory allocators and casts (core part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/memory.c
#   2004/06/29 11:09:17+02:00 perex@suse.cz +0 -40
#   ALSA CVS update
#   D:2004/06/29 17:09:17
#   C:Control Midlevel,ALSA Core,HWDEP Midlevel,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer
#   F:core/control.c:1.45->1.46 
#   F:core/device.c:1.15->1.16 
#   F:core/hwdep.c:1.25->1.26 
#   F:core/info.c:1.45->1.46 
#   F:core/memory.c:1.29->1.30 
#   F:core/pcm.c:1.43->1.44 
#   F:core/pcm_native.c:1.97->1.98 
#   F:core/pcm_timer.c:1.7->1.8 
#   F:core/rawmidi.c:1.44->1.45 
#   F:core/sound.c:1.63->1.64 
#   F:core/timer.c:1.59->1.60 
#   F:core/ioctl32/ioctl32.c:1.19->1.20 
#   F:core/ioctl32/pcm32.c:1.16->1.17 
#   F:core/oss/mixer_oss.c:1.31->1.32 
#   F:core/oss/pcm_oss.c:1.71->1.72 
#   F:core/seq/seq_device.c:1.14->1.15 
#   F:core/seq/seq_dummy.c:1.11->1.12 
#   F:core/seq/seq_virmidi.c:1.11->1.12 
#   F:include/control.h:1.7->1.8 
#   F:include/driver.h:1.16->1.17 
#   F:include/pcm.h:1.43->1.44 
#   F:include/sndmagic.h:1.27->1.28(DEAD) 
#   F:include/timer.h:1.17->1.18 
#   L:Removal and replacement of magic memory allocators and casts (core part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/ioctl32/pcm32.c
#   2004/06/29 11:09:18+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 17:09:17
#   C:Control Midlevel,ALSA Core,HWDEP Midlevel,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer
#   F:core/control.c:1.45->1.46 
#   F:core/device.c:1.15->1.16 
#   F:core/hwdep.c:1.25->1.26 
#   F:core/info.c:1.45->1.46 
#   F:core/memory.c:1.29->1.30 
#   F:core/pcm.c:1.43->1.44 
#   F:core/pcm_native.c:1.97->1.98 
#   F:core/pcm_timer.c:1.7->1.8 
#   F:core/rawmidi.c:1.44->1.45 
#   F:core/sound.c:1.63->1.64 
#   F:core/timer.c:1.59->1.60 
#   F:core/ioctl32/ioctl32.c:1.19->1.20 
#   F:core/ioctl32/pcm32.c:1.16->1.17 
#   F:core/oss/mixer_oss.c:1.31->1.32 
#   F:core/oss/pcm_oss.c:1.71->1.72 
#   F:core/seq/seq_device.c:1.14->1.15 
#   F:core/seq/seq_dummy.c:1.11->1.12 
#   F:core/seq/seq_virmidi.c:1.11->1.12 
#   F:include/control.h:1.7->1.8 
#   F:include/driver.h:1.16->1.17 
#   F:include/pcm.h:1.43->1.44 
#   F:include/sndmagic.h:1.27->1.28(DEAD) 
#   F:include/timer.h:1.17->1.18 
#   L:Removal and replacement of magic memory allocators and casts (core part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/ioctl32/ioctl32.c
#   2004/06/29 11:09:18+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 17:09:17
#   C:Control Midlevel,ALSA Core,HWDEP Midlevel,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer
#   F:core/control.c:1.45->1.46 
#   F:core/device.c:1.15->1.16 
#   F:core/hwdep.c:1.25->1.26 
#   F:core/info.c:1.45->1.46 
#   F:core/memory.c:1.29->1.30 
#   F:core/pcm.c:1.43->1.44 
#   F:core/pcm_native.c:1.97->1.98 
#   F:core/pcm_timer.c:1.7->1.8 
#   F:core/rawmidi.c:1.44->1.45 
#   F:core/sound.c:1.63->1.64 
#   F:core/timer.c:1.59->1.60 
#   F:core/ioctl32/ioctl32.c:1.19->1.20 
#   F:core/ioctl32/pcm32.c:1.16->1.17 
#   F:core/oss/mixer_oss.c:1.31->1.32 
#   F:core/oss/pcm_oss.c:1.71->1.72 
#   F:core/seq/seq_device.c:1.14->1.15 
#   F:core/seq/seq_dummy.c:1.11->1.12 
#   F:core/seq/seq_virmidi.c:1.11->1.12 
#   F:include/control.h:1.7->1.8 
#   F:include/driver.h:1.16->1.17 
#   F:include/pcm.h:1.43->1.44 
#   F:include/sndmagic.h:1.27->1.28(DEAD) 
#   F:include/timer.h:1.17->1.18 
#   L:Removal and replacement of magic memory allocators and casts (core part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/info.c
#   2004/06/29 11:09:17+02:00 perex@suse.cz +21 -21
#   ALSA CVS update
#   D:2004/06/29 17:09:17
#   C:Control Midlevel,ALSA Core,HWDEP Midlevel,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer
#   F:core/control.c:1.45->1.46 
#   F:core/device.c:1.15->1.16 
#   F:core/hwdep.c:1.25->1.26 
#   F:core/info.c:1.45->1.46 
#   F:core/memory.c:1.29->1.30 
#   F:core/pcm.c:1.43->1.44 
#   F:core/pcm_native.c:1.97->1.98 
#   F:core/pcm_timer.c:1.7->1.8 
#   F:core/rawmidi.c:1.44->1.45 
#   F:core/sound.c:1.63->1.64 
#   F:core/timer.c:1.59->1.60 
#   F:core/ioctl32/ioctl32.c:1.19->1.20 
#   F:core/ioctl32/pcm32.c:1.16->1.17 
#   F:core/oss/mixer_oss.c:1.31->1.32 
#   F:core/oss/pcm_oss.c:1.71->1.72 
#   F:core/seq/seq_device.c:1.14->1.15 
#   F:core/seq/seq_dummy.c:1.11->1.12 
#   F:core/seq/seq_virmidi.c:1.11->1.12 
#   F:include/control.h:1.7->1.8 
#   F:include/driver.h:1.16->1.17 
#   F:include/pcm.h:1.43->1.44 
#   F:include/sndmagic.h:1.27->1.28(DEAD) 
#   F:include/timer.h:1.17->1.18 
#   L:Removal and replacement of magic memory allocators and casts (core part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/hwdep.c
#   2004/06/29 11:09:17+02:00 perex@suse.cz +12 -12
#   ALSA CVS update
#   D:2004/06/29 17:09:17
#   C:Control Midlevel,ALSA Core,HWDEP Midlevel,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer
#   F:core/control.c:1.45->1.46 
#   F:core/device.c:1.15->1.16 
#   F:core/hwdep.c:1.25->1.26 
#   F:core/info.c:1.45->1.46 
#   F:core/memory.c:1.29->1.30 
#   F:core/pcm.c:1.43->1.44 
#   F:core/pcm_native.c:1.97->1.98 
#   F:core/pcm_timer.c:1.7->1.8 
#   F:core/rawmidi.c:1.44->1.45 
#   F:core/sound.c:1.63->1.64 
#   F:core/timer.c:1.59->1.60 
#   F:core/ioctl32/ioctl32.c:1.19->1.20 
#   F:core/ioctl32/pcm32.c:1.16->1.17 
#   F:core/oss/mixer_oss.c:1.31->1.32 
#   F:core/oss/pcm_oss.c:1.71->1.72 
#   F:core/seq/seq_device.c:1.14->1.15 
#   F:core/seq/seq_dummy.c:1.11->1.12 
#   F:core/seq/seq_virmidi.c:1.11->1.12 
#   F:include/control.h:1.7->1.8 
#   F:include/driver.h:1.16->1.17 
#   F:include/pcm.h:1.43->1.44 
#   F:include/sndmagic.h:1.27->1.28(DEAD) 
#   F:include/timer.h:1.17->1.18 
#   L:Removal and replacement of magic memory allocators and casts (core part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/device.c
#   2004/06/29 11:09:17+02:00 perex@suse.cz +2 -2
#   ALSA CVS update
#   D:2004/06/29 17:09:17
#   C:Control Midlevel,ALSA Core,HWDEP Midlevel,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer
#   F:core/control.c:1.45->1.46 
#   F:core/device.c:1.15->1.16 
#   F:core/hwdep.c:1.25->1.26 
#   F:core/info.c:1.45->1.46 
#   F:core/memory.c:1.29->1.30 
#   F:core/pcm.c:1.43->1.44 
#   F:core/pcm_native.c:1.97->1.98 
#   F:core/pcm_timer.c:1.7->1.8 
#   F:core/rawmidi.c:1.44->1.45 
#   F:core/sound.c:1.63->1.64 
#   F:core/timer.c:1.59->1.60 
#   F:core/ioctl32/ioctl32.c:1.19->1.20 
#   F:core/ioctl32/pcm32.c:1.16->1.17 
#   F:core/oss/mixer_oss.c:1.31->1.32 
#   F:core/oss/pcm_oss.c:1.71->1.72 
#   F:core/seq/seq_device.c:1.14->1.15 
#   F:core/seq/seq_dummy.c:1.11->1.12 
#   F:core/seq/seq_virmidi.c:1.11->1.12 
#   F:include/control.h:1.7->1.8 
#   F:include/driver.h:1.16->1.17 
#   F:include/pcm.h:1.43->1.44 
#   F:include/sndmagic.h:1.27->1.28(DEAD) 
#   F:include/timer.h:1.17->1.18 
#   L:Removal and replacement of magic memory allocators and casts (core part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/control.c
#   2004/06/29 11:09:17+02:00 perex@suse.cz +9 -11
#   ALSA CVS update
#   D:2004/06/29 17:09:17
#   C:Control Midlevel,ALSA Core,HWDEP Midlevel,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer
#   F:core/control.c:1.45->1.46 
#   F:core/device.c:1.15->1.16 
#   F:core/hwdep.c:1.25->1.26 
#   F:core/info.c:1.45->1.46 
#   F:core/memory.c:1.29->1.30 
#   F:core/pcm.c:1.43->1.44 
#   F:core/pcm_native.c:1.97->1.98 
#   F:core/pcm_timer.c:1.7->1.8 
#   F:core/rawmidi.c:1.44->1.45 
#   F:core/sound.c:1.63->1.64 
#   F:core/timer.c:1.59->1.60 
#   F:core/ioctl32/ioctl32.c:1.19->1.20 
#   F:core/ioctl32/pcm32.c:1.16->1.17 
#   F:core/oss/mixer_oss.c:1.31->1.32 
#   F:core/oss/pcm_oss.c:1.71->1.72 
#   F:core/seq/seq_device.c:1.14->1.15 
#   F:core/seq/seq_dummy.c:1.11->1.12 
#   F:core/seq/seq_virmidi.c:1.11->1.12 
#   F:include/control.h:1.7->1.8 
#   F:include/driver.h:1.16->1.17 
#   F:include/pcm.h:1.43->1.44 
#   F:include/sndmagic.h:1.27->1.28(DEAD) 
#   F:include/timer.h:1.17->1.18 
#   L:Removal and replacement of magic memory allocators and casts (core part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/timer.h
#   2004/06/29 11:09:19+02:00 perex@suse.cz +1 -2
#   ALSA CVS update
#   D:2004/06/29 17:09:17
#   C:Control Midlevel,ALSA Core,HWDEP Midlevel,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer
#   F:core/control.c:1.45->1.46 
#   F:core/device.c:1.15->1.16 
#   F:core/hwdep.c:1.25->1.26 
#   F:core/info.c:1.45->1.46 
#   F:core/memory.c:1.29->1.30 
#   F:core/pcm.c:1.43->1.44 
#   F:core/pcm_native.c:1.97->1.98 
#   F:core/pcm_timer.c:1.7->1.8 
#   F:core/rawmidi.c:1.44->1.45 
#   F:core/sound.c:1.63->1.64 
#   F:core/timer.c:1.59->1.60 
#   F:core/ioctl32/ioctl32.c:1.19->1.20 
#   F:core/ioctl32/pcm32.c:1.16->1.17 
#   F:core/oss/mixer_oss.c:1.31->1.32 
#   F:core/oss/pcm_oss.c:1.71->1.72 
#   F:core/seq/seq_device.c:1.14->1.15 
#   F:core/seq/seq_dummy.c:1.11->1.12 
#   F:core/seq/seq_virmidi.c:1.11->1.12 
#   F:include/control.h:1.7->1.8 
#   F:include/driver.h:1.16->1.17 
#   F:include/pcm.h:1.43->1.44 
#   F:include/sndmagic.h:1.27->1.28(DEAD) 
#   F:include/timer.h:1.17->1.18 
#   L:Removal and replacement of magic memory allocators and casts (core part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/pcm.h
#   2004/06/29 11:09:19+02:00 perex@suse.cz +2 -4
#   ALSA CVS update
#   D:2004/06/29 17:09:17
#   C:Control Midlevel,ALSA Core,HWDEP Midlevel,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer
#   F:core/control.c:1.45->1.46 
#   F:core/device.c:1.15->1.16 
#   F:core/hwdep.c:1.25->1.26 
#   F:core/info.c:1.45->1.46 
#   F:core/memory.c:1.29->1.30 
#   F:core/pcm.c:1.43->1.44 
#   F:core/pcm_native.c:1.97->1.98 
#   F:core/pcm_timer.c:1.7->1.8 
#   F:core/rawmidi.c:1.44->1.45 
#   F:core/sound.c:1.63->1.64 
#   F:core/timer.c:1.59->1.60 
#   F:core/ioctl32/ioctl32.c:1.19->1.20 
#   F:core/ioctl32/pcm32.c:1.16->1.17 
#   F:core/oss/mixer_oss.c:1.31->1.32 
#   F:core/oss/pcm_oss.c:1.71->1.72 
#   F:core/seq/seq_device.c:1.14->1.15 
#   F:core/seq/seq_dummy.c:1.11->1.12 
#   F:core/seq/seq_virmidi.c:1.11->1.12 
#   F:include/control.h:1.7->1.8 
#   F:include/driver.h:1.16->1.17 
#   F:include/pcm.h:1.43->1.44 
#   F:include/sndmagic.h:1.27->1.28(DEAD) 
#   F:include/timer.h:1.17->1.18 
#   L:Removal and replacement of magic memory allocators and casts (core part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/driver.h
#   2004/06/29 11:09:19+02:00 perex@suse.cz +0 -2
#   ALSA CVS update
#   D:2004/06/29 17:09:17
#   C:Control Midlevel,ALSA Core,HWDEP Midlevel,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer
#   F:core/control.c:1.45->1.46 
#   F:core/device.c:1.15->1.16 
#   F:core/hwdep.c:1.25->1.26 
#   F:core/info.c:1.45->1.46 
#   F:core/memory.c:1.29->1.30 
#   F:core/pcm.c:1.43->1.44 
#   F:core/pcm_native.c:1.97->1.98 
#   F:core/pcm_timer.c:1.7->1.8 
#   F:core/rawmidi.c:1.44->1.45 
#   F:core/sound.c:1.63->1.64 
#   F:core/timer.c:1.59->1.60 
#   F:core/ioctl32/ioctl32.c:1.19->1.20 
#   F:core/ioctl32/pcm32.c:1.16->1.17 
#   F:core/oss/mixer_oss.c:1.31->1.32 
#   F:core/oss/pcm_oss.c:1.71->1.72 
#   F:core/seq/seq_device.c:1.14->1.15 
#   F:core/seq/seq_dummy.c:1.11->1.12 
#   F:core/seq/seq_virmidi.c:1.11->1.12 
#   F:include/control.h:1.7->1.8 
#   F:include/driver.h:1.16->1.17 
#   F:include/pcm.h:1.43->1.44 
#   F:include/sndmagic.h:1.27->1.28(DEAD) 
#   F:include/timer.h:1.17->1.18 
#   L:Removal and replacement of magic memory allocators and casts (core part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/control.h
#   2004/06/29 11:09:19+02:00 perex@suse.cz +1 -2
#   ALSA CVS update
#   D:2004/06/29 17:09:17
#   C:Control Midlevel,ALSA Core,HWDEP Midlevel,PCM Midlevel,RawMidi Midlevel
#   C:Timer Midlevel,IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer
#   F:core/control.c:1.45->1.46 
#   F:core/device.c:1.15->1.16 
#   F:core/hwdep.c:1.25->1.26 
#   F:core/info.c:1.45->1.46 
#   F:core/memory.c:1.29->1.30 
#   F:core/pcm.c:1.43->1.44 
#   F:core/pcm_native.c:1.97->1.98 
#   F:core/pcm_timer.c:1.7->1.8 
#   F:core/rawmidi.c:1.44->1.45 
#   F:core/sound.c:1.63->1.64 
#   F:core/timer.c:1.59->1.60 
#   F:core/ioctl32/ioctl32.c:1.19->1.20 
#   F:core/ioctl32/pcm32.c:1.16->1.17 
#   F:core/oss/mixer_oss.c:1.31->1.32 
#   F:core/oss/pcm_oss.c:1.71->1.72 
#   F:core/seq/seq_device.c:1.14->1.15 
#   F:core/seq/seq_dummy.c:1.11->1.12 
#   F:core/seq/seq_virmidi.c:1.11->1.12 
#   F:include/control.h:1.7->1.8 
#   F:include/driver.h:1.16->1.17 
#   F:include/pcm.h:1.43->1.44 
#   F:include/sndmagic.h:1.27->1.28(DEAD) 
#   F:include/timer.h:1.17->1.18 
#   L:Removal and replacement of magic memory allocators and casts (core part)
#   L:
#   L:This patch replaces snd_magic_kmalloc(), snd_magic_kcallc() and snd_magic_kfree()
#   L:with kmalloc(), kcalloc() and kfree(), respectively.
#   L:The cast via snd_magic_cast() is replaced with the standard cast, too.
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# BitKeeper/deleted/.del-sndmagic.h~23e344d25055e00c
#   2004/07/01 19:31:43+02:00 perex@suse.cz +0 -0
#   Delete: include/sound/sndmagic.h
# 
# ChangeSet
#   2004/07/01 19:28:12+02:00 perex@suse.cz 
#   ALSA CVS update
#   Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   Synth,Common EMU synth
#   Removal of snd_kcalloc()
#   
#   This patch removes snd_kcalloc() from the kernel and updates callers to use
#   the new generic kcalloc().
#   
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/synth/util_mem.c
#   2004/06/29 10:55:14+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/synth/emux/soundfont.c
#   2004/06/29 10:55:14+02:00 perex@suse.cz +4 -4
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/synth/emux/emux_seq.c
#   2004/06/29 10:55:14+02:00 perex@suse.cz +2 -2
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/synth/emux/emux_effect.c
#   2004/06/29 10:55:14+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/synth/emux/emux.c
#   2004/06/29 10:55:14+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/trident/trident_main.c
#   2004/06/29 10:55:13+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/revo.c
#   2004/06/29 10:55:13+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/aureon.c
#   2004/06/29 10:55:13+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/emu10k1/emufx.c
#   2004/06/29 10:55:13+02:00 perex@suse.cz +6 -6
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/au88x0/au88x0_game.c
#   2004/06/29 10:55:12+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ac97/ac97_pcm.c
#   2004/06/29 10:55:11+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/sb/emu8000_pcm.c
#   2004/06/29 10:55:11+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/drivers/opl3/opl3_oss.c
#   2004/06/29 10:55:11+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/timer.c
#   2004/06/29 10:55:09+02:00 perex@suse.cz +2 -2
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/sound.c
#   2004/06/29 10:55:09+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/seq_timer.c
#   2004/06/29 10:55:10+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/seq_queue.c
#   2004/06/29 10:55:10+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/seq_prioq.c
#   2004/06/29 10:55:10+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/seq_ports.c
#   2004/06/29 10:55:10+02:00 perex@suse.cz +2 -2
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/seq_midi_event.c
#   2004/06/29 10:55:10+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/seq_midi.c
#   2004/06/29 10:55:10+02:00 perex@suse.cz +2 -2
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/seq_memory.c
#   2004/06/29 10:55:10+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/seq_instr.c
#   2004/06/29 10:55:10+02:00 perex@suse.cz +3 -6
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/seq_fifo.c
#   2004/06/29 10:55:10+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/seq_clientmgr.c
#   2004/06/29 10:55:10+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/oss/seq_oss_writeq.c
#   2004/06/29 10:55:10+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/oss/seq_oss_timer.c
#   2004/06/29 10:55:10+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/oss/seq_oss_synth.c
#   2004/06/29 10:55:10+02:00 perex@suse.cz +5 -3
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/oss/seq_oss_readq.c
#   2004/06/29 10:55:10+02:00 perex@suse.cz +2 -2
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/oss/seq_oss_midi.c
#   2004/06/29 10:55:10+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/oss/seq_oss_init.c
#   2004/06/29 10:55:10+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/instr/ainstr_iw.c
#   2004/06/29 10:55:10+02:00 perex@suse.cz +3 -3
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/instr/ainstr_gf1.c
#   2004/06/29 10:55:10+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/rawmidi.c
#   2004/06/29 10:55:09+02:00 perex@suse.cz +3 -3
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/pcm_memory.c
#   2004/06/29 10:55:08+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/pcm_lib.c
#   2004/06/29 10:55:08+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/pcm.c
#   2004/06/29 10:55:08+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/oss/route.c
#   2004/06/29 10:55:10+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/oss/pcm_plugin.h
#   2004/06/29 10:55:10+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/oss/pcm_plugin.c
#   2004/06/29 10:55:10+02:00 perex@suse.cz +4 -4
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/oss/mixer_oss.c
#   2004/06/29 10:55:10+02:00 perex@suse.cz +13 -13
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/memory.c
#   2004/06/29 10:55:08+02:00 perex@suse.cz +11 -19
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/ioctl32/pcm32.c
#   2004/06/29 10:55:09+02:00 perex@suse.cz +2 -2
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/init.c
#   2004/06/29 10:55:08+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/info.c
#   2004/06/29 10:55:08+02:00 perex@suse.cz +2 -4
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/control.c
#   2004/06/29 10:55:08+02:00 perex@suse.cz +3 -4
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/core.h
#   2004/06/29 10:55:11+02:00 perex@suse.cz +2 -1
#   ALSA CVS update
#   D:2004/06/29 16:55:08
#   C:Control Midlevel,ALSA Core,PCM Midlevel,RawMidi Midlevel,Timer Midlevel
#   C:IOCTL32 emulation,ALSA<-OSS emulation,ALSA sequencer,Instrument layer
#   C:ALSA<-OSS sequencer,OPL3,EMU8000 driver,AC97 Codec Core,au88x0 driver
#   C:EMU10K1/EMU10K2 driver,ICE1712 driver,ICE1724 driver,Trident driver
#   C:Synth,Common EMU synth
#   F:core/control.c:1.44->1.45 
#   F:core/info.c:1.44->1.45 
#   F:core/init.c:1.46->1.47 
#   F:core/memory.c:1.28->1.29 
#   F:core/pcm.c:1.42->1.43 
#   F:core/pcm_lib.c:1.51->1.52 
#   F:core/pcm_memory.c:1.29->1.30 
#   F:core/rawmidi.c:1.43->1.44 
#   F:core/sound.c:1.62->1.63 
#   F:core/timer.c:1.58->1.59 
#   F:core/ioctl32/pcm32.c:1.15->1.16 
#   F:core/oss/mixer_oss.c:1.30->1.31 
#   F:core/oss/pcm_plugin.c:1.19->1.20 
#   F:core/oss/pcm_plugin.h:1.6->1.7 
#   F:core/oss/route.c:1.7->1.8 
#   F:core/seq/seq_clientmgr.c:1.30->1.31 
#   F:core/seq/seq_fifo.c:1.8->1.9 
#   F:core/seq/seq_instr.c:1.8->1.9 
#   F:core/seq/seq_memory.c:1.15->1.16 
#   F:core/seq/seq_midi.c:1.20->1.21 
#   F:core/seq/seq_midi_event.c:1.12->1.13 
#   F:core/seq/seq_ports.c:1.16->1.17 
#   F:core/seq/seq_prioq.c:1.8->1.9 
#   F:core/seq/seq_queue.c:1.14->1.15 
#   F:core/seq/seq_timer.c:1.19->1.20 
#   F:core/seq/instr/ainstr_gf1.c:1.7->1.8 
#   F:core/seq/instr/ainstr_iw.c:1.8->1.9 
#   F:core/seq/oss/seq_oss_init.c:1.12->1.13 
#   F:core/seq/oss/seq_oss_midi.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_readq.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_synth.c:1.15->1.16 
#   F:core/seq/oss/seq_oss_timer.c:1.6->1.7 
#   F:core/seq/oss/seq_oss_writeq.c:1.5->1.6 
#   F:drivers/opl3/opl3_oss.c:1.12->1.13 
#   F:include/core.h:1.53->1.54 
#   F:isa/sb/emu8000_pcm.c:1.12->1.13 
#   F:pci/ac97/ac97_pcm.c:1.13->1.14 
#   F:pci/au88x0/au88x0_game.c:1.4->1.5 
#   F:pci/emu10k1/emufx.c:1.55->1.56 
#   F:pci/ice1712/aureon.c:1.11->1.12 
#   F:pci/ice1712/revo.c:1.7->1.8 
#   F:pci/trident/trident_main.c:1.57->1.58 
#   F:synth/util_mem.c:1.5->1.6 
#   F:synth/emux/emux.c:1.10->1.11 
#   F:synth/emux/emux_effect.c:1.6->1.7 
#   F:synth/emux/emux_seq.c:1.10->1.11 
#   F:synth/emux/soundfont.c:1.11->1.12 
#   L:Removal of snd_kcalloc()
#   L:
#   L:This patch removes snd_kcalloc() from the kernel and updates callers to use
#   L:the new generic kcalloc().
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/01 19:27:42+02:00 perex@suse.cz 
#   ALSA CVS update
#   ICE1712 driver,ICE1724 driver
#   Fixes for VT1720/VT1724
#   
#   - Fixed the volume update on aureon.
#   - Removed the bogus master volume from aureon.
#   - Fixed the wrong number of ADCS (not used, though).
#   - Don't access GPIO high bits on VT1720.
#   - Fixed the buffer byte alignment for SPDIF and independen PCMs.
#   - Proper rate constraints according to the I2S/AC-link connection.
#   - Clean up the private data for PCM callbacks.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/revo.c
#   2004/06/29 05:49:02+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/29 11:49:02
#   C:ICE1712 driver,ICE1724 driver
#   F:pci/ice1712/aureon.c:1.10->1.11 
#   F:pci/ice1712/ice1724.c:1.34->1.35 
#   F:pci/ice1712/revo.c:1.6->1.7 
#   L:Fixes for VT1720/VT1724
#   L:
#   L:- Fixed the volume update on aureon.
#   L:- Removed the bogus master volume from aureon.
#   L:- Fixed the wrong number of ADCS (not used, though).
#   L:- Don't access GPIO high bits on VT1720.
#   L:- Fixed the buffer byte alignment for SPDIF and independen PCMs.
#   L:- Proper rate constraints according to the I2S/AC-link connection.
#   L:- Clean up the private data for PCM callbacks.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/ice1724.c
#   2004/06/29 05:49:02+02:00 perex@suse.cz +104 -90
#   ALSA CVS update
#   D:2004/06/29 11:49:02
#   C:ICE1712 driver,ICE1724 driver
#   F:pci/ice1712/aureon.c:1.10->1.11 
#   F:pci/ice1712/ice1724.c:1.34->1.35 
#   F:pci/ice1712/revo.c:1.6->1.7 
#   L:Fixes for VT1720/VT1724
#   L:
#   L:- Fixed the volume update on aureon.
#   L:- Removed the bogus master volume from aureon.
#   L:- Fixed the wrong number of ADCS (not used, though).
#   L:- Don't access GPIO high bits on VT1720.
#   L:- Fixed the buffer byte alignment for SPDIF and independen PCMs.
#   L:- Proper rate constraints according to the I2S/AC-link connection.
#   L:- Clean up the private data for PCM callbacks.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/aureon.c
#   2004/06/29 05:49:02+02:00 perex@suse.cz +17 -13
#   ALSA CVS update
#   D:2004/06/29 11:49:02
#   C:ICE1712 driver,ICE1724 driver
#   F:pci/ice1712/aureon.c:1.10->1.11 
#   F:pci/ice1712/ice1724.c:1.34->1.35 
#   F:pci/ice1712/revo.c:1.6->1.7 
#   L:Fixes for VT1720/VT1724
#   L:
#   L:- Fixed the volume update on aureon.
#   L:- Removed the bogus master volume from aureon.
#   L:- Fixed the wrong number of ADCS (not used, though).
#   L:- Don't access GPIO high bits on VT1720.
#   L:- Fixed the buffer byte alignment for SPDIF and independen PCMs.
#   L:- Proper rate constraints according to the I2S/AC-link connection.
#   L:- Clean up the private data for PCM callbacks.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/01 19:27:20+02:00 perex@suse.cz 
#   ALSA CVS update
#   EMU10K1/EMU10K2 driver
#   Audigy 2 ZS - side support
#   
#   Added the support of side speakers on Audigy 2 ZS.
#   
#   TODO - detection of audigy 2 zs. Now it will add side controls to
#   mixer for audigy 2 to. Maybe left or right slider can control volume
#   of back center on audigy 2 too.
#   
#   Signed-off-by: Peter Zubaj <pzad@pobox.sk>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/emu10k1/emufx.c
#   2004/06/28 05:37:56+02:00 perex@suse.cz +34 -9
#   ALSA CVS update
#   D:2004/06/28 11:37:55
#   C:EMU10K1/EMU10K2 driver
#   F:include/emu10k1.h:1.41->1.42 
#   F:pci/emu10k1/emu10k1_main.c:1.33->1.34 
#   F:pci/emu10k1/emufx.c:1.54->1.55 
#   L:Audigy 2 ZS - side support
#   L:
#   L:Added the support of side speakers on Audigy 2 ZS.
#   L:
#   L:TODO - detection of audigy 2 zs. Now it will add side controls to
#   L:mixer for audigy 2 to. Maybe left or right slider can control volume
#   L:of back center on audigy 2 too.
#   Signed-off-by: Peter Zubaj <pzad@pobox.sk>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/emu10k1/emu10k1_main.c
#   2004/06/28 05:37:56+02:00 perex@suse.cz +7 -1
#   ALSA CVS update
#   D:2004/06/28 11:37:55
#   C:EMU10K1/EMU10K2 driver
#   F:include/emu10k1.h:1.41->1.42 
#   F:pci/emu10k1/emu10k1_main.c:1.33->1.34 
#   F:pci/emu10k1/emufx.c:1.54->1.55 
#   L:Audigy 2 ZS - side support
#   L:
#   L:Added the support of side speakers on Audigy 2 ZS.
#   L:
#   L:TODO - detection of audigy 2 zs. Now it will add side controls to
#   L:mixer for audigy 2 to. Maybe left or right slider can control volume
#   L:of back center on audigy 2 too.
#   Signed-off-by: Peter Zubaj <pzad@pobox.sk>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/emu10k1.h
#   2004/06/28 05:37:55+02:00 perex@suse.cz +6 -4
#   ALSA CVS update
#   D:2004/06/28 11:37:55
#   C:EMU10K1/EMU10K2 driver
#   F:include/emu10k1.h:1.41->1.42 
#   F:pci/emu10k1/emu10k1_main.c:1.33->1.34 
#   F:pci/emu10k1/emufx.c:1.54->1.55 
#   L:Audigy 2 ZS - side support
#   L:
#   L:Added the support of side speakers on Audigy 2 ZS.
#   L:
#   L:TODO - detection of audigy 2 zs. Now it will add side controls to
#   L:mixer for audigy 2 to. Maybe left or right slider can control volume
#   L:of back center on audigy 2 too.
#   Signed-off-by: Peter Zubaj <pzad@pobox.sk>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/01 19:26:58+02:00 perex@suse.cz 
#   ALSA CVS update
#   EMU10K1/EMU10K2 driver
#   Fix Audigy + FX8010 capture (hw:x,2)
#   
#   
#   This patch fixes capture problems from hw:x,2 on Audigy. It is same as
#    previous, because it can be applied cleanly against CVS (I tested
#   version from 23.06.2004) and hope it is still true for current CVS.
#   
#   I tested 4 channel recrding and it was OK.
#   
#   hw:x,2 records outputs from FX8010 (not FX buses)
#   
#   Using 'EFX voices mask' you can set channels what you want record.
#   
#   use alsactl store to store config
#   edit this config (set true for needed channel for 'EFX voices mask'
#   control) - I recorded channels 8,9,14,15 (front and rear output).
#   use alsactl restore to restore config
#   
#   Looks like channel count must be power of 2 (1, 2, 4, 8, ...).
#   
#   Signed-off-by: Peter Zubaj <pzad@pobox.sk>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/emu10k1/emuproc.c
#   2004/06/28 05:31:01+02:00 perex@suse.cz +94 -24
#   ALSA CVS update
#   D:2004/06/28 11:31:01
#   C:EMU10K1/EMU10K2 driver
#   F:pci/emu10k1/emupcm.c:1.26->1.27 
#   F:pci/emu10k1/emuproc.c:1.16->1.17 
#   L:Fix Audigy + FX8010 capture (hw:x,2)
#   L:
#   L:
#   L:This patch fixes capture problems from hw:x,2 on Audigy. It is same as
#   L: previous, because it can be applied cleanly against CVS (I tested
#   L:version from 23.06.2004) and hope it is still true for current CVS.
#   L:
#   L:I tested 4 channel recrding and it was OK.
#   L:
#   L:hw:x,2 records outputs from FX8010 (not FX buses)
#   L:
#   L:Using 'EFX voices mask' you can set channels what you want record.
#   L:
#   L:use alsactl store to store config
#   L:edit this config (set true for needed channel for 'EFX voices mask'
#   L:control) - I recorded channels 8,9,14,15 (front and rear output).
#   L:use alsactl restore to restore config
#   L:
#   L:Looks like channel count must be power of 2 (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/06/28 05:31:01+02:00 perex@suse.cz +15 -3
#   ALSA CVS update
#   D:2004/06/28 11:31:01
#   C:EMU10K1/EMU10K2 driver
#   F:pci/emu10k1/emupcm.c:1.26->1.27 
#   F:pci/emu10k1/emuproc.c:1.16->1.17 
#   L:Fix Audigy + FX8010 capture (hw:x,2)
#   L:
#   L:
#   L:This patch fixes capture problems from hw:x,2 on Audigy. It is same as
#   L: previous, because it can be applied cleanly against CVS (I tested
#   L:version from 23.06.2004) and hope it is still true for current CVS.
#   L:
#   L:I tested 4 channel recrding and it was OK.
#   L:
#   L:hw:x,2 records outputs from FX8010 (not FX buses)
#   L:
#   L:Using 'EFX voices mask' you can set channels what you want record.
#   L:
#   L:use alsactl store to store config
#   L:edit this config (set true for needed channel for 'EFX voices mask'
#   L:control) - I recorded channels 8,9,14,15 (front and rear output).
#   L:use alsactl restore to restore config
#   L:
#   L:Looks like channel count must be power of 2 (1, 2, 4, 8, ...).
#   Signed-off-by: Peter Zubaj <pzad@pobox.sk>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/01 19:26:36+02:00 perex@suse.cz 
#   ALSA CVS update
#   AC97 Codec Core
#   Fixed the detection of STAC9708/11 surround control.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ac97/ac97_patch.c
#   2004/06/25 11:12:39+02:00 perex@suse.cz +1 -0
#   ALSA CVS update
#   D:2004/06/25 17:12:39
#   C:AC97 Codec Core
#   F:pci/ac97/ac97_patch.c:1.53->1.54 
#   L:Fixed the detection of STAC9708/11 surround control.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/07/01 17:28:18+02:00 perex@suse.cz 
#   This patch introduces a kcalloc() in the kernel that is used to
#   replace the ALSA subsystem-specific snd_kcalloc() and snd_magic_kcalloc().
#   
#   Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
# 
# mm/slab.c
#   2004/07/01 17:28:02+02:00 perex@suse.cz +21 -0
#   Added kcalloc() implementation.
# 
# include/linux/slab.h
#   2004/07/01 17:28:02+02:00 perex@suse.cz +1 -0
#   Added kcalloc()
# 
# ChangeSet
#   2004/07/01 12:50:31+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/nm256/nm256.c
#   2004/07/01 12:50:20+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/pci/intel8x0.c
#   2004/07/01 12:50:20+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/core/oss/pcm_plugin.c
#   2004/07/01 12:50:20+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/core/pcm_native.c
#   2004/07/01 12:50:19+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/core/oss/pcm_oss.c
#   2004/07/01 12:50:19+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/core/memalloc.c
#   2004/07/01 12:50:19+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/06/23 20:04:56+02:00 perex@suse.cz 
#   ALSA CVS update
#   ALSA sequencer,Instrument layer,ISA,GUS drivers
#   Clean up Makefiles for the sequencer stuff using reverse selections.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/gus/Makefile
#   2004/06/23 11:56:55+02:00 perex@suse.cz +1 -5
#   ALSA CVS update
#   D:2004/06/23 17:56:53
#   C:ALSA sequencer,Instrument layer,ISA,GUS drivers
#   F:core/seq/Makefile:1.33->1.34 
#   F:core/seq/instr/Makefile:1.16->1.17 
#   F:isa/Kconfig:1.11->1.12 
#   F:isa/gus/Makefile:1.11->1.12 
#   L:Clean up Makefiles for the sequencer stuff using reverse selections.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/Kconfig
#   2004/06/23 11:56:55+02:00 perex@suse.cz +8 -0
#   ALSA CVS update
#   D:2004/06/23 17:56:53
#   C:ALSA sequencer,Instrument layer,ISA,GUS drivers
#   F:core/seq/Makefile:1.33->1.34 
#   F:core/seq/instr/Makefile:1.16->1.17 
#   F:isa/Kconfig:1.11->1.12 
#   F:isa/gus/Makefile:1.11->1.12 
#   L:Clean up Makefiles for the sequencer stuff using reverse selections.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/instr/Makefile
#   2004/06/23 11:56:55+02:00 perex@suse.cz +3 -31
#   ALSA CVS update
#   D:2004/06/23 17:56:53
#   C:ALSA sequencer,Instrument layer,ISA,GUS drivers
#   F:core/seq/Makefile:1.33->1.34 
#   F:core/seq/instr/Makefile:1.16->1.17 
#   F:isa/Kconfig:1.11->1.12 
#   F:isa/gus/Makefile:1.11->1.12 
#   L:Clean up Makefiles for the sequencer stuff using reverse selections.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/seq/Makefile
#   2004/06/23 11:56:53+02:00 perex@suse.cz +5 -53
#   ALSA CVS update
#   D:2004/06/23 17:56:53
#   C:ALSA sequencer,Instrument layer,ISA,GUS drivers
#   F:core/seq/Makefile:1.33->1.34 
#   F:core/seq/instr/Makefile:1.16->1.17 
#   F:isa/Kconfig:1.11->1.12 
#   F:isa/gus/Makefile:1.11->1.12 
#   L:Clean up Makefiles for the sequencer stuff using reverse selections.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/06/23 19:52:02+02:00 perex@suse.cz 
#   ALSA CVS update
#   USB generic driver
#   new functions snd_usbmidi_input_stop() and snd_usbmidi_input_start()
#   needed by snd-usb-usx2y to be able to use usb_set_interface()
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/usb/usbmidi.c
#   2004/06/23 07:48:41+02:00 perex@suse.cz +39 -3
#   ALSA CVS update
#   D:2004/06/23 13:48:41
#   C:USB generic driver
#   F:usb/usbaudio.h:1.31->1.32 
#   F:usb/usbmidi.c:1.28->1.29 
#   L:new functions snd_usbmidi_input_stop() and snd_usbmidi_input_start()
#   L:needed by snd-usb-usx2y to be able to use usb_set_interface()
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/usb/usbaudio.h
#   2004/06/23 07:48:41+02:00 perex@suse.cz +2 -0
#   ALSA CVS update
#   D:2004/06/23 13:48:41
#   C:USB generic driver
#   F:usb/usbaudio.h:1.31->1.32 
#   F:usb/usbmidi.c:1.28->1.29 
#   L:new functions snd_usbmidi_input_stop() and snd_usbmidi_input_start()
#   L:needed by snd-usb-usx2y to be able to use usb_set_interface()
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/06/23 15:02:18+02:00 perex@suse.cz 
#   ALSA CVS update
#   PCM Midlevel
#   Each of snd_pcm_hw_refine_old_user() and snd_pcm_hw_params_old_user()
#   consume 856 bytes of stack and can invoke deep calls via the page allocator.
#   
#   Signed-off-by: Andrew Morton <akpm@osdl.org>
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# sound/core/pcm_native.c
#   2004/06/01 02:57:54+02:00 perex@suse.cz +55 -18
#   ALSA CVS update
#   D:2004/06/01 08:57:54
#   C:PCM Midlevel
#   F:core/pcm_native.c:1.91->1.92 
#   L:Each of snd_pcm_hw_refine_old_user() and snd_pcm_hw_params_old_user()
#   L:consume 856 bytes of stack and can invoke deep calls via the page allocator.
#   Signed-off-by: Andrew Morton <akpm@osdl.org>
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# ChangeSet
#   2004/06/23 13:18:33+02:00 perex@suse.cz 
#   ALSA CVS update
#   CMIPCI driver
#   don't sleep in prepare callback
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/cmipci.c
#   2004/06/23 02:38:17+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/23 08:38:17
#   C:CMIPCI driver
#   F:pci/cmipci.c:1.66->1.67 
#   L:don't sleep in prepare callback
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/06/23 13:17:12+02:00 perex@suse.cz 
#   ALSA CVS update
#   PCM Midlevel,ALSA<-OSS emulation,CMIPCI driver
#   reduce stack usage
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/cmipci.c
#   2004/06/22 11:18:41+02:00 perex@suse.cz +38 -21
#   ALSA CVS update
#   D:2004/06/22 17:22:34
#   C:PCM Midlevel,ALSA<-OSS emulation,CMIPCI driver
#   F:core/pcm_native.c:1.93->1.94 
#   F:core/oss/pcm_oss.c:1.69->1.70 
#   F:pci/cmipci.c:1.65->1.66 
#   L:reduce stack usage
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/core/pcm_native.c
#   2004/06/22 11:22:34+02:00 perex@suse.cz +36 -12
#   ALSA CVS update
#   D:2004/06/22 17:22:34
#   C:PCM Midlevel,ALSA<-OSS emulation,CMIPCI driver
#   F:core/pcm_native.c:1.93->1.94 
#   F:core/oss/pcm_oss.c:1.69->1.70 
#   F:pci/cmipci.c:1.65->1.66 
#   L:reduce stack usage
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/core/oss/pcm_oss.c
#   2004/06/22 11:20:43+02:00 perex@suse.cz +10 -5
#   ALSA CVS update
#   D:2004/06/22 17:22:34
#   C:PCM Midlevel,ALSA<-OSS emulation,CMIPCI driver
#   F:core/pcm_native.c:1.93->1.94 
#   F:core/oss/pcm_oss.c:1.69->1.70 
#   F:pci/cmipci.c:1.65->1.66 
#   L:reduce stack usage
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/06/23 13:15:50+02:00 perex@suse.cz 
#   ALSA CVS update
#   au88x0 driver
#   - Fixed the wrong pointer cast on 64bit architectures.
#   
#   Signed-off-by: Andi Kleen <ak@suse.de>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/au88x0/au88x0_a3d.c
#   2004/06/21 11:53:37+02:00 perex@suse.cz +4 -4
#   ALSA CVS update
#   D:2004/06/21 17:53:37
#   C:au88x0 driver
#   F:pci/au88x0/au88x0_a3d.c:1.3->1.4 
#   L:- Fixed the wrong pointer cast on 64bit architectures.
#   Signed-off-by: Andi Kleen <ak@suse.de>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/06/23 13:14:16+02:00 perex@suse.cz 
#   ALSA CVS update
#   EMU10K1/EMU10K2 driver
#   Merge EFX playback and capture streams to the single device (hw:0,2).
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/emu10k1/emupcm.c
#   2004/06/21 11:52:18+02:00 perex@suse.cz +272 -1
#   ALSA CVS update
#   D:2004/06/21 17:52:17
#   C:EMU10K1/EMU10K2 driver
#   F:include/emu10k1.h:1.39->1.40 
#   F:pci/emu10k1/emu10k1.c:1.24->1.25 
#   F:pci/emu10k1/emufx.c:1.52->1.53 
#   F:pci/emu10k1/emupcm.c:1.25->1.26 
#   L:Merge EFX playback and capture streams to the single device (hw:0,2).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/emu10k1/emufx.c
#   2004/06/21 11:52:18+02:00 perex@suse.cz +2 -308
#   ALSA CVS update
#   D:2004/06/21 17:52:17
#   C:EMU10K1/EMU10K2 driver
#   F:include/emu10k1.h:1.39->1.40 
#   F:pci/emu10k1/emu10k1.c:1.24->1.25 
#   F:pci/emu10k1/emufx.c:1.52->1.53 
#   F:pci/emu10k1/emupcm.c:1.25->1.26 
#   L:Merge EFX playback and capture streams to the single device (hw:0,2).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/emu10k1/emu10k1.c
#   2004/06/21 11:52:18+02:00 perex@suse.cz +0 -4
#   ALSA CVS update
#   D:2004/06/21 17:52:17
#   C:EMU10K1/EMU10K2 driver
#   F:include/emu10k1.h:1.39->1.40 
#   F:pci/emu10k1/emu10k1.c:1.24->1.25 
#   F:pci/emu10k1/emufx.c:1.52->1.53 
#   F:pci/emu10k1/emupcm.c:1.25->1.26 
#   L:Merge EFX playback and capture streams to the single device (hw:0,2).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/emu10k1.h
#   2004/06/21 11:52:17+02:00 perex@suse.cz +9 -0
#   ALSA CVS update
#   D:2004/06/21 17:52:17
#   C:EMU10K1/EMU10K2 driver
#   F:include/emu10k1.h:1.39->1.40 
#   F:pci/emu10k1/emu10k1.c:1.24->1.25 
#   F:pci/emu10k1/emufx.c:1.52->1.53 
#   F:pci/emu10k1/emupcm.c:1.25->1.26 
#   L:Merge EFX playback and capture streams to the single device (hw:0,2).
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/06/23 13:12:57+02:00 perex@suse.cz 
#   ALSA CVS update
#   PCM Midlevel,ALSA Core,RME32 driver,RME96 driver,NM256 driver
#   - Fix the mmap via io_remap_page_range() on nm256, rme32 and rme96.
#     Added SNDRV_PCM_INFO_MMAP_IOMEM to handle this case.
#   - Clean up the indirect accessing on RME32/RME96 drivers.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/rme96.c
#   2004/06/21 11:50:09+02:00 perex@suse.cz +14 -110
#   ALSA CVS update
#   D:2004/06/21 17:50:08
#   C:PCM Midlevel,ALSA Core,RME32 driver,RME96 driver,NM256 driver
#   F:core/pcm_native.c:1.92->1.93 
#   F:include/asound.h:1.40->1.41 
#   F:pci/rme32.c:1.33->1.34 
#   F:pci/rme96.c:1.35->1.36 
#   F:pci/nm256/nm256.c:1.38->1.39 
#   L:- Fix the mmap via io_remap_page_range() on nm256, rme32 and rme96.
#   L:  Added SNDRV_PCM_INFO_MMAP_IOMEM to handle this case.
#   L:- Clean up the indirect accessing on RME32/RME96 drivers.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/rme32.c
#   2004/06/21 11:50:09+02:00 perex@suse.cz +16 -105
#   ALSA CVS update
#   D:2004/06/21 17:50:08
#   C:PCM Midlevel,ALSA Core,RME32 driver,RME96 driver,NM256 driver
#   F:core/pcm_native.c:1.92->1.93 
#   F:include/asound.h:1.40->1.41 
#   F:pci/rme32.c:1.33->1.34 
#   F:pci/rme96.c:1.35->1.36 
#   F:pci/nm256/nm256.c:1.38->1.39 
#   L:- Fix the mmap via io_remap_page_range() on nm256, rme32 and rme96.
#   L:  Added SNDRV_PCM_INFO_MMAP_IOMEM to handle this case.
#   L:- Clean up the indirect accessing on RME32/RME96 drivers.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/nm256/nm256.c
#   2004/06/21 11:50:09+02:00 perex@suse.cz +6 -10
#   ALSA CVS update
#   D:2004/06/21 17:50:08
#   C:PCM Midlevel,ALSA Core,RME32 driver,RME96 driver,NM256 driver
#   F:core/pcm_native.c:1.92->1.93 
#   F:include/asound.h:1.40->1.41 
#   F:pci/rme32.c:1.33->1.34 
#   F:pci/rme96.c:1.35->1.36 
#   F:pci/nm256/nm256.c:1.38->1.39 
#   L:- Fix the mmap via io_remap_page_range() on nm256, rme32 and rme96.
#   L:  Added SNDRV_PCM_INFO_MMAP_IOMEM to handle this case.
#   L:- Clean up the indirect accessing on RME32/RME96 drivers.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/pcm_native.c
#   2004/06/21 11:50:08+02:00 perex@suse.cz +14 -0
#   ALSA CVS update
#   D:2004/06/21 17:50:08
#   C:PCM Midlevel,ALSA Core,RME32 driver,RME96 driver,NM256 driver
#   F:core/pcm_native.c:1.92->1.93 
#   F:include/asound.h:1.40->1.41 
#   F:pci/rme32.c:1.33->1.34 
#   F:pci/rme96.c:1.35->1.36 
#   F:pci/nm256/nm256.c:1.38->1.39 
#   L:- Fix the mmap via io_remap_page_range() on nm256, rme32 and rme96.
#   L:  Added SNDRV_PCM_INFO_MMAP_IOMEM to handle this case.
#   L:- Clean up the indirect accessing on RME32/RME96 drivers.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/asound.h
#   2004/06/21 11:50:08+02:00 perex@suse.cz +1 -0
#   ALSA CVS update
#   D:2004/06/21 17:50:08
#   C:PCM Midlevel,ALSA Core,RME32 driver,RME96 driver,NM256 driver
#   F:core/pcm_native.c:1.92->1.93 
#   F:include/asound.h:1.40->1.41 
#   F:pci/rme32.c:1.33->1.34 
#   F:pci/rme96.c:1.35->1.36 
#   F:pci/nm256/nm256.c:1.38->1.39 
#   L:- Fix the mmap via io_remap_page_range() on nm256, rme32 and rme96.
#   L:  Added SNDRV_PCM_INFO_MMAP_IOMEM to handle this case.
#   L:- Clean up the indirect accessing on RME32/RME96 drivers.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/06/23 13:11:34+02:00 perex@suse.cz 
#   ALSA CVS update
#   USB generic driver
#   handle devices that allow setting but not reading sample rate
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/usb/usbaudio.c
#   2004/06/21 09:45:12+02:00 perex@suse.cz +2 -2
#   ALSA CVS update
#   D:2004/06/21 15:45:12
#   C:USB generic driver
#   F:usb/usbaudio.c:1.101->1.102 
#   L:handle devices that allow setting but not reading sample rate
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/06/23 13:10:13+02:00 perex@suse.cz 
#   ALSA CVS update
#   VIA82xx driver
#   Fixed the calculation of the current DMA position at the period boundary.
#   
#   In some cases, DMA residue returns the value 0 during the transition
#   at the DMA boundary.  The patch handles it as the position 0.
#   This may prevent the flood of 'invalid last pointer' debug messages
#   on some devices.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/via82xx.c
#   2004/06/18 11:52:36+02:00 perex@suse.cz +5 -1
#   ALSA CVS update
#   D:2004/06/18 17:52:36
#   C:VIA82xx driver
#   F:pci/via82xx.c:1.104->1.105 
#   L:Fixed the calculation of the current DMA position at the period boundary.
#   L:
#   L:In some cases, DMA residue returns the value 0 during the transition
#   L:at the DMA boundary.  The patch handles it as the position 0.
#   L:This may prevent the flood of 'invalid last pointer' debug messages
#   L:on some devices.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/06/23 13:08:53+02:00 perex@suse.cz 
#   ALSA CVS update
#   Intel8x0 driver
#   Fixed the calculation of the current DMA position on some sloppy devices.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/intel8x0.c
#   2004/06/18 11:50:52+02:00 perex@suse.cz +15 -9
#   ALSA CVS update
#   D:2004/06/18 17:50:52
#   C:Intel8x0 driver
#   F:pci/intel8x0.c:1.138->1.139 
#   L:Fixed the calculation of the current DMA position on some sloppy devices.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/06/23 13:07:19+02:00 perex@suse.cz 
#   ALSA CVS update
#   PCM Midlevel,ES1968 driver,EMU10K1/EMU10K2 driver,KORG1212 driver
#   Trident driver
#   Clean up the buffer management in the PCM runtime record.
#   
#   The buffer-allocation record is hold in runtime instance, so that
#   it can be checked more cleanly.
#   
#   dma_private is removed from runtime (it's used for SG-buffers).
#   The macro snd_pcm_substream_sgbuf() should be used instead of direct
#   access to the pointer, to retrieve the sgbuf struct from the PCM
#   substream instance.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/trident/trident_memory.c
#   2004/06/18 11:46:32+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/18 17:46:31
#   C:PCM Midlevel,ES1968 driver,EMU10K1/EMU10K2 driver,KORG1212 driver
#   C:Trident driver
#   F:core/pcm_memory.c:1.28->1.29 
#   F:include/pcm.h:1.41->1.42 
#   F:pci/es1968.c:1.67->1.68 
#   F:pci/emu10k1/memory.c:1.17->1.18 
#   F:pci/korg1212/korg1212.c:1.38->1.39 
#   F:pci/trident/trident_memory.c:1.14->1.15 
#   L:Clean up the buffer management in the PCM runtime record.
#   L:
#   L:The buffer-allocation record is hold in runtime instance, so that
#   L:it can be checked more cleanly.
#   L:
#   L:dma_private is removed from runtime (it's used for SG-buffers).
#   L:The macro snd_pcm_substream_sgbuf() should be used instead of direct
#   L:access to the pointer, to retrieve the sgbuf struct from the PCM
#   L:substream instance.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/korg1212/korg1212.c
#   2004/06/18 11:46:32+02:00 perex@suse.cz +6 -4
#   ALSA CVS update
#   D:2004/06/18 17:46:31
#   C:PCM Midlevel,ES1968 driver,EMU10K1/EMU10K2 driver,KORG1212 driver
#   C:Trident driver
#   F:core/pcm_memory.c:1.28->1.29 
#   F:include/pcm.h:1.41->1.42 
#   F:pci/es1968.c:1.67->1.68 
#   F:pci/emu10k1/memory.c:1.17->1.18 
#   F:pci/korg1212/korg1212.c:1.38->1.39 
#   F:pci/trident/trident_memory.c:1.14->1.15 
#   L:Clean up the buffer management in the PCM runtime record.
#   L:
#   L:The buffer-allocation record is hold in runtime instance, so that
#   L:it can be checked more cleanly.
#   L:
#   L:dma_private is removed from runtime (it's used for SG-buffers).
#   L:The macro snd_pcm_substream_sgbuf() should be used instead of direct
#   L:access to the pointer, to retrieve the sgbuf struct from the PCM
#   L:substream instance.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/es1968.c
#   2004/06/18 11:46:31+02:00 perex@suse.cz +32 -30
#   ALSA CVS update
#   D:2004/06/18 17:46:31
#   C:PCM Midlevel,ES1968 driver,EMU10K1/EMU10K2 driver,KORG1212 driver
#   C:Trident driver
#   F:core/pcm_memory.c:1.28->1.29 
#   F:include/pcm.h:1.41->1.42 
#   F:pci/es1968.c:1.67->1.68 
#   F:pci/emu10k1/memory.c:1.17->1.18 
#   F:pci/korg1212/korg1212.c:1.38->1.39 
#   F:pci/trident/trident_memory.c:1.14->1.15 
#   L:Clean up the buffer management in the PCM runtime record.
#   L:
#   L:The buffer-allocation record is hold in runtime instance, so that
#   L:it can be checked more cleanly.
#   L:
#   L:dma_private is removed from runtime (it's used for SG-buffers).
#   L:The macro snd_pcm_substream_sgbuf() should be used instead of direct
#   L:access to the pointer, to retrieve the sgbuf struct from the PCM
#   L:substream instance.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/emu10k1/memory.c
#   2004/06/18 11:46:31+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/18 17:46:31
#   C:PCM Midlevel,ES1968 driver,EMU10K1/EMU10K2 driver,KORG1212 driver
#   C:Trident driver
#   F:core/pcm_memory.c:1.28->1.29 
#   F:include/pcm.h:1.41->1.42 
#   F:pci/es1968.c:1.67->1.68 
#   F:pci/emu10k1/memory.c:1.17->1.18 
#   F:pci/korg1212/korg1212.c:1.38->1.39 
#   F:pci/trident/trident_memory.c:1.14->1.15 
#   L:Clean up the buffer management in the PCM runtime record.
#   L:
#   L:The buffer-allocation record is hold in runtime instance, so that
#   L:it can be checked more cleanly.
#   L:
#   L:dma_private is removed from runtime (it's used for SG-buffers).
#   L:The macro snd_pcm_substream_sgbuf() should be used instead of direct
#   L:access to the pointer, to retrieve the sgbuf struct from the PCM
#   L:substream instance.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/pcm_memory.c
#   2004/06/18 11:46:31+02:00 perex@suse.cz +18 -22
#   ALSA CVS update
#   D:2004/06/18 17:46:31
#   C:PCM Midlevel,ES1968 driver,EMU10K1/EMU10K2 driver,KORG1212 driver
#   C:Trident driver
#   F:core/pcm_memory.c:1.28->1.29 
#   F:include/pcm.h:1.41->1.42 
#   F:pci/es1968.c:1.67->1.68 
#   F:pci/emu10k1/memory.c:1.17->1.18 
#   F:pci/korg1212/korg1212.c:1.38->1.39 
#   F:pci/trident/trident_memory.c:1.14->1.15 
#   L:Clean up the buffer management in the PCM runtime record.
#   L:
#   L:The buffer-allocation record is hold in runtime instance, so that
#   L:it can be checked more cleanly.
#   L:
#   L:dma_private is removed from runtime (it's used for SG-buffers).
#   L:The macro snd_pcm_substream_sgbuf() should be used instead of direct
#   L:access to the pointer, to retrieve the sgbuf struct from the PCM
#   L:substream instance.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/pcm.h
#   2004/06/18 11:46:31+02:00 perex@suse.cz +19 -2
#   ALSA CVS update
#   D:2004/06/18 17:46:31
#   C:PCM Midlevel,ES1968 driver,EMU10K1/EMU10K2 driver,KORG1212 driver
#   C:Trident driver
#   F:core/pcm_memory.c:1.28->1.29 
#   F:include/pcm.h:1.41->1.42 
#   F:pci/es1968.c:1.67->1.68 
#   F:pci/emu10k1/memory.c:1.17->1.18 
#   F:pci/korg1212/korg1212.c:1.38->1.39 
#   F:pci/trident/trident_memory.c:1.14->1.15 
#   L:Clean up the buffer management in the PCM runtime record.
#   L:
#   L:The buffer-allocation record is hold in runtime instance, so that
#   L:it can be checked more cleanly.
#   L:
#   L:dma_private is removed from runtime (it's used for SG-buffers).
#   L:The macro snd_pcm_substream_sgbuf() should be used instead of direct
#   L:access to the pointer, to retrieve the sgbuf struct from the PCM
#   L:substream instance.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/06/23 13:05:35+02:00 perex@suse.cz 
#   ALSA CVS update
#   Generic drivers
#   Do the buffer allocation in hw_params callback instead of open callback.
#   
#   This will prevent to use the allocation of excessive size.
#   Pre-allocation is called with the default size 0, ie. no buffer will be
#   pre-allocated as default.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/drivers/dummy.c
#   2004/06/18 11:43:33+02:00 perex@suse.cz +20 -31
#   ALSA CVS update
#   D:2004/06/18 17:43:33
#   C:Generic drivers
#   F:drivers/dummy.c:1.27->1.28 
#   L:Do the buffer allocation in hw_params callback instead of open callback.
#   L:
#   L:This will prevent to use the allocation of excessive size.
#   L:Pre-allocation is called with the default size 0, ie. no buffer will be
#   L:pre-allocated as default.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/06/23 13:04:14+02:00 perex@suse.cz 
#   ALSA CVS update
#   ES1968 driver
#   Fix the crash at unloading the module due to the shared interrupt
#   with other devices.
#   
#   Signed-off-by: Karsten Wiese <annabellesgarden@yahoo.de>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/es1968.c
#   2004/06/18 08:40:17+02:00 perex@suse.cz +2 -2
#   ALSA CVS update
#   D:2004/06/18 14:40:17
#   C:ES1968 driver
#   F:pci/es1968.c:1.66->1.67 
#   L:Fix the crash at unloading the module due to the shared interrupt
#   L:with other devices.
#   Signed-off-by: Karsten Wiese <annabellesgarden@yahoo.de>
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/06/23 13:02:56+02:00 perex@suse.cz 
#   ALSA CVS update
#   PCM Midlevel
#   Removed the obsoleted init for boot parameters.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/pcm_memory.c
#   2004/06/18 08:38:26+02:00 perex@suse.cz +0 -15
#   ALSA CVS update
#   D:2004/06/18 14:38:26
#   C:PCM Midlevel
#   F:core/pcm_memory.c:1.27->1.28 
#   L:Removed the obsoleted init for boot parameters.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/06/23 13:01:38+02:00 perex@suse.cz 
#   ALSA CVS update
#   CS46xx driver,MIXART driver
#   reduce stack usage
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/mixart/mixart.c
#   2004/06/16 08:32:20+02:00 perex@suse.cz +27 -19
#   ALSA CVS update
#   D:2004/06/16 14:35:18
#   C:CS46xx driver,MIXART driver
#   F:pci/cs46xx/dsp_spos.c:1.23->1.24 
#   F:pci/mixart/mixart.c:1.8->1.9 
#   L:reduce stack usage
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/pci/cs46xx/dsp_spos.c
#   2004/06/16 08:35:18+02:00 perex@suse.cz +16 -11
#   ALSA CVS update
#   D:2004/06/16 14:35:18
#   C:CS46xx driver,MIXART driver
#   F:pci/cs46xx/dsp_spos.c:1.23->1.24 
#   F:pci/mixart/mixart.c:1.8->1.9 
#   L:reduce stack usage
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/06/23 12:58:32+02:00 perex@suse.cz 
#   ALSA CVS update
#   OSS sequencer emulation
#   
#   Use separate functions for some ioctls to reduce stack usage.
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# sound/core/seq/oss/seq_oss_ioctl.c
#   2004/06/23 12:58:02+02:00 perex@suse.cz +46 -28
#   ALSA CVS update
#   D:2004/06/16 14:28:13
#   C:ALSA<-OSS sequencer
#   F:core/seq/oss/seq_oss_ioctl.c:1.5->1.6 
#   L:use separate functions for some ioctls to reduce stack usage
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/06/23 12:44:07+02:00 perex@suse.cz 
#   ALSA CVS update
#   OPL4
#   add newline at end of file
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/drivers/opl4/Makefile
#   2004/06/16 04:46:02+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/16 10:46:02
#   C:OPL4
#   F:drivers/opl4/Makefile:1.3->1.4 
#   L:add newline at end of file
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/06/23 12:42:44+02:00 perex@suse.cz 
#   ALSA CVS update
#   Opti9xx drivers
#   Fixed spin deadlocks.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/isa/opti9xx/opti92x-ad1848.c
#   2004/06/15 05:39:57+02:00 perex@suse.cz +2 -19
#   ALSA CVS update
#   D:2004/06/15 11:39:57
#   C:Opti9xx drivers
#   F:isa/opti9xx/opti92x-ad1848.c:1.44->1.45 
#   L:Fixed spin deadlocks.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/06/23 12:41:27+02:00 perex@suse.cz 
#   ALSA CVS update
#   USB generic driver
#   Quattro USB: handle the different endianness of playback and recording sample data
#   
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/usb/usbquirks.h
#   2004/06/14 12:12:05+02:00 perex@suse.cz +36 -5
#   ALSA CVS update
#   D:2004/06/14 18:12:05
#   C:USB generic driver
#   F:usb/usbaudio.c:1.100->1.101 
#   F:usb/usbquirks.h:1.33->1.34 
#   L:Quattro USB: handle the different endianness of playback and recording sample data
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# sound/usb/usbaudio.c
#   2004/06/14 12:12:05+02:00 perex@suse.cz +20 -6
#   ALSA CVS update
#   D:2004/06/14 18:12:05
#   C:USB generic driver
#   F:usb/usbaudio.c:1.100->1.101 
#   F:usb/usbquirks.h:1.33->1.34 
#   L:Quattro USB: handle the different endianness of playback and recording sample data
#   Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
# 
# ChangeSet
#   2004/06/23 12:40:10+02:00 perex@suse.cz 
#   ALSA CVS update
#   PCM Midlevel,ALSA<-OSS emulation
#   Clean up and optimization of PCM format-specific functions.
#   
#   - Use array indexing instead of huge swith/case.
#   - Removed superfluous handling of floats.
#   - Use memcpy for silencing to simplify the codes.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/pcm_misc.c
#   2004/06/09 12:36:14+02:00 perex@suse.cz +249 -459
#   ALSA CVS update
#   D:2004/06/09 18:36:14
#   C:PCM Midlevel,ALSA<-OSS emulation
#   F:core/pcm_misc.c:1.13->1.14 
#   F:core/oss/pcm_plugin.c:1.18->1.19 
#   F:include/pcm.h:1.40->1.41 
#   L:Clean up and optimization of PCM format-specific functions.
#   L:
#   L:- Use array indexing instead of huge swith/case.
#   L:- Removed superfluous handling of floats.
#   L:- Use memcpy for silencing to simplify the codes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/core/oss/pcm_plugin.c
#   2004/06/09 12:36:14+02:00 perex@suse.cz +27 -96
#   ALSA CVS update
#   D:2004/06/09 18:36:14
#   C:PCM Midlevel,ALSA<-OSS emulation
#   F:core/pcm_misc.c:1.13->1.14 
#   F:core/oss/pcm_plugin.c:1.18->1.19 
#   F:include/pcm.h:1.40->1.41 
#   L:Clean up and optimization of PCM format-specific functions.
#   L:
#   L:- Use array indexing instead of huge swith/case.
#   L:- Removed superfluous handling of floats.
#   L:- Use memcpy for silencing to simplify the codes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# include/sound/pcm.h
#   2004/06/09 12:36:15+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/06/09 18:36:14
#   C:PCM Midlevel,ALSA<-OSS emulation
#   F:core/pcm_misc.c:1.13->1.14 
#   F:core/oss/pcm_plugin.c:1.18->1.19 
#   F:include/pcm.h:1.40->1.41 
#   L:Clean up and optimization of PCM format-specific functions.
#   L:
#   L:- Use array indexing instead of huge swith/case.
#   L:- Removed superfluous handling of floats.
#   L:- Use memcpy for silencing to simplify the codes.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/06/23 12:38:51+02:00 perex@suse.cz 
#   ALSA CVS update
#   Intel8x0 driver
#   Added the PCI ID for nVidia CK8.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/intel8x0.c
#   2004/06/09 12:02:00+02:00 perex@suse.cz +5 -0
#   ALSA CVS update
#   D:2004/06/09 18:02:00
#   C:Intel8x0 driver
#   F:pci/intel8x0.c:1.137->1.138 
#   L:Added the PCI ID for nVidia CK8.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/06/23 12:37:24+02:00 perex@suse.cz 
#   ALSA CVS update
#   ATIIXP driver,VIA82xx driver
#   Added the missing RESUME info bits to pcm.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/via82xx.c
#   2004/06/09 12:01:05+02:00 perex@suse.cz +1 -0
#   ALSA CVS update
#   D:2004/06/09 18:01:05
#   C:ATIIXP driver,VIA82xx driver
#   F:pci/atiixp.c:1.10->1.11 
#   F:pci/via82xx.c:1.103->1.104 
#   L:Added the missing RESUME info bits to pcm.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/atiixp.c
#   2004/06/09 12:01:05+02:00 perex@suse.cz +1 -0
#   ALSA CVS update
#   D:2004/06/09 18:01:05
#   C:ATIIXP driver,VIA82xx driver
#   F:pci/atiixp.c:1.10->1.11 
#   F:pci/via82xx.c:1.103->1.104 
#   L:Added the missing RESUME info bits to pcm.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/06/23 12:33:49+02:00 perex@suse.cz 
#   ALSA CVS update
#   ICE1724 driver
#   SPDIF output fixes
#   
#   - Fixed the encoding of SPDIF status bits in the consumer mode.
#   - Change the SPDIF status bits according to the current sample rate.
#   
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# sound/pci/ice1712/ice1724.c
#   2004/06/08 11:15:26+02:00 perex@suse.cz +40 -11
#   ALSA CVS update
#   D:2004/06/08 17:15:26
#   C:ICE1724 driver
#   F:pci/ice1712/ice1724.c:1.33->1.34 
#   L:SPDIF output fixes
#   L:
#   L:- Fixed the encoding of SPDIF status bits in the consumer mode.
#   L:- Change the SPDIF status bits according to the current sample rate.
#   Signed-off-by: Takashi Iwai <tiwai@suse.de>
# 
# ChangeSet
#   2004/06/23 12:28:34+02:00 perex@suse.cz 
#   ALSA CVS update
#   Documentation
#   Added snd-fm801 tuner parameter description
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# Documentation/sound/alsa/ALSA-Configuration.txt
#   2004/06/01 02:56:20+02:00 perex@suse.cz +7 -0
#   ALSA CVS update
#   D:2004/06/01 08:56:20
#   C:Documentation
#   F:Documentation/ALSA-Configuration.txt:1.45->1.46 
#   L:Added snd-fm801 tuner parameter description
#   Signed-off-by: Jaroslav Kysela <perex@suse.cz>
# 
# ChangeSet
#   2004/06/16 11:59:16+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/isa/wavefront/wavefront_synth.c
#   2004/06/16 11:58:53+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# sound/core/seq/seq_clientmgr.c
#   2004/06/16 11:58:53+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# include/sound/vx_core.h
#   2004/06/16 11:58:53+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# include/sound/seq_kernel.h
#   2004/06/16 11:58:53+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# include/sound/core.h
#   2004/06/16 11:58:53+02:00 perex@suse.cz +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/05/31 08:49:28+02:00 perex@suse.cz 
#   ALSA CVS update - Takashi Iwai <tiwai@suse.de>
#   AC97 Codec Core
#   Fixed mutex deadlocks.
# 
# sound/pci/ac97/ac97_patch.c
#   2004/05/30 11:40:05+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/05/30 17:40:04
#   C:AC97 Codec Core
#   A:Takashi Iwai <tiwai@suse.de>
#   F:pci/ac97/ac97_codec.c:1.135->1.136 
#   F:pci/ac97/ac97_patch.c:1.52->1.53 
#   L:Fixed mutex deadlocks.
# 
# sound/pci/ac97/ac97_codec.c
#   2004/05/30 11:40:04+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/05/30 17:40:04
#   C:AC97 Codec Core
#   A:Takashi Iwai <tiwai@suse.de>
#   F:pci/ac97/ac97_codec.c:1.135->1.136 
#   F:pci/ac97/ac97_patch.c:1.52->1.53 
#   L:Fixed mutex deadlocks.
# 
# ChangeSet
#   2004/05/30 14:01:08+02:00 perex@suse.cz 
#   ALSA 1.0.5
# 
# include/sound/version.h
#   2004/05/30 14:00:09+02:00 perex@suse.cz +2 -2
#   ALSA 1.0.5
# 
# ChangeSet
#   2004/05/30 13:57:33+02:00 perex@suse.cz 
#   ALSA CVS update - Jaroslav Kysela <perex@suse.cz>
#   ALSA Core
#   Fixed warnings for pci PM callbacks when not CONFIG_PCI
# 
# include/sound/core.h
#   2004/05/30 06:50:15+02:00 perex@suse.cz +4 -0
#   ALSA CVS update
#   D:2004/05/30 12:50:15
#   C:ALSA Core
#   A:Jaroslav Kysela <perex@suse.cz>
#   F:include/core.h:1.51->1.52 
#   L:Fixed warnings for pci PM callbacks when not CONFIG_PCI
# 
# ChangeSet
#   2004/05/28 15:04:32+02:00 perex@suse.cz 
#   ALSA CVS update - Takashi Iwai <tiwai@suse.de>
#   AC97 Codec Core
#   - Added the single mixer control with AC97 2.3 paging.
#   - Handle the paging for some ALC655/658 registers.
#   - Added the experimental support for ALC850.
# 
# sound/pci/ac97/ac97_patch.h
#   2004/05/28 04:27:09+02:00 perex@suse.cz +1 -0
#   ALSA CVS update
#   D:2004/05/28 10:27:09
#   C:AC97 Codec Core
#   A:Takashi Iwai <tiwai@suse.de>
#   F:pci/ac97/ac97_codec.c:1.134->1.135 
#   F:pci/ac97/ac97_id.h:1.8->1.9 
#   F:pci/ac97/ac97_local.h:1.6->1.7 
#   F:pci/ac97/ac97_patch.c:1.51->1.52 
#   F:pci/ac97/ac97_patch.h:1.15->1.16 
#   L:- Added the single mixer control with AC97 2.3 paging.
#   L:- Handle the paging for some ALC655/658 registers.
#   L:- Added the experimental support for ALC850.
# 
# sound/pci/ac97/ac97_patch.c
#   2004/05/28 04:27:09+02:00 perex@suse.cz +148 -28
#   ALSA CVS update
#   D:2004/05/28 10:27:09
#   C:AC97 Codec Core
#   A:Takashi Iwai <tiwai@suse.de>
#   F:pci/ac97/ac97_codec.c:1.134->1.135 
#   F:pci/ac97/ac97_id.h:1.8->1.9 
#   F:pci/ac97/ac97_local.h:1.6->1.7 
#   F:pci/ac97/ac97_patch.c:1.51->1.52 
#   F:pci/ac97/ac97_patch.h:1.15->1.16 
#   L:- Added the single mixer control with AC97 2.3 paging.
#   L:- Handle the paging for some ALC655/658 registers.
#   L:- Added the experimental support for ALC850.
# 
# sound/pci/ac97/ac97_local.h
#   2004/05/28 04:27:09+02:00 perex@suse.cz +7 -0
#   ALSA CVS update
#   D:2004/05/28 10:27:09
#   C:AC97 Codec Core
#   A:Takashi Iwai <tiwai@suse.de>
#   F:pci/ac97/ac97_codec.c:1.134->1.135 
#   F:pci/ac97/ac97_id.h:1.8->1.9 
#   F:pci/ac97/ac97_local.h:1.6->1.7 
#   F:pci/ac97/ac97_patch.c:1.51->1.52 
#   F:pci/ac97/ac97_patch.h:1.15->1.16 
#   L:- Added the single mixer control with AC97 2.3 paging.
#   L:- Handle the paging for some ALC655/658 registers.
#   L:- Added the experimental support for ALC850.
# 
# sound/pci/ac97/ac97_id.h
#   2004/05/28 04:27:09+02:00 perex@suse.cz +7 -0
#   ALSA CVS update
#   D:2004/05/28 10:27:09
#   C:AC97 Codec Core
#   A:Takashi Iwai <tiwai@suse.de>
#   F:pci/ac97/ac97_codec.c:1.134->1.135 
#   F:pci/ac97/ac97_id.h:1.8->1.9 
#   F:pci/ac97/ac97_local.h:1.6->1.7 
#   F:pci/ac97/ac97_patch.c:1.51->1.52 
#   F:pci/ac97/ac97_patch.h:1.15->1.16 
#   L:- Added the single mixer control with AC97 2.3 paging.
#   L:- Handle the paging for some ALC655/658 registers.
#   L:- Added the experimental support for ALC850.
# 
# sound/pci/ac97/ac97_codec.c
#   2004/05/28 04:27:09+02:00 perex@suse.cz +61 -18
#   ALSA CVS update
#   D:2004/05/28 10:27:09
#   C:AC97 Codec Core
#   A:Takashi Iwai <tiwai@suse.de>
#   F:pci/ac97/ac97_codec.c:1.134->1.135 
#   F:pci/ac97/ac97_id.h:1.8->1.9 
#   F:pci/ac97/ac97_local.h:1.6->1.7 
#   F:pci/ac97/ac97_patch.c:1.51->1.52 
#   F:pci/ac97/ac97_patch.h:1.15->1.16 
#   L:- Added the single mixer control with AC97 2.3 paging.
#   L:- Handle the paging for some ALC655/658 registers.
#   L:- Added the experimental support for ALC850.
# 
# ChangeSet
#   2004/05/28 15:04:07+02:00 perex@suse.cz 
#   ALSA CVS update - Takashi Iwai <tiwai@suse.de>
#   AC97 Codec Core
#   Avoid warning message during codec probing in case SKIP_AUDIO flag is not set.
# 
# sound/pci/ac97/ac97_codec.c
#   2004/05/27 13:15:54+02:00 perex@suse.cz +6 -4
#   ALSA CVS update
#   D:2004/05/27 19:15:54
#   C:AC97 Codec Core
#   A:Takashi Iwai <tiwai@suse.de>
#   F:pci/ac97/ac97_codec.c:1.133->1.134 
#   L:Avoid warning message during codec probing in case SKIP_AUDIO flag is not set.
# 
# ChangeSet
#   2004/05/28 15:03:42+02:00 perex@suse.cz 
#   ALSA CVS update - Takashi Iwai <tiwai@suse.de>
#   PARISC Harmony driver
#   fixed typos.
# 
# sound/parisc/harmony.c
#   2004/05/26 11:02:12+02:00 perex@suse.cz +2 -2
#   ALSA CVS update
#   D:2004/05/26 17:02:12
#   C:PARISC Harmony driver
#   A:Takashi Iwai <tiwai@suse.de>
#   F:parisc/harmony.c:1.11->1.12 
#   L:fixed typos.
# 
# ChangeSet
#   2004/05/28 15:03:20+02:00 perex@suse.cz 
#   ALSA CVS update - Jaroslav Kysela <perex@suse.cz>
#   AC97 Codec Core
#   Signed-off-by: Kevin Mack <kevmack@accesscomm.ca>
#   For Gateway M675 notebook - this will direct mixer
#   output to speaker, headphone and line-out instead
#   of just the front(DAC-A) signal.
# 
# sound/pci/ac97/ac97_patch.c
#   2004/05/26 02:34:55+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/05/26 08:34:55
#   C:AC97 Codec Core
#   A:Jaroslav Kysela <perex@suse.cz>
#   F:pci/ac97/ac97_patch.c:1.50->1.51 
#   L:Signed-off-by: Kevin Mack <kevmack@accesscomm.ca>
#   L:For Gateway M675 notebook - this will direct mixer
#   L:output to speaker, headphone and line-out instead
#   L:of just the front(DAC-A) signal.
# 
# ChangeSet
#   2004/05/28 15:02:56+02:00 perex@suse.cz 
#   ALSA CVS update - Takashi Iwai <tiwai@suse.de>
#   VIA82xx driver
#   - use snd_pcm_limit_hw_rates() and removed redundant codes.
#   - fixed the rate constraints when 'IEC958 Output Switch' is on.
#   - check the SPDIF support on AC97 and don't build IEC958 stuffs if not available.
# 
# sound/pci/via82xx.c
#   2004/05/25 12:54:55+02:00 perex@suse.cz +15 -38
#   ALSA CVS update
#   D:2004/05/25 18:54:55
#   C:VIA82xx driver
#   A:Takashi Iwai <tiwai@suse.de>
#   F:pci/via82xx.c:1.102->1.103 
#   L:- use snd_pcm_limit_hw_rates() and removed redundant codes.
#   L:- fixed the rate constraints when 'IEC958 Output Switch' is on.
#   L:- check the SPDIF support on AC97 and don't build IEC958 stuffs if not available.
# 
# ChangeSet
#   2004/05/28 15:02:35+02:00 perex@suse.cz 
#   ALSA CVS update - Takashi Iwai <tiwai@suse.de>
#   AC97 Codec Core
#   added ac97_can_spdif() for checking the SPDIF support.
# 
# include/sound/ac97_codec.h
#   2004/05/25 12:52:57+02:00 perex@suse.cz +4 -0
#   ALSA CVS update
#   D:2004/05/25 18:52:57
#   C:AC97 Codec Core
#   A:Takashi Iwai <tiwai@suse.de>
#   F:include/ac97_codec.h:1.45->1.46 
#   L:added ac97_can_spdif() for checking the SPDIF support.
# 
# ChangeSet
#   2004/05/28 15:02:13+02:00 perex@suse.cz 
#   ALSA CVS update - Takashi Iwai <tiwai@suse.de>
#   VIA82xx driver
#   added the DXS entry for Mitac/Vobis/Yakumo laptop.
# 
# sound/pci/via82xx.c
#   2004/05/25 10:10:38+02:00 perex@suse.cz +1 -0
#   ALSA CVS update
#   D:2004/05/25 16:10:38
#   C:VIA82xx driver
#   A:Takashi Iwai <tiwai@suse.de>
#   F:pci/via82xx.c:1.101->1.102 
#   L:added the DXS entry for Mitac/Vobis/Yakumo laptop.
# 
# ChangeSet
#   2004/05/28 15:01:53+02:00 perex@suse.cz 
#   ALSA CVS update - Clemens Ladisch <clemens@ladisch.de>
#   Wavefront drivers
#   fix possible buffer overflow in wavefront_download_firmware()
# 
# sound/isa/wavefront/wavefront_synth.c
#   2004/05/25 07:10:48+02:00 perex@suse.cz +6 -0
#   ALSA CVS update
#   D:2004/05/25 13:10:48
#   C:Wavefront drivers
#   A:Clemens Ladisch <clemens@ladisch.de>
#   F:isa/wavefront/wavefront_synth.c:1.17->1.18 
#   L:fix possible buffer overflow in wavefront_download_firmware()
# 
# ChangeSet
#   2004/05/28 14:20:37+02:00 perex@suse.cz 
#   ALSA CVS update - Takashi Iwai <tiwai@suse.de>
#   ICE1724 driver
#   avoid to change the AC97 rate registers.  this seems conflicting
#   with the rate conversion on VT172x.
# 
# sound/pci/ice1712/ice1724.c
#   2004/05/25 04:56:22+02:00 perex@suse.cz +2 -17
#   ALSA CVS update
#   D:2004/05/25 10:56:22
#   C:ICE1724 driver
#   A:Takashi Iwai <tiwai@suse.de>
#   F:pci/ice1712/ice1724.c:1.32->1.33 
#   L:avoid to change the AC97 rate registers.  this seems conflicting
#   L:with the rate conversion on VT172x.
# 
# ChangeSet
#   2004/05/28 14:20:17+02:00 perex@suse.cz 
#   ALSA CVS update - Takashi Iwai <tiwai@suse.de>
#   Digigram VX core
#   added 'Clock Mode' control to choose the clock source.
# 
# sound/drivers/vx/vx_uer.c
#   2004/05/24 12:12:43+02:00 perex@suse.cz +8 -7
#   ALSA CVS update
#   D:2004/05/24 18:12:43
#   C:Digigram VX core
#   A:Takashi Iwai <tiwai@suse.de>
#   F:drivers/vx/vx_core.c:1.7->1.8 
#   F:drivers/vx/vx_mixer.c:1.2->1.3 
#   F:drivers/vx/vx_uer.c:1.1->1.2 
#   F:include/vx_core.h:1.1->1.2 
#   L:added 'Clock Mode' control to choose the clock source.
# 
# sound/drivers/vx/vx_mixer.c
#   2004/05/24 12:12:43+02:00 perex@suse.cz +51 -0
#   ALSA CVS update
#   D:2004/05/24 18:12:43
#   C:Digigram VX core
#   A:Takashi Iwai <tiwai@suse.de>
#   F:drivers/vx/vx_core.c:1.7->1.8 
#   F:drivers/vx/vx_mixer.c:1.2->1.3 
#   F:drivers/vx/vx_uer.c:1.1->1.2 
#   F:include/vx_core.h:1.1->1.2 
#   L:added 'Clock Mode' control to choose the clock source.
# 
# sound/drivers/vx/vx_core.c
#   2004/05/24 12:12:43+02:00 perex@suse.cz +3 -0
#   ALSA CVS update
#   D:2004/05/24 18:12:43
#   C:Digigram VX core
#   A:Takashi Iwai <tiwai@suse.de>
#   F:drivers/vx/vx_core.c:1.7->1.8 
#   F:drivers/vx/vx_mixer.c:1.2->1.3 
#   F:drivers/vx/vx_uer.c:1.1->1.2 
#   F:include/vx_core.h:1.1->1.2 
#   L:added 'Clock Mode' control to choose the clock source.
# 
# include/sound/vx_core.h
#   2004/05/24 12:12:43+02:00 perex@suse.cz +8 -0
#   ALSA CVS update
#   D:2004/05/24 18:12:43
#   C:Digigram VX core
#   A:Takashi Iwai <tiwai@suse.de>
#   F:drivers/vx/vx_core.c:1.7->1.8 
#   F:drivers/vx/vx_mixer.c:1.2->1.3 
#   F:drivers/vx/vx_uer.c:1.1->1.2 
#   F:include/vx_core.h:1.1->1.2 
#   L:added 'Clock Mode' control to choose the clock source.
# 
# ChangeSet
#   2004/05/28 14:19:53+02:00 perex@suse.cz 
#   ALSA CVS update - Takashi Iwai <tiwai@suse.de>
#   Digigram VX core
#   fixed the compile warnings due to the last change.
# 
# sound/drivers/vx/vx_pcm.c
#   2004/05/24 12:11:58+02:00 perex@suse.cz +2 -1
#   ALSA CVS update
#   D:2004/05/24 18:11:58
#   C:Digigram VX core
#   A:Takashi Iwai <tiwai@suse.de>
#   F:drivers/vx/vx_pcm.c:1.4->1.5 
#   L:fixed the compile warnings due to the last change.
# 
# ChangeSet
#   2004/05/28 14:19:28+02:00 perex@suse.cz 
#   ALSA CVS update - Takashi Iwai <tiwai@suse.de>
#   PARISC Harmony driver
#   - fixed the buffer handling without dma_alloc_coherent support.
# 
# sound/parisc/harmony.c
#   2004/05/24 09:51:51+02:00 perex@suse.cz +31 -9
#   ALSA CVS update
#   D:2004/05/24 15:51:51
#   C:PARISC Harmony driver
#   A:Takashi Iwai <tiwai@suse.de>
#   F:parisc/harmony.c:1.10->1.11 
#   L:- fixed the buffer handling without dma_alloc_coherent support.
# 
# ChangeSet
#   2004/05/28 14:19:07+02:00 perex@suse.cz 
#   ALSA CVS update - Takashi Iwai <tiwai@suse.de>
#   Digigram VX core
#   fixed sleep while atomic in the trigger callback.
# 
# sound/drivers/vx/vx_pcm.c
#   2004/05/24 09:06:17+02:00 perex@suse.cz +2 -8
#   ALSA CVS update
#   D:2004/05/24 15:06:17
#   C:Digigram VX core
#   A:Takashi Iwai <tiwai@suse.de>
#   F:drivers/vx/vx_pcm.c:1.3->1.4 
#   L:fixed sleep while atomic in the trigger callback.
# 
# ChangeSet
#   2004/05/28 14:14:19+02:00 perex@suse.cz 
#   ALSA CVS update - Takashi Iwai <tiwai@suse.de>
#   AC97 Codec Core
#   - added the global mutex for ac97_t (ad18xx mutex is removed).
#     used to protect paging and AD18xx multi-codecs.
#   - set PAGE_INT register explicitly before accessing (for STAC9758).
#   - moved ALC650 revision check to patch_alc650().
#   - support stereo Mic playback.
#   - moved STAC9708 quirk to patch_stac9708().
#   - don't clear PC_BEEP high bits (ac97 2.3 sets frequency there).
#   - avoid the unnecessary RESET-waiting for audio/modem codec.
#   - fixed the evaluation of modem codec to call mpatch callback properly.
#   - determine the SPDIF rate in the build path.
#   - added suffix argument to snd_ac97_rename|remove|swap_ctl().
#   - added snd_ac97_rename_vol_ctl().
# 
# sound/pci/ac97/ac97_proc.c
#   2004/05/24 08:24:42+02:00 perex@suse.cz +6 -4
#   ALSA CVS update
#   D:2004/05/24 14:24:42
#   C:AC97 Codec Core
#   A:Takashi Iwai <tiwai@suse.de>
#   F:include/ac97_codec.h:1.44->1.45 
#   F:pci/ac97/ac97_codec.c:1.132->1.133 
#   F:pci/ac97/ac97_local.h:1.5->1.6 
#   F:pci/ac97/ac97_patch.c:1.49->1.50 
#   F:pci/ac97/ac97_proc.c:1.7->1.8 
#   L:- added the global mutex for ac97_t (ad18xx mutex is removed).
#   L:  used to protect paging and AD18xx multi-codecs.
#   L:- set PAGE_INT register explicitly before accessing (for STAC9758).
#   L:- moved ALC650 revision check to patch_alc650().
#   L:- support stereo Mic playback.
#   L:- moved STAC9708 quirk to patch_stac9708().
#   L:- don't clear PC_BEEP high bits (ac97 2.3 sets frequency there).
#   L:- avoid the unnecessary RESET-waiting for audio/modem codec.
#   L:- fixed the evaluation of modem codec to call mpatch callback properly.
#   L:- determine the SPDIF rate in the build path.
#   L:- added suffix argument to snd_ac97_rename|remove|swap_ctl().
#   L:- added snd_ac97_rename_vol_ctl().
# 
# sound/pci/ac97/ac97_patch.c
#   2004/05/24 08:24:42+02:00 perex@suse.cz +75 -30
#   ALSA CVS update
#   D:2004/05/24 14:24:42
#   C:AC97 Codec Core
#   A:Takashi Iwai <tiwai@suse.de>
#   F:include/ac97_codec.h:1.44->1.45 
#   F:pci/ac97/ac97_codec.c:1.132->1.133 
#   F:pci/ac97/ac97_local.h:1.5->1.6 
#   F:pci/ac97/ac97_patch.c:1.49->1.50 
#   F:pci/ac97/ac97_proc.c:1.7->1.8 
#   L:- added the global mutex for ac97_t (ad18xx mutex is removed).
#   L:  used to protect paging and AD18xx multi-codecs.
#   L:- set PAGE_INT register explicitly before accessing (for STAC9758).
#   L:- moved ALC650 revision check to patch_alc650().
#   L:- support stereo Mic playback.
#   L:- moved STAC9708 quirk to patch_stac9708().
#   L:- don't clear PC_BEEP high bits (ac97 2.3 sets frequency there).
#   L:- avoid the unnecessary RESET-waiting for audio/modem codec.
#   L:- fixed the evaluation of modem codec to call mpatch callback properly.
#   L:- determine the SPDIF rate in the build path.
#   L:- added suffix argument to snd_ac97_rename|remove|swap_ctl().
#   L:- added snd_ac97_rename_vol_ctl().
# 
# sound/pci/ac97/ac97_local.h
#   2004/05/24 08:24:42+02:00 perex@suse.cz +4 -3
#   ALSA CVS update
#   D:2004/05/24 14:24:42
#   C:AC97 Codec Core
#   A:Takashi Iwai <tiwai@suse.de>
#   F:include/ac97_codec.h:1.44->1.45 
#   F:pci/ac97/ac97_codec.c:1.132->1.133 
#   F:pci/ac97/ac97_local.h:1.5->1.6 
#   F:pci/ac97/ac97_patch.c:1.49->1.50 
#   F:pci/ac97/ac97_proc.c:1.7->1.8 
#   L:- added the global mutex for ac97_t (ad18xx mutex is removed).
#   L:  used to protect paging and AD18xx multi-codecs.
#   L:- set PAGE_INT register explicitly before accessing (for STAC9758).
#   L:- moved ALC650 revision check to patch_alc650().
#   L:- support stereo Mic playback.
#   L:- moved STAC9708 quirk to patch_stac9708().
#   L:- don't clear PC_BEEP high bits (ac97 2.3 sets frequency there).
#   L:- avoid the unnecessary RESET-waiting for audio/modem codec.
#   L:- fixed the evaluation of modem codec to call mpatch callback properly.
#   L:- determine the SPDIF rate in the build path.
#   L:- added suffix argument to snd_ac97_rename|remove|swap_ctl().
#   L:- added snd_ac97_rename_vol_ctl().
# 
# sound/pci/ac97/ac97_codec.c
#   2004/05/24 08:24:42+02:00 perex@suse.cz +93 -70
#   ALSA CVS update
#   D:2004/05/24 14:24:42
#   C:AC97 Codec Core
#   A:Takashi Iwai <tiwai@suse.de>
#   F:include/ac97_codec.h:1.44->1.45 
#   F:pci/ac97/ac97_codec.c:1.132->1.133 
#   F:pci/ac97/ac97_local.h:1.5->1.6 
#   F:pci/ac97/ac97_patch.c:1.49->1.50 
#   F:pci/ac97/ac97_proc.c:1.7->1.8 
#   L:- added the global mutex for ac97_t (ad18xx mutex is removed).
#   L:  used to protect paging and AD18xx multi-codecs.
#   L:- set PAGE_INT register explicitly before accessing (for STAC9758).
#   L:- moved ALC650 revision check to patch_alc650().
#   L:- support stereo Mic playback.
#   L:- moved STAC9708 quirk to patch_stac9708().
#   L:- don't clear PC_BEEP high bits (ac97 2.3 sets frequency there).
#   L:- avoid the unnecessary RESET-waiting for audio/modem codec.
#   L:- fixed the evaluation of modem codec to call mpatch callback properly.
#   L:- determine the SPDIF rate in the build path.
#   L:- added suffix argument to snd_ac97_rename|remove|swap_ctl().
#   L:- added snd_ac97_rename_vol_ctl().
# 
# include/sound/ac97_codec.h
#   2004/05/24 08:24:42+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/05/24 14:24:42
#   C:AC97 Codec Core
#   A:Takashi Iwai <tiwai@suse.de>
#   F:include/ac97_codec.h:1.44->1.45 
#   F:pci/ac97/ac97_codec.c:1.132->1.133 
#   F:pci/ac97/ac97_local.h:1.5->1.6 
#   F:pci/ac97/ac97_patch.c:1.49->1.50 
#   F:pci/ac97/ac97_proc.c:1.7->1.8 
#   L:- added the global mutex for ac97_t (ad18xx mutex is removed).
#   L:  used to protect paging and AD18xx multi-codecs.
#   L:- set PAGE_INT register explicitly before accessing (for STAC9758).
#   L:- moved ALC650 revision check to patch_alc650().
#   L:- support stereo Mic playback.
#   L:- moved STAC9708 quirk to patch_stac9708().
#   L:- don't clear PC_BEEP high bits (ac97 2.3 sets frequency there).
#   L:- avoid the unnecessary RESET-waiting for audio/modem codec.
#   L:- fixed the evaluation of modem codec to call mpatch callback properly.
#   L:- determine the SPDIF rate in the build path.
#   L:- added suffix argument to snd_ac97_rename|remove|swap_ctl().
#   L:- added snd_ac97_rename_vol_ctl().
# 
# ChangeSet
#   2004/05/28 14:13:55+02:00 perex@suse.cz 
#   ALSA CVS update - Takashi Iwai <tiwai@suse.de>
#   Memalloc module
#   - added ifdef CONFIG_PCI around the enable module option to avoid the compile
#     warnings without PCI support.
# 
# sound/core/memalloc.c
#   2004/05/24 08:19:55+02:00 perex@suse.cz +4 -0
#   ALSA CVS update
#   D:2004/05/24 14:19:55
#   C:Memalloc module
#   A:Takashi Iwai <tiwai@suse.de>
#   F:core/memalloc.c:1.31->1.32 
#   L:- added ifdef CONFIG_PCI around the enable module option to avoid the compile
#   L:  warnings without PCI support.
# 
# ChangeSet
#   2004/05/28 14:13:31+02:00 perex@suse.cz 
#   ALSA CVS update - Takashi Iwai <tiwai@suse.de>
#   Documentation,ICE1712 driver,ICE1724 driver
#   - fixed the description of model module parameters for ice1712 and ice1724
#     drivers.
#   - added the support of VT1720-based mobo.
#     (still experimental and supporting AC97 only)
# 
# sound/pci/ice1712/vt1720_mobo.h
#   2004/05/28 13:46:26+02:00 perex@suse.cz +35 -0
#   ALSA CVS update
#   D:2004/05/24 14:18:20
#   C:Documentation,ICE1712 driver,ICE1724 driver
#   A:Takashi Iwai <tiwai@suse.de>
#   F:Documentation/ALSA-Configuration.txt:1.44->1.45 
#   F:pci/ice1712/Makefile:1.11->1.12 
#   F:pci/ice1712/ice1724.c:1.31->1.32 
#   F:pci/ice1712/vt1720_mobo.c:INITIAL->1.1 
#   F:pci/ice1712/vt1720_mobo.h:INITIAL->1.1 
#   L:- fixed the description of model module parameters for ice1712 and ice1724
#   L:  drivers.
#   L:- added the support of VT1720-based mobo.
#   L:  (still experimental and supporting AC97 only)
# 
# sound/pci/ice1712/vt1720_mobo.h
#   2004/05/28 13:46:26+02:00 perex@suse.cz +0 -0
#   BitKeeper file /home/perex/bk/linux-sound/work/sound/pci/ice1712/vt1720_mobo.h
# 
# sound/pci/ice1712/vt1720_mobo.c
#   2004/05/28 13:46:21+02:00 perex@suse.cz +97 -0
#   ALSA CVS update
#   D:2004/05/24 14:18:20
#   C:Documentation,ICE1712 driver,ICE1724 driver
#   A:Takashi Iwai <tiwai@suse.de>
#   F:Documentation/ALSA-Configuration.txt:1.44->1.45 
#   F:pci/ice1712/Makefile:1.11->1.12 
#   F:pci/ice1712/ice1724.c:1.31->1.32 
#   F:pci/ice1712/vt1720_mobo.c:INITIAL->1.1 
#   F:pci/ice1712/vt1720_mobo.h:INITIAL->1.1 
#   L:- fixed the description of model module parameters for ice1712 and ice1724
#   L:  drivers.
#   L:- added the support of VT1720-based mobo.
#   L:  (still experimental and supporting AC97 only)
# 
# sound/pci/ice1712/ice1724.c
#   2004/05/24 08:18:20+02:00 perex@suse.cz +6 -6
#   ALSA CVS update
#   D:2004/05/24 14:18:20
#   C:Documentation,ICE1712 driver,ICE1724 driver
#   A:Takashi Iwai <tiwai@suse.de>
#   F:Documentation/ALSA-Configuration.txt:1.44->1.45 
#   F:pci/ice1712/Makefile:1.11->1.12 
#   F:pci/ice1712/ice1724.c:1.31->1.32 
#   F:pci/ice1712/vt1720_mobo.c:INITIAL->1.1 
#   F:pci/ice1712/vt1720_mobo.h:INITIAL->1.1 
#   L:- fixed the description of model module parameters for ice1712 and ice1724
#   L:  drivers.
#   L:- added the support of VT1720-based mobo.
#   L:  (still experimental and supporting AC97 only)
# 
# sound/pci/ice1712/Makefile
#   2004/05/24 08:18:20+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/05/24 14:18:20
#   C:Documentation,ICE1712 driver,ICE1724 driver
#   A:Takashi Iwai <tiwai@suse.de>
#   F:Documentation/ALSA-Configuration.txt:1.44->1.45 
#   F:pci/ice1712/Makefile:1.11->1.12 
#   F:pci/ice1712/ice1724.c:1.31->1.32 
#   F:pci/ice1712/vt1720_mobo.c:INITIAL->1.1 
#   F:pci/ice1712/vt1720_mobo.h:INITIAL->1.1 
#   L:- fixed the description of model module parameters for ice1712 and ice1724
#   L:  drivers.
#   L:- added the support of VT1720-based mobo.
#   L:  (still experimental and supporting AC97 only)
# 
# Documentation/sound/alsa/ALSA-Configuration.txt
#   2004/05/24 08:18:20+02:00 perex@suse.cz +3 -2
#   ALSA CVS update
#   D:2004/05/24 14:18:20
#   C:Documentation,ICE1712 driver,ICE1724 driver
#   A:Takashi Iwai <tiwai@suse.de>
#   F:Documentation/ALSA-Configuration.txt:1.44->1.45 
#   F:pci/ice1712/Makefile:1.11->1.12 
#   F:pci/ice1712/ice1724.c:1.31->1.32 
#   F:pci/ice1712/vt1720_mobo.c:INITIAL->1.1 
#   F:pci/ice1712/vt1720_mobo.h:INITIAL->1.1 
#   L:- fixed the description of model module parameters for ice1712 and ice1724
#   L:  drivers.
#   L:- added the support of VT1720-based mobo.
#   L:  (still experimental and supporting AC97 only)
# 
# sound/pci/ice1712/vt1720_mobo.c
#   2004/05/28 13:46:21+02:00 perex@suse.cz +0 -0
#   BitKeeper file /home/perex/bk/linux-sound/work/sound/pci/ice1712/vt1720_mobo.c
# 
# ChangeSet
#   2004/05/28 14:13:07+02:00 perex@suse.cz 
#   ALSA CVS update - Takashi Iwai <tiwai@suse.de>
#   ATIIXP driver
#   - continue to probe other codecs even if a codec returns error
#     (instead of breaking the probing).
#     this will fix some cases with both AC97 and MC97 codecs.
# 
# sound/pci/atiixp.c
#   2004/05/24 08:16:43+02:00 perex@suse.cz +4 -12
#   ALSA CVS update
#   D:2004/05/24 14:16:43
#   C:ATIIXP driver
#   A:Takashi Iwai <tiwai@suse.de>
#   F:pci/atiixp.c:1.9->1.10 
#   L:- continue to probe other codecs even if a codec returns error
#   L:  (instead of breaking the probing).
#   L:  this will fix some cases with both AC97 and MC97 codecs.
# 
# ChangeSet
#   2004/05/28 14:12:17+02:00 perex@suse.cz 
#   ALSA CVS update - Clemens Ladisch <clemens@ladisch.de>
#   ALSA sequencer,ALSA<-OSS sequencer
#   export snd_seq_set_queue_tempo() for OSS to prevent calling
#   snd_seq_kernel_client_ctl() (using copy_from_user()) in interrupt
#   context
# 
# sound/core/seq/seq_clientmgr.c
#   2004/05/24 07:31:18+02:00 perex@suse.cz +9 -9
#   ALSA CVS update
#   D:2004/05/24 13:31:18
#   C:ALSA sequencer,ALSA<-OSS sequencer
#   A:Clemens Ladisch <clemens@ladisch.de>
#   F:core/seq/seq.c:1.12->1.13 
#   F:core/seq/seq_clientmgr.c:1.28->1.29 
#   F:core/seq/oss/seq_oss_timer.c:1.5->1.6 
#   F:include/seq_kernel.h:1.9->1.10 
#   L:export snd_seq_set_queue_tempo() for OSS to prevent calling
#   L:snd_seq_kernel_client_ctl() (using copy_from_user()) in interrupt
#   L:context
# 
# sound/core/seq/seq.c
#   2004/05/24 07:31:18+02:00 perex@suse.cz +1 -0
#   ALSA CVS update
#   D:2004/05/24 13:31:18
#   C:ALSA sequencer,ALSA<-OSS sequencer
#   A:Clemens Ladisch <clemens@ladisch.de>
#   F:core/seq/seq.c:1.12->1.13 
#   F:core/seq/seq_clientmgr.c:1.28->1.29 
#   F:core/seq/oss/seq_oss_timer.c:1.5->1.6 
#   F:include/seq_kernel.h:1.9->1.10 
#   L:export snd_seq_set_queue_tempo() for OSS to prevent calling
#   L:snd_seq_kernel_client_ctl() (using copy_from_user()) in interrupt
#   L:context
# 
# sound/core/seq/oss/seq_oss_timer.c
#   2004/05/24 07:31:19+02:00 perex@suse.cz +1 -1
#   ALSA CVS update
#   D:2004/05/24 13:31:18
#   C:ALSA sequencer,ALSA<-OSS sequencer
#   A:Clemens Ladisch <clemens@ladisch.de>
#   F:core/seq/seq.c:1.12->1.13 
#   F:core/seq/seq_clientmgr.c:1.28->1.29 
#   F:core/seq/oss/seq_oss_timer.c:1.5->1.6 
#   F:include/seq_kernel.h:1.9->1.10 
#   L:export snd_seq_set_queue_tempo() for OSS to prevent calling
#   L:snd_seq_kernel_client_ctl() (using copy_from_user()) in interrupt
#   L:context
# 
# include/sound/seq_kernel.h
#   2004/05/24 07:31:18+02:00 perex@suse.cz +3 -0
#   ALSA CVS update
#   D:2004/05/24 13:31:18
#   C:ALSA sequencer,ALSA<-OSS sequencer
#   A:Clemens Ladisch <clemens@ladisch.de>
#   F:core/seq/seq.c:1.12->1.13 
#   F:core/seq/seq_clientmgr.c:1.28->1.29 
#   F:core/seq/oss/seq_oss_timer.c:1.5->1.6 
#   F:include/seq_kernel.h:1.9->1.10 
#   L:export snd_seq_set_queue_tempo() for OSS to prevent calling
#   L:snd_seq_kernel_client_ctl() (using copy_from_user()) in interrupt
#   L:context
# 
diff -Nru a/Documentation/sound/alsa/ALSA-Configuration.txt b/Documentation/sound/alsa/ALSA-Configuration.txt
--- a/Documentation/sound/alsa/ALSA-Configuration.txt	2004-08-04 17:48:48 -07:00
+++ b/Documentation/sound/alsa/ALSA-Configuration.txt	2004-08-04 17:48:48 -07:00
@@ -188,6 +188,13 @@
 
     This module supports up to 8 cards and autoprobe.
 
+  Module snd-atiixp-modem
+  -----------------------
+
+    Module for ATI IXP 150/200/250 AC97 modem controllers.
+
+    Module supports up to 8 cards.
+
   Module snd-au8810, snd-au8820, snd-au8830
   -----------------------------------------
 
@@ -516,6 +523,13 @@
 
     Module for ForteMedia FM801 based PCI soundcards.
 
+    tea575x_tuner       - Enable TEA575x tuner
+                          - 1 = MediaForte 256-PCS
+                          - 2 = MediaForte 256-PCPR
+                          - 3 = MediaForte 64-PCR  
+                          - High 16-bits are video (radio) device number + 1
+                          - example: 0x10002 (MediaForte 256-PCPR, device 1)
+
     Module supports up to 8 cards and autoprobe.
     
   Module snd-gusclassic
@@ -613,7 +627,7 @@
     model       - Use the given board model, one of the following:
 		  delta1010, dio2496, delta66, delta44, audiophile, delta410,
 		  delta1010lt, vx442, ewx2496, ews88mt, ews88mt_new, ews88d,
-		  dmx6fire, dsp24, dsp24_71, ez8
+		  dmx6fire, dsp24, dsp24_value, dsp24_71, ez8
     omni	- Omni I/O support for MidiMan M-Audio Delta44/66
     cs8427_timeout - reset timeout for the CS8427 chip (S/PDIF transciever)
                      in msec resolution, default value is 500 (0.5 sec)
@@ -631,7 +645,8 @@
 			* TerraTec Aureon Sky-5.1, Space-7.1
 
     model       - Use the given board model, one of the following:
-		  revo71, amp2000, prodigy71, aureon51, aureon71
+		  revo71, amp2000, prodigy71, aureon51, aureon71,
+		  k8x800
 
     Module supports up to 8 cards and autoprobe.
 
@@ -655,6 +670,8 @@
                      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
+    buggy_irq      - Enable workaround for buggy interrupts on some
+                     motherboards (default off)
 
     Module supports autoprobe and multiple bus-master chips (max 8).
 
@@ -1102,6 +1119,16 @@
     pid             - Product ID for the device (optional)
 
     This module supports up to 8 cards, autoprobe and hotplugging.
+
+  Module snd-usb-usx2y
+  --------------------
+
+    Module for Tascam USB US-122, US-224 and US-428 devices.
+
+    This module supports up to 8 cards, autoprobe and hotplugging.
+
+    Note: you need to load the firmware via usx2yloader utility included
+          in alsa-tools and alsa-firmware packages.
 
   Module snd-via82xx
   ------------------
diff -Nru a/Documentation/sound/alsa/DocBook/alsa-driver-api.tmpl b/Documentation/sound/alsa/DocBook/alsa-driver-api.tmpl
--- a/Documentation/sound/alsa/DocBook/alsa-driver-api.tmpl	2004-08-04 17:48:48 -07:00
+++ b/Documentation/sound/alsa/DocBook/alsa-driver-api.tmpl	2004-08-04 17:48:48 -07:00
@@ -47,7 +47,6 @@
      </sect1>
      <sect1><title>Memory Management Helpers</title>
 !Esound/core/memory.c
-!Iinclude/sound/sndmagic.h
 !Esound/core/memalloc.c
      </sect1>
   </chapter>
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-08-04 17:48:48 -07:00
+++ b/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl	2004-08-04 17:48:48 -07:00
@@ -18,8 +18,8 @@
       </affiliation>
      </author>
 
-     <date>Mar. 6, 2004</date>
-     <edition>0.3.1</edition>
+     <date>July 11, 2004</date>
+     <edition>0.3.3</edition>
 
     <abstract>
       <para>
@@ -395,7 +395,6 @@
   #include <linux/pci.h>
   #include <linux/slab.h>
   #include <sound/core.h>
-  #define SNDRV_GET_ID
   #include <sound/initval.h>
 
   // module parameters (see "Module Parameters")
@@ -411,10 +410,6 @@
           // "PCI Resource Managements"
   };
 
-  // this should be go into <sound/sndmagic.h>
-  // (see "Management of Cards and Components")
-  #define mychip_t_magic        0xa15a4501
-
   // chip-specific destructor
   // (see "PCI Resource Managements")
   static int snd_mychip_free(mychip_t *chip)
@@ -426,8 +421,7 @@
   // (see "Management of Cards and Components")
   static int snd_mychip_dev_free(snd_device_t *device)
   {
-          mychip_t *chip = snd_magic_cast(mychip_t,
-                  device->device_data, return -ENXIO);
+          mychip_t *chip = device->device_data;
           return snd_mychip_free(chip);
   }
 
@@ -448,8 +442,8 @@
           // check PCI availability here
           // (see "PCI Resource Managements")
 
-          // allocate a chip-specific data with magic-alloc
-          chip = snd_magic_kcalloc(mychip_t, 0, GFP_KERNEL);
+          // allocate a chip-specific data with zero filled
+          chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
           if (chip == NULL)
                   return -ENOMEM;
 
@@ -744,7 +738,6 @@
   #include <linux/pci.h>
   #include <linux/slab.h>
   #include <sound/core.h>
-  #define SNDRV_GET_ID
   #include <sound/initval.h>
 ]]>
           </programlisting>
@@ -906,13 +899,6 @@
       </para>
 
       <para>
-        You might have objections against such a typedef, but this
-      typedef is necessary if you use a <quote>magic-cast</quote>
-      (explained <link
-      linkend="card-management-chip-what-advantage"><citetitle>later</citetitle></link>). 
-      </para>
-
-      <para>
         In general, there are two ways to allocate the chip record.
       </para>
 
@@ -943,9 +929,8 @@
             </programlisting>
           </informalexample>
 
-          With this method, you don't have to allocate twice. But you
-        cannot use <quote>magic-cast</quote> for this record pointer,
-        instead. 
+          With this method, you don't have to allocate twice.
+          The record is released together with the card instance.
         </para>
       </section>
 
@@ -956,7 +941,7 @@
           After allocating a card instance via
           <function>snd_card_new()</function> (with
           <constant>NULL</constant> on the 4th arg), call
-          <function>snd_magic_kcalloc()</function>. 
+          <function>kcalloc()</function>. 
 
           <informalexample>
             <programlisting>
@@ -965,13 +950,10 @@
   mychip_t *chip;
   card = snd_card_new(index[dev], id[dev], THIS_MODULE, NULL);
   .....
-  chip = snd_magic_kcalloc(mychip_t, 0, GFP_KERNEL);
+  chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
 ]]>
             </programlisting>
           </informalexample>
-
-          Once when the record is allocated via snd_magic stuff, you
-        can use <quote>magic-cast</quote> for the void pointer. 
         </para>
 
         <para>
@@ -1003,21 +985,6 @@
         </para>
 
         <para>
-          Also, you need to define a magic-value for <type>mychip_t</type>.
-
-          <informalexample>
-            <programlisting>
-<![CDATA[
-  #define mychip_t_magic        0xa15a4501
-]]>
-            </programlisting>
-          </informalexample>
-	(the detail will be described in the
-	<link linkend="card-management-chip-what-advantage"><citetitle>
-	next</citetitle></link> subsection).
-	</para>
-
-        <para>
           Next, initialize the fields, and register this chip
           record as a low-level device with a specified
           <parameter>ops</parameter>, 
@@ -1045,8 +1012,7 @@
 <![CDATA[
   static int snd_mychip_dev_free(snd_device_t *device)
   {
-          mychip_t *chip = snd_magic_cast(mychip_t, device->device_data,
-                                          return -ENXIO);
+          mychip_t *chip = device->device_data;
           return snd_mychip_free(chip);
   }
 ]]>
@@ -1056,126 +1022,6 @@
           where <function>snd_mychip_free()</function> is the real destructor.
         </para>
       </section>
-
-      <section id="card-management-chip-what-advantage">
-        <title>Not a magic but a logic</title>
-
-        <para>Now, you might have a question: What is the advantage of the
-        second method?  Obviously, it looks far more complicated.</para> 
-        <para>
-          As I wrote many times, the second method allows a
-        <quote>magic-cast</quote> for <type>mychip_t</type>. If you
-        have a void pointer (such as
-        pcm-&gt;private_data), the pointer type
-        is unknown at the compile time, and you cannot know even if a
-        wrong pointer type is passed. The compiler would accept
-        it. The magic-cast checks the pointer type at the runtime (and
-        whether it's a null pointer, too). Hence, the cast will be
-        much safer and good for debugging. 
-        </para>
-
-	<para>
-	As you have already seen, allocation with a magic-header can
-	be done via <function>snd_magic_kmalloc()</function> or
-	<function>snd_magic_kcalloc()</function>.
-
-          <informalexample>
-            <programlisting>
-<![CDATA[
-  mychip_t *chip;
-  chip = snd_magic_kmalloc(mychip_t, 0, GFP_KERNEL);
-  chip = snd_magic_kcalloc(mychip_t, 0, GFP_KERNEL);
-]]>
-            </programlisting>
-          </informalexample>
-
-        The difference of these two functions is whether the area is
-	zero-cleared (<function>kcalloc</function>) or not
-	(<function>kmalloc</function>).
-	</para>
-
-	<para>
-	The first argument of the allocator is the type of the
-	record.  The magic-constant has to be defined for this type
-	beforehand.  In this case, we'll need to define
-	<constant>mychip_t_magic</constant>, for example, as already
-	seen,
-
-          <informalexample>
-            <programlisting>
-<![CDATA[
-  #define mychip_t_magic        0xa15a4501
-]]>
-            </programlisting>
-          </informalexample>
-
-        The value is arbitrary but should be unique.
-        This is usually defined in
-        <filename>&lt;include/sndmagic.h&gt;</filename> or
-        <filename>&lt;include/amagic.h&gt;</filename> for alsa-driver tree,
-        but you may define it locally in the code at the early
-        development stage, since changing
-        <filename>sndmagic.h</filename> will lead to the recompilation
-        of the whole driver codes.
-        </para>
-
-	<para>
-	The second argument is the extra-data length.  It is usually
-        zero.  The third argument is the flags to be passed to kernel
-        memory allocator, <constant>GFP_XXX</constant>.  Normally,
-        <constant>GFP_KERNEL</constant> is passed.
-	</para>
-
-        <para>
-          For casting a pointer, use
-          <function>snd_magic_cast()</function> macro:
-
-          <informalexample>
-            <programlisting>
-<![CDATA[
-  mychip_t *chip = snd_magic_cast(mychip_t, source_pointer, action);
-]]>
-            </programlisting>
-          </informalexample>
-
-        where <parameter>source_pointer</parameter> is the pointer to
-        be casted (e.g. pcm-&gt;private_data), and
-        <parameter>action</parameter> is the action to do if the cast
-        fails (e.g. return <constant>-EINVAL</constant>). 
-        </para>
-
-	<para>
-	For releasing the magic-allocated data, you need to call
-        <function>snd_magic_kfree()</function> function instead of
-        <function>kfree()</function>.
-
-          <informalexample>
-            <programlisting>
-<![CDATA[
-  snd_magic_kfree(chip);
-]]>
-            </programlisting>
-          </informalexample>
-	</para>
-
-	<para>
-	If you call <function>kfree()</function> for the
-	magic-allocated value, it will lead to memory leaks.
-	When the ALSA drivers are compiled with
-	<constant>CONFIG_SND_DEBUG_MEMORY</constant> kernel config (or
-	configured with <option>--with-debug=full</option>), the
-	non-matching free will be checked and you'll see warning
-	messages.
-	</para>
-
-        <para>
-          If you are 100% sure that your code is bug-free, you can
-          compile the driver without
-          <constant>CONFIG_SND_DEBUG_MEMORY</constant> kernel config,
-          so that the magic-allocator and the magic-cast will be
-          replaced to the normal kmalloc and cast.
-        </para>
-      </section>
     </section>
 
     <section id="card-management-registration">
@@ -1238,8 +1084,6 @@
           struct pci_dev *pci;
 
           unsigned long port;
-          struct resource *res_port;
-
           int irq;
   };
 
@@ -1248,16 +1092,13 @@
           // disable hardware here if any
           // (not implemented in this document)
 
-          // release the i/o port
-          if (chip->res_port) {
-                  release_resource(chip->res_port);
-                  kfree_nocheck(chip->res_port);
-          }
           // release the irq
           if (chip->irq >= 0)
                   free_irq(chip->irq, (void *)chip);
+          // release the i/o ports
+          pci_release_regions(chip->pci);
           // release the data
-          snd_magic_kfree(chip);
+          kfree(chip);
           return 0;
   }
 
@@ -1283,7 +1124,7 @@
                   return -ENXIO;
           }
 
-          chip = snd_magic_kcalloc(mychip_t, 0, GFP_KERNEL);
+          chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
           if (chip == NULL)
                   return -ENOMEM;
 
@@ -1293,18 +1134,16 @@
           chip->irq = -1;
 
           // (1) PCI resource allocation
-          chip->port = pci_resource_start(pci, 0);
-          if ((chip->res_port = request_region(chip->port, 8,
-                                                 "My Chip")) == NULL) { 
-                  snd_mychip_free(chip);
-                  printk(KERN_ERR "cannot allocate the port\n");
-                  return -EBUSY;
+          if ((err = pci_request_regions(pci, "My Chip")) < 0) {
+                  kfree(chip);
+                  return err;
           }
+          chip->port = pci_resource_start(pci, 0);
           if (request_irq(pci->irq, snd_mychip_interrupt,
                           SA_INTERRUPT|SA_SHIRQ, "My Chip",
                           (void *)chip)) {
+                  printk(KERN_ERR "cannot grab irq %d\n", pci->irq);
                   snd_mychip_free(chip);
-                  printk(KERN_ERR "cannot grab irq\n");
                   return -EBUSY;
           }
           chip->irq = pci->irq;
@@ -1420,8 +1259,6 @@
           snd_card_t *card;
 
           unsigned long port;
-          struct resource *res_port;
-
           int irq;
   };
 ]]>
@@ -1436,7 +1273,7 @@
       need to initialize this number as -1 before actual allocation,
       since irq 0 is valid. The port address and its resource pointer
       can be initialized as null by
-      <function>snd_magic_kcalloc()</function> automatically, so you
+      <function>kcalloc()</function> automatically, so you
       don't have to take care of resetting them. 
       </para>
 
@@ -1446,14 +1283,11 @@
         <informalexample>
           <programlisting>
 <![CDATA[
-  chip->port = pci_resource_start(pci, 0);
-  if ((chip->res_port = request_region(chip->port, 8,
-                                       "My Chip")) == NULL) { 
-          printk(KERN_ERR "cannot allocate the port 0x%lx\n",
-                 chip->port);
-          snd_mychip_free(chip);
-          return -EBUSY;
+  if ((err = pci_request_regions(pci, "My Chip")) < 0) { 
+          kfree(chip);
+          return err;
   }
+  chip->port = pci_resource_start(pci, 0);
 ]]>
           </programlisting>
         </informalexample>
@@ -1477,8 +1311,8 @@
   if (request_irq(pci->irq, snd_mychip_interrupt,
                   SA_INTERRUPT|SA_SHIRQ, "My Chip",
                   (void *)chip)) {
-          snd_mychip_free(chip);
           printk(KERN_ERR "cannot grab irq %d\n", pci->irq);
+          snd_mychip_free(chip);
           return -EBUSY;
   }
   chip->irq = pci->irq;
@@ -1517,16 +1351,13 @@
   static irqreturn_t snd_mychip_interrupt(int irq, void *dev_id,
                                           struct pt_regs *regs)
   {
-          mychip_t *chip = snd_magic_cast(mychip_t, dev_id, return);
+          mychip_t *chip = dev_id;
           ....
           return IRQ_HANDLED;
   }
 ]]>
           </programlisting>
         </informalexample>
-
-        Again the magic-cast is used here to get the correct pointer
-      from the second argument. 
       </para>
 
       <para>
@@ -1538,7 +1369,45 @@
 
       <para>
         For releasing the resources, <quote>check-and-release</quote>
-        method is a safer way. For the i/o port, do like this: 
+        method is a safer way. For the interrupt, do like this: 
+
+        <informalexample>
+          <programlisting>
+<![CDATA[
+  if (chip->irq >= 0)
+          free_irq(chip->irq, (void *)chip);
+]]>
+          </programlisting>
+        </informalexample>
+
+        Since the irq number can start from 0, you should initialize
+        chip-&gt;irq with a negative value (e.g. -1), so that you can
+        check the validity of the irq number as above.
+      </para>
+
+      <para>
+        When you requested I/O ports or memory regions via
+	<function>pci_request_region()</function> or
+	<function>pci_request_regions()</function> like this example,
+	release the resource(s) using the corresponding function,
+	<function>pci_release_region()</function> or
+	<function>pci_release_regions()</function>.
+
+        <informalexample>
+          <programlisting>
+<![CDATA[
+  pci_release_regions(chip->pci);
+]]>
+          </programlisting>
+        </informalexample>
+      </para>
+
+      <para>
+	When you requested manually via <function>request_region()</function>
+	or <function>request_mem_region</function>, you can release it via
+	<function>release_resource()</function>.  Suppose that you keep
+	the resource pointer returned from <function>request_region()</function>
+	in chip-&gt;res_port, the release procedure looks like below:
 
         <informalexample>
           <programlisting>
@@ -1550,10 +1419,8 @@
 ]]>
           </programlisting>
         </informalexample>
-      </para>
 
-      <para>
-        As you can see, the i/o resource pointer is also to be freed
+      As you can see, the resource pointer is also to be freed
       via <function>kfree_nocheck()</function> after
       <function>release_resource()</function> is called. You
       cannot use <function>kfree()</function> here, because on ALSA,
@@ -1567,35 +1434,19 @@
       </para>
 
       <para>
-        For releasing the interrupt, do like this:
-
-        <informalexample>
-          <programlisting>
-<![CDATA[
-  if (chip->irq >= 0)
-          free_irq(chip->irq, (void *)chip);
-]]>
-          </programlisting>
-        </informalexample>
-
         And finally, release the chip-specific record.
 
         <informalexample>
           <programlisting>
 <![CDATA[
-  snd_magic_kfree(chip);
+  kfree(chip);
 ]]>
           </programlisting>
         </informalexample>
       </para>
 
       <para>
-        The chip instance is freed via
-      <function>snd_magic_kfree()</function>. Please use this function
-      for the object allocated by
-      <function>snd_magic_kmalloc()</function>. If you free it with
-      <function>kfree()</function>, it won't work properly and will
-      result in the memory leak. Also, again, remember that you cannot
+      Again, remember that you cannot
       set <parameter>__devexit</parameter> prefix for this destructor. 
       </para>
 
@@ -1629,7 +1480,6 @@
           ....
           unsigned long iobase_phys;
           unsigned long iobase_virt;
-          struct resource *res_iobase;
   };
 ]]>
           </programlisting>
@@ -1640,15 +1490,14 @@
         <informalexample>
           <programlisting>
 <![CDATA[
+  if ((err = pci_request_regions(pci, "My Chip")) < 0) {
+          kfree(chip);
+          return err;
+  }
   chip->iobase_phys = pci_resource_start(pci, 0);
   chip->iobase_virt = (unsigned long)
-                      ioremap_nocache(chip->iobase_phys, 512);
-  if ((chip->res_port = request_mem_region(chip->iobase_phys, 512,
-                                           "My Chip")) == NULL) {
-          printk(KERN_ERR "cannot allocate the memory region\n");
-          snd_mychip_free(chip);
-          return -EBUSY;
-  }
+                      ioremap_nocache(chip->iobase_phys,
+                                      pci_resource_len(pci, 0));
 ]]>
           </programlisting>
         </informalexample>
@@ -1663,10 +1512,8 @@
           ....
           if (chip->iobase_virt)
                   iounmap((void *)chip->iobase_virt);
-          if (chip->res_iobase) {
-                  release_resource(chip->res_iobase);
-                  kfree_nocheck(chip->res_iobase);
-          }
+          ....
+          pci_release_regions(chip->pci);
           ....
   }
 ]]>
@@ -1857,9 +1704,6 @@
   #include <sound/pcm.h>
   ....
 
-  #define chip_t mychip_t
-  ....
-
   /* hardware definition */
   static snd_pcm_hardware_t snd_mychip_playback_hw = {
           .info = (SNDRV_PCM_INFO_MMAP |
@@ -2224,8 +2068,7 @@
 <![CDATA[
   static void mychip_pcm_free(snd_pcm_t *pcm)
   {
-          mychip_t *chip = snd_magic_cast(mychip_t,
-                                    pcm->private_data, return);
+          mychip_t *chip = snd_pcm_chip(pcm);
           // free your own data
           kfree(chip->my_private_pcm_data);
           // do what you like else...
@@ -2653,8 +2496,11 @@
 	done in
 	<link linkend="pcm-interface-operators-open-callback"><citetitle>
 	the open callback</citetitle></link>.
-        Since it's a void pointer, you should use magic-kmalloc and
-	magic-cast for such an object. 
+	Don't mix this with <constant>pcm-&gt;private_data</constant>.
+	The <constant>pcm-&gt;private_data</constant> usually points the
+	chip instance assigned statically at the creation of PCM, while the 
+	<constant>runtime-&gt;private_data</constant> points a dynamic
+	data created at the PCM open callback.
 
           <informalexample>
             <programlisting>
@@ -2663,7 +2509,7 @@
   {
           my_pcm_data_t *data;
           ....
-          data = snd_magic_kmalloc(my_pcm_data_t, 0, GFP_KERNEL);
+          data = kmalloc(sizeof(*data), GFP_KERNEL);
           substream->runtime->private_data = data;
           ....
   }
@@ -2710,8 +2556,6 @@
         <informalexample>
           <programlisting>
 <![CDATA[
-  #define chip_t mychip_t
-
   int xxx() {
           mychip_t *chip = snd_pcm_substream_chip(substream);
           ....
@@ -2719,13 +2563,14 @@
 ]]>
           </programlisting>
         </informalexample>
-      </para>
 
-      <para>
-        It's expanded with a magic-cast, so the cast-error is
-      automatically checked. You should define <type>chip_t</type> at
-      the beginning of the code, since this will be referred in many
-      places of pcm and control interfaces. 
+	The macro reads <constant>substream-&gt;private_data</constant>,
+	which is a copy of <constant>pcm-&gt;private_data</constant>.
+	You can override the former if you need to assign different data
+	records per PCM substream.  For example, cmi8330 driver assigns
+	different private_data for playback and capture directions,
+	because it uses two different codecs (SB- and AD-compatible) for
+	different directions.
       </para>
 
       <section id="pcm-interface-operators-open-callback">
@@ -2803,7 +2648,7 @@
   static int snd_xxx_close(snd_pcm_substream_t *substream)
   {
           ....
-          snd_magic_kfree(substream->runtime->private_data);
+          kfree(substream->runtime->private_data);
           ....
   }
 ]]>
@@ -2887,10 +2732,10 @@
         <para>
           Another note is that this callback is non-atomic
         (schedulable). This is important, because the
-        <structfield>prepare</structfield> callback 
+        <structfield>trigger</structfield> callback 
         is atomic (non-schedulable). That is, mutex or any
-        schedule-related functions are available only in
-        <structfield>hw_params</structfield> callback. 
+        schedule-related functions are not available in
+        <structfield>trigger</structfield> callback.
 	Please see the subsection
 	<link linkend="pcm-interface-atomicity"><citetitle>
 	Atomicity</citetitle></link> for details.
@@ -2956,7 +2801,8 @@
         </para>
 
         <para>
-          As mentioned above, this callback is atomic.
+	Note that this callback became non-atomic since the recent version.
+	You can use schedule-related fucntions safely in this callback now.
         </para>
 
         <para>
@@ -3041,7 +2887,12 @@
         </para>
 
         <para>
-          This callback is also atomic.
+          As mentioned, this callback is atomic.  You cannot call
+	  the function going to sleep.
+	  The trigger callback should be as minimal as possible,
+	  just really triggering the DMA.  The other stuff should be
+	  initialized hw_params and prepare callbacks properly
+	  beforehand.
         </para>
       </section>
 
@@ -3176,7 +3027,7 @@
   static irqreturn_t snd_mychip_interrupt(int irq, void *dev_id,
                                           struct pt_regs *regs)
   {
-          mychip_t *chip = snd_magic_cast(mychip_t, dev_id, return);
+          mychip_t *chip = dev_id;
           spin_lock(&chip->lock);
           ....
           if (pcm_irq_invoked(chip)) {
@@ -3220,7 +3071,7 @@
   static irqreturn_t snd_mychip_interrupt(int irq, void *dev_id,
                                           struct pt_regs *regs)
   {
-          mychip_t *chip = snd_magic_cast(mychip_t, dev_id, return);
+          mychip_t *chip = dev_id;
           spin_lock(&chip->lock);
           ....
           if (pcm_irq_invoked(chip)) {
@@ -3287,7 +3138,7 @@
       <para>
       As already seen, some pcm callbacks are atomic and some are
       not.  For example, <parameter>hw_params</parameter> callback is
-      non-atomic, while <parameter>prepare</parameter> callback is
+      non-atomic, while <parameter>trigger</parameter> callback is
       atomic.  This means, the latter is called already in a spinlock
       held by the PCM middle layer. Please take this atomicity into
       account when you use a spinlock or a semaphore in the callbacks.
@@ -3298,7 +3149,7 @@
       <function>schedule</function> or go to
       <function>sleep</function>.  The semaphore and mutex do sleep,
       and hence they cannot be used inside the atomic callbacks
-      (e.g. <parameter>prepare</parameter> callback).
+      (e.g. <parameter>trigger</parameter> callback).
       For taking a certain delay in such a callback, please use
       <function>udelay()</function> or <function>mdelay()</function>.
       </para>
@@ -3325,7 +3176,7 @@
   static unsigned int rates[] =
           {4000, 10000, 22050, 44100};
   static snd_pcm_hw_constraint_list_t constraints_rates = {
-          .count = sizeof(rates) / sizeof(rates[0]),
+          .count = ARRAY_SIZE(rates),
           .list = rates,
           .mask = 0,
   };
@@ -3988,8 +3839,7 @@
   static unsigned short snd_mychip_ac97_read(ac97_t *ac97,
                                              unsigned short reg)
   {
-          mychip_t *chip = snd_magic_cast(mychip_t,
-                                   ac97->private_data, return 0);
+          mychip_t *chip = ac97->private_data;
           ....
           // read a register value here from the codec
           return the_register_value;
@@ -3998,26 +3848,26 @@
   static void snd_mychip_ac97_write(ac97_t *ac97,
                                    unsigned short reg, unsigned short val)
   {
-          mychip_t *chip = snd_magic_cast(mychip_t,
-                                   ac97->private_data, return 0);
+          mychip_t *chip = ac97->private_data;
           ....
           // write the given register value to the codec
   }
 
   static int snd_mychip_ac97(mychip_t *chip)
   {
-          ac97_bus_t bus, *pbus;
-          ac97_t ac97;
+          ac97_bus_t *bus;
+          ac97_template_t ac97;
           int err;
+          static ac97_bus_ops_t ops = {
+                  .write = snd_mychip_ac97_write,
+                  .read = snd_mychip_ac97_read,
+          };
 
-          memset(&bus, 0, sizeof(bus));
-          bus.write = snd_mychip_ac97_write;
-          bus.read = snd_mychip_ac97_read;
-          if ((err = snd_ac97_bus(chip->card, &bus, &pbus)) < 0)
+          if ((err = snd_ac97_bus(chip->card, 0, &ops, NULL, &bus)) < 0)
                   return err;
           memset(&ac97, 0, sizeof(ac97));
           ac97.private_data = chip;
-          return snd_ac97_mixer(pbus, &ac97, &chip->ac97);
+          return snd_ac97_mixer(bus, &ac97, &chip->ac97);
   }
 
 ]]>
@@ -4030,18 +3880,18 @@
       <title>Constructor</title>
       <para>
         For creating an ac97 instance, first call <function>snd_ac97_bus</function>
-      with <type>ac97_bus_t</type> record including callback functions.
+      with an <type>ac97_bus_ops_t</type> record with callback functions.
 
         <informalexample>
           <programlisting>
 <![CDATA[
-  ac97_bus_t bus, *pbus;
-  int err;
+  ac97_bus_t *bus;
+  static ac97_bus_ops_t ops = {
+        .write = snd_mychip_ac97_write,
+        .read = snd_mychip_ac97_read,
+  };
 
-  memset(&bus, 0, sizeof(bus));
-  bus.write = snd_mychip_ac97_write;
-  bus.read = snd_mychip_ac97_read;
-  snd_ac97_bus(card, &bus, &pbus);
+  snd_ac97_bus(card, 0, &ops, NULL, &pbus);
 ]]>
           </programlisting>
         </informalexample>
@@ -4050,13 +3900,13 @@
       </para>
 
       <para>
-      And then call <function>snd_ac97_mixer()</function> with an <type>ac97_t</type>
+      And then call <function>snd_ac97_mixer()</function> with an <type>ac97_template_t</type>
       record together with the bus pointer created above.
 
         <informalexample>
           <programlisting>
 <![CDATA[
-  ac97_t ac97;
+  ac97_template_t ac97;
   int err;
 
   memset(&ac97, 0, sizeof(ac97));
@@ -4096,8 +3946,7 @@
   static unsigned short snd_mychip_ac97_read(ac97_t *ac97,
                                              unsigned short reg)
   {
-          mychip_t *chip = snd_magic_cast(mychip_t,
-                                   ac97->private_data, return 0);
+          mychip_t *chip = ac97->private_data;
           ....
           return the_register_value;
   }
@@ -4241,7 +4090,7 @@
       <para>
         On some chip, the clock of the codec isn't 48000 but using a
       PCI clock (to save a quartz!). In this case, change the field
-      ac97-&gt;clock to the corresponding
+      bus-&gt;clock to the corresponding
       value. For example, intel8x0 
       and es1968 drivers have the auto-measurement function of the
       clock. 
@@ -4375,7 +4224,7 @@
           <programlisting>
 <![CDATA[
   mpu401_t *mpu;
-  mpu = snd_magic_cast(mpu401_t, rmidi->private_data, );
+  mpu = rmidi->private_data;
 ]]>
           </programlisting>
         </informalexample>
@@ -4546,16 +4395,15 @@
 
       <para>
         You can then pass any pointer value to the
-        <parameter>private_data</parameter>. Again, it should be a
-        magic-allocated record, so that the cast can be checked more
-        safely. If you assign a private data, you should define the
+        <parameter>private_data</parameter>.
+        If you assign a private data, you should define the
         destructor, too. The destructor function is set to
         <structfield>private_free</structfield> field.  
 
         <informalexample>
           <programlisting>
 <![CDATA[
-  mydata_t *p = snd_magic_kmalloc(mydata_t, 0, GFP_KERNEL);
+  mydata_t *p = kmalloc(sizeof(*p), GFP_KERNEL);
   hw->private_data = p;
   hw->private_free = mydata_free;
 ]]>
@@ -4569,9 +4417,8 @@
 <![CDATA[
   static void mydata_free(snd_hwdep_t *hw)
   {
-          mydata_t *p = snd_magic_cast(mydata_csp_t,
-                                       hw->private_data, return);
-          snd_magic_kfree(p);
+          mydata_t *p = hw->private_data;
+          kfree(p);
   }
 ]]>
           </programlisting>
@@ -5097,8 +4944,7 @@
   static void my_proc_read(snd_info_entry_t *entry,
                            snd_info_buffer_t *buffer)
   {
-          chip_t *cm = snd_magic_cast(mychip_t,
-                                  entry->private_data, return);
+          chip_t *chip = entry->private_data;
 
           snd_iprintf(buffer, "This is my chip!\n");
           snd_iprintf(buffer, "Port = %ld\n", chip->port);
@@ -5266,8 +5112,7 @@
   static int mychip_suspend(snd_card_t *card, unsigned int state)
   {
           // (1)
-          mychip_t *chip = snd_magic_cast(mychip_t, card->pm_private_data,
-                                          return -ENXIO);
+          mychip_t *chip = card->pm_private_data;
           // (2)
           snd_pcm_suspend_all(chip->pcm);
           // (3)
@@ -5309,8 +5154,7 @@
   static void mychip_resume(mychip_t *chip)
   {
           // (1)
-          mychip_t *chip = snd_magic_cast(mychip_t, card->pm_private_data,
-                                          return -ENXIO);
+          mychip_t *chip = card->pm_private_data;
           // (2)
           pci_enable_device(chip->pci);
           // (3)
@@ -5427,19 +5271,7 @@
       The module parameters must be declared with the standard
     <function>module_param()()</function>,
     <function>module_param_array()()</function> and
-    <function>MODULE_PARM_DESC()</function> macros. The ALSA provides
-    an additional macro, <function>MODULE_PARM_SYNTAX()</function>,
-    for describing its syntax. The strings will be written to
-    <filename>/lib/modules/XXX/modules.generic_string</filename>
-    file. 
-    </para>
-
-    <para>
-      For convenience, the typical string arguments given to
-    <function>MODULE_PARM_SYNTAX()</function> are defined in
-    <filename>&lt;sound/initval.h&gt;</filename>, such as
-    <constant>SNDRV_ID_DESC</constant> or
-    <constant>SNDRV_ENABLED</constant>.
+    <function>MODULE_PARM_DESC()</function> macros.
     </para>
 
     <para>
@@ -5453,13 +5285,10 @@
   static int boot_devs;
   module_param_array(index, int, boot_devs, 0444);
   MODULE_PARM_DESC(index, "Index value for " CARD_NAME " soundcard.");
-  MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
   module_param_array(id, charp, boot_devs, 0444);
   MODULE_PARM_DESC(id, "ID string for " CARD_NAME " soundcard.");
-  MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
   module_param_array(enable, bool, boot_devs, 0444);
   MODULE_PARM_DESC(enable, "Enable " CARD_NAME " soundcard.");
-  MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 ]]>
         </programlisting>
       </informalexample>
@@ -5478,9 +5307,8 @@
         <programlisting>
 <![CDATA[
   MODULE_DESCRIPTION("My Chip");
-  MODULE_CLASSES("{sound}");
   MODULE_LICENSE("GPL");
-  MODULE_DEVICES("{{Vendor,My Chip Name}}");
+  MODULE_SUPPORTED_DEVICE("{{Vendor,My Chip Name}}");
 ]]>
         </programlisting>
       </informalexample>
@@ -5635,14 +5463,14 @@
   SND_TOPDIR=../..
   endif
 
-  include $(TOPDIR)/toplevel.config
-  include $(TOPDIR)/Makefile.conf
+  include $(SND_TOPDIR)/toplevel.config
+  include $(SND_TOPDIR)/Makefile.conf
 
   snd-xyz-objs := xyz.o abc.o def.o
 
   obj-$(CONFIG_SND_XYZ) += snd-xyz.o
 
-  include $(TOPDIR)/Rules.make
+  include $(SND_TOPDIR)/Rules.make
 ]]>
         </programlisting>
       </example>
diff -Nru a/include/linux/pci_ids.h b/include/linux/pci_ids.h
--- a/include/linux/pci_ids.h	2004-08-04 17:48:49 -07:00
+++ b/include/linux/pci_ids.h	2004-08-04 17:48:49 -07:00
@@ -1071,6 +1071,7 @@
 #define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA2	0x0055
 #define PCI_DEVICE_ID_NVIDIA_NVENET_8		0x0056
 #define PCI_DEVICE_ID_NVIDIA_NVENET_9		0x0057
+#define PCI_DEVICE_ID_NVIDIA_CK804_AUDIO	0x0059
 #define PCI_DEVICE_ID_NVIDIA_NFORCE2_IDE	0x0065
 #define PCI_DEVICE_ID_NVIDIA_NVENET_2		0x0066
 #define PCI_DEVICE_ID_NVIDIA_MCP2_AUDIO		0x006a
diff -Nru a/include/linux/slab.h b/include/linux/slab.h
--- a/include/linux/slab.h	2004-08-04 17:48:49 -07:00
+++ b/include/linux/slab.h	2004-08-04 17:48:49 -07:00
@@ -97,6 +97,7 @@
 	return __kmalloc(size, flags);
 }
 
+extern void *kcalloc(size_t, size_t, int);
 extern void kfree(const void *);
 extern unsigned int ksize(const void *);
 
diff -Nru a/include/sound/ac97_codec.h b/include/sound/ac97_codec.h
--- a/include/sound/ac97_codec.h	2004-08-04 17:48:49 -07:00
+++ b/include/sound/ac97_codec.h	2004-08-04 17:48:49 -07:00
@@ -364,11 +364,21 @@
 #define AC97_RATES_MIC_ADC	4
 #define AC97_RATES_SPDIF	5
 
+/* shared controllers */
+enum {
+	AC97_SHARED_TYPE_NONE,
+	AC97_SHARED_TYPE_ICH,
+	AC97_SHARED_TYPE_ATIIXP,
+	AC97_SHARED_TYPES
+};
+
 /*
  *
  */
 
 typedef struct _snd_ac97_bus ac97_bus_t;
+typedef struct _snd_ac97_bus_ops ac97_bus_ops_t;
+typedef struct _snd_ac97_template ac97_template_t;
 typedef struct _snd_ac97 ac97_t;
 
 enum ac97_pcm_cfg {
@@ -405,29 +415,45 @@
 	int (*build_post_spdif) (ac97_t *ac97);
 };
 
-struct _snd_ac97_bus {
-	/* -- lowlevel (hardware) driver specific -- */
+struct _snd_ac97_bus_ops {
 	void (*reset) (ac97_t *ac97);
 	void (*write) (ac97_t *ac97, unsigned short reg, unsigned short val);
 	unsigned short (*read) (ac97_t *ac97, unsigned short reg);
 	void (*wait) (ac97_t *ac97);
 	void (*init) (ac97_t *ac97);
+};
+
+struct _snd_ac97_bus {
+	/* -- lowlevel (hardware) driver specific -- */
+	ac97_bus_ops_t *ops;
 	void *private_data;
 	void (*private_free) (ac97_bus_t *bus);
 	/* --- */
 	snd_card_t *card;
 	unsigned short num;	/* bus number */
-	unsigned short vra: 1,	/* bridge supports VRA */
+	unsigned short no_vra: 1, /* bridge doesn't support VRA */
 		       isdin: 1;/* independent SDIN */
 	unsigned int clock;	/* AC'97 base clock (usually 48000Hz) */
 	spinlock_t bus_lock;	/* used mainly for slot allocation */
 	unsigned short used_slots[2][4]; /* actually used PCM slots */
 	unsigned short pcms_count; /* count of PCMs */
 	struct ac97_pcm *pcms;
+	unsigned int shared_type;	/* type of shared controller betwen audio and modem */
 	ac97_t *codec[4];
 	snd_info_entry_t *proc;
 };
 
+struct _snd_ac97_template {
+	void *private_data;
+	void (*private_free) (ac97_t *ac97);
+	struct pci_dev *pci;	/* assigned PCI device - used for quirks */
+	unsigned short num;	/* number of codec: 0 = primary, 1 = secondary */
+	unsigned short addr;	/* physical address of codec [0-3] */
+	unsigned int scaps;	/* driver capabilities */
+	unsigned int limited_regs; /* allow limited registers only */
+	DECLARE_BITMAP(reg_accessed, 0x80); /* bit flags */
+};
+
 struct _snd_ac97 {
 	/* -- lowlevel (hardware) driver specific -- */
 	struct snd_ac97_build_ops * build_ops;
@@ -441,6 +467,7 @@
 	unsigned short subsystem_vendor;
 	unsigned short subsystem_device;
 	spinlock_t reg_lock;
+	struct semaphore mutex;	/* mutex for AD18xx multi-codecs and paging (2.3) */
 	unsigned short num;	/* number of codec: 0 = primary, 1 = secondary */
 	unsigned short addr;	/* physical address of codec [0-3] */
 	unsigned int id;	/* identification of codec */
@@ -461,7 +488,6 @@
 			unsigned short id[3];		// codec IDs (lower 16-bit word)
 			unsigned short pcmreg[3];	// PCM registers
 			unsigned short codec_cfg[3];	// CODEC_CFG bits
-			struct semaphore mutex;
 		} ad18xx;
 		unsigned int dev_flags;		/* device specific */
 	} spec;
@@ -484,10 +510,14 @@
 {
 	return (ac97->ext_id & AC97_EI_AMAP) != 0;
 }
+static inline int ac97_can_spdif(ac97_t * ac97)
+{
+	return (ac97->ext_id & AC97_EI_SPDIF) != 0;
+}
 
 /* functions */
-int snd_ac97_bus(snd_card_t * card, ac97_bus_t * _bus, ac97_bus_t ** rbus); /* create new AC97 bus */
-int snd_ac97_mixer(ac97_bus_t * bus, ac97_t * _ac97, ac97_t ** rac97);	/* create mixer controls */
+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 */
 
 void snd_ac97_write(ac97_t *ac97, unsigned short reg, unsigned short value);
 unsigned short snd_ac97_read(ac97_t *ac97, unsigned short reg);
diff -Nru a/include/sound/asound.h b/include/sound/asound.h
--- a/include/sound/asound.h	2004-08-04 17:48:49 -07:00
+++ b/include/sound/asound.h	2004-08-04 17:48:49 -07:00
@@ -275,7 +275,7 @@
 #define SNDRV_PCM_INFO_HALF_DUPLEX	0x00100000	/* only half duplex */
 #define SNDRV_PCM_INFO_JOINT_DUPLEX	0x00200000	/* playback and capture stream are somewhat correlated */
 #define SNDRV_PCM_INFO_SYNC_START	0x00400000	/* pcm support some kind of sync go */
-#define SNDRV_PCM_INFO_NONATOMIC_OPS	0x00800000	/* non-atomic prepare callback */
+#define SNDRV_PCM_INFO_MMAP_IOMEM	0x01000000	/* mmap on IO memory */
 
 enum sndrv_pcm_state {
 	SNDRV_PCM_STATE_OPEN = 0,	/* stream is open */
diff -Nru a/include/sound/control.h b/include/sound/control.h
--- a/include/sound/control.h	2004-08-04 17:48:49 -07:00
+++ b/include/sound/control.h	2004-08-04 17:48:49 -07:00
@@ -35,8 +35,7 @@
 typedef enum sndrv_ctl_event_type snd_ctl_event_type_t;
 typedef struct sndrv_ctl_event snd_ctl_event_t;
 
-#define _snd_kcontrol_chip(kcontrol) ((kcontrol)->private_data)
-#define snd_kcontrol_chip(kcontrol) snd_magic_cast1(chip_t, _snd_kcontrol_chip(kcontrol), return -ENXIO)
+#define snd_kcontrol_chip(kcontrol) ((kcontrol)->private_data)
 
 typedef int (snd_kcontrol_info_t) (snd_kcontrol_t * kcontrol, snd_ctl_elem_info_t * uinfo);
 typedef int (snd_kcontrol_get_t) (snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol);
diff -Nru a/include/sound/core.h b/include/sound/core.h
--- a/include/sound/core.h	2004-08-04 17:48:49 -07:00
+++ b/include/sound/core.h	2004-08-04 17:48:49 -07:00
@@ -211,23 +211,27 @@
 				 void *private_data);
 #define snd_card_set_isa_pm_callback(card,suspend,resume,data) \
 	snd_card_set_dev_pm_callback(card, PM_ISA_DEV, suspend, resume, data)
+#ifdef CONFIG_PCI
 #ifndef SND_PCI_PM_CALLBACKS
 int snd_card_pci_suspend(struct pci_dev *dev, u32 state);
 int snd_card_pci_resume(struct pci_dev *dev);
 #define SND_PCI_PM_CALLBACKS \
 	.suspend = snd_card_pci_suspend,  .resume = snd_card_pci_resume
 #endif
+#endif
 #else
 #define snd_power_lock(card)		do { (void)(card); } while (0)
 #define snd_power_unlock(card)		do { (void)(card); } while (0)
 static inline int snd_power_wait(snd_card_t *card, unsigned int state, struct file *file) { return 0; }
 #define snd_power_get_state(card)	SNDRV_CTL_POWER_D0
 #define snd_power_change_state(card, state)	do { (void)(card); } while (0)
-#define snd_card_set_pm_callback(card,suspend,resume,data) -EINVAL
-#define snd_card_set_dev_pm_callback(card,suspend,resume,data) -EINVAL
-#define snd_card_set_isa_pm_callback(card,suspend,resume,data) -EINVAL
+#define snd_card_set_pm_callback(card,suspend,resume,data)
+#define snd_card_set_dev_pm_callback(card,suspend,resume,data)
+#define snd_card_set_isa_pm_callback(card,suspend,resume,data)
+#ifdef CONFIG_PCI
 #define SND_PCI_PM_CALLBACKS
 #endif
+#endif
 
 /* device.c */
 
@@ -268,7 +272,7 @@
 #else
 #define snd_minor_info_oss_init() /*NOP*/
 #define snd_minor_info_oss_done() /*NOP*/
-#define snd_oss_init_module() /*NOP*/
+#define snd_oss_init_module() 0
 #endif
 
 /* memory.c */
@@ -279,10 +283,12 @@
 int snd_memory_info_init(void);
 int snd_memory_info_done(void);
 void *snd_hidden_kmalloc(size_t size, int flags);
+void *snd_hidden_kcalloc(size_t n, size_t size, int flags);
 void snd_hidden_kfree(const void *obj);
 void *snd_hidden_vmalloc(unsigned long size);
 void snd_hidden_vfree(void *obj);
 #define kmalloc(size, flags) snd_hidden_kmalloc(size, flags)
+#define kcalloc(n, size, flags) snd_hidden_kcalloc(n, size, flags)
 #define kfree(obj) snd_hidden_kfree(obj)
 #define vmalloc(size) snd_hidden_vmalloc(size)
 #define vfree(obj) snd_hidden_vfree(obj)
@@ -300,7 +306,6 @@
 #define kfree_nocheck(obj) kfree(obj)
 #define vfree_nocheck(obj) vfree(obj)
 #endif
-void *snd_kcalloc(size_t size, int flags);
 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);
@@ -411,7 +416,7 @@
  * not checked.
  */
 #define snd_assert(expr, args...) do {\
-	if (!(expr)) {\
+	if (unlikely(!(expr))) {				\
 		snd_printk("BUG? (%s) (called from %p)\n", __ASTRING__(expr), __builtin_return_address(0));\
 		args;\
 	}\
@@ -427,7 +432,7 @@
  * CONFIG_SND_DEBUG is not set but without any error messages.
  */
 #define snd_runtime_check(expr, args...) do {\
-	if (!(expr)) {\
+	if (unlikely(!(expr))) {				\
 		snd_printk("ERROR (%s) (called from %p)\n", __ASTRING__(expr), __builtin_return_address(0));\
 		args;\
 	}\
diff -Nru a/include/sound/cs46xx.h b/include/sound/cs46xx.h
--- a/include/sound/cs46xx.h	2004-08-04 17:48:48 -07:00
+++ b/include/sound/cs46xx.h	2004-08-04 17:48:48 -07:00
@@ -24,6 +24,7 @@
  */
 
 #include "pcm.h"
+#include "pcm-indirect.h"
 #include "rawmidi.h"
 #include "ac97_codec.h"
 #include "cs46xx_dsp_spos.h"
@@ -1650,14 +1651,7 @@
   
 	unsigned int ctl;
 	unsigned int shift;	/* Shift count to trasform frames in bytes */
-	unsigned int sw_bufsize;
-	unsigned int sw_data;	/* Offset to next dst (or src) in sw ring buffer */
-	unsigned int sw_io;
-	int sw_ready;		/* Bytes ready to be transferred to/from hw */
-	unsigned int hw_data;	/* Offset to next dst (or src) in hw ring buffer */
-	unsigned int hw_io;	/* Ring buffer hw pointer */
-	int hw_ready;		/* Bytes ready for play (or captured) in hw ring buffer */
-	size_t appl_ptr;	/* Last seen appl_ptr */
+	snd_pcm_indirect_t pcm_rec;
 	snd_pcm_substream_t *substream;
 
 	pcm_channel_descriptor_t * pcm_channel;
@@ -1695,14 +1689,7 @@
 
 		unsigned int ctl;
 		unsigned int shift;	/* Shift count to trasform frames in bytes */
-		unsigned int sw_bufsize;
-		unsigned int sw_data;	/* Offset to next dst (or src) in sw ring buffer */
-		unsigned int sw_io;
-		int sw_ready;		/* Bytes ready to be transferred to/from hw */
-		unsigned int hw_data;	/* Offset to next dst (or src) in hw ring buffer */
-		unsigned int hw_io;	/* Ring buffer hw pointer */
-		int hw_ready;		/* Bytes ready for play (or captured) in hw ring buffer */
-		size_t appl_ptr;	/* Last seen appl_ptr */
+		snd_pcm_indirect_t pcm_rec;
 		snd_pcm_substream_t *substream;
 	} capt;
 
@@ -1722,8 +1709,6 @@
 	spinlock_t reg_lock;
 	unsigned int midcr;
 	unsigned int uartm;
-
-	struct snd_dma_device dma_dev;
 
 	int amplifier;
 	void (*amplifier_ctrl)(cs46xx_t *, int);
diff -Nru a/include/sound/driver.h b/include/sound/driver.h
--- a/include/sound/driver.h	2004-08-04 17:48:48 -07:00
+++ b/include/sound/driver.h	2004-08-04 17:48:48 -07:00
@@ -61,6 +61,4 @@
 #undef vfree
 #endif
 
-#include "sndmagic.h"
-
 #endif /* __SOUND_DRIVER_H */
diff -Nru a/include/sound/emu10k1.h b/include/sound/emu10k1.h
--- a/include/sound/emu10k1.h	2004-08-04 17:48:48 -07:00
+++ b/include/sound/emu10k1.h	2004-08-04 17:48:48 -07:00
@@ -30,6 +30,7 @@
 #include <sound/hwdep.h>
 #include <sound/ac97_codec.h>
 #include <sound/util_mem.h>
+#include <sound/pcm-indirect.h>
 #include <linux/interrupt.h>
 #include <asm/io.h>
 
@@ -887,10 +888,7 @@
 	unsigned char gpr_trigger;	/* GPR containing trigger (activate) information (host) */
 	unsigned char gpr_running;	/* GPR containing info if PCM is running (FX8010) */
 	unsigned char etram[32];	/* external TRAM address & data */
-	unsigned int sw_data, hw_data;
-	unsigned int sw_io, hw_io;
-	unsigned int sw_ready, hw_ready;
-	unsigned int appl_ptr;
+	snd_pcm_indirect_t pcm_rec;
 	unsigned int tram_pos;
 	unsigned int tram_shift;
 	snd_emu10k1_fx8010_irq_t *irq;
@@ -935,11 +933,11 @@
 	int irq;
 
 	unsigned long port;			/* I/O port number */
-	struct resource *res_port;
 	int APS: 1,				/* APS flag */
 	    no_ac97: 1,				/* no AC'97 */
 	    tos_link: 1,			/* tos link detected */
-	    rear_ac97: 1;			/* rear channels are on AC'97 */
+	    rear_ac97: 1,			/* rear channels are on AC'97 */
+	    spk71:1;				/* 7.1 configuration (Audigy 2 ZS) */
 	unsigned int audigy;			/* is Audigy? */
 	unsigned int revision;			/* chip revision */
 	unsigned int serial;			/* serial number */
@@ -947,7 +945,6 @@
 	unsigned int card_type;			/* EMU10K1_CARD_* */
 	unsigned int ecard_ctrl;		/* ecard control bits */
 	unsigned long dma_mask;			/* PCI DMA mask */
-	struct snd_dma_device dma_dev;		/* DMA device description */
 	int max_cache_pages;			/* max memory size / PAGE_SIZE */
 	struct snd_dma_buffer silent_page;	/* silent page */
 	struct snd_dma_buffer ptb_pages;	/* page table pages */
@@ -972,7 +969,6 @@
 	snd_pcm_t *pcm;
 	snd_pcm_t *pcm_mic;
 	snd_pcm_t *pcm_efx;
-	snd_pcm_t *pcm_fx8010;
 
 	spinlock_t synth_lock;
 	void *synth;
@@ -1069,6 +1065,15 @@
 /* proc interface */
 int snd_emu10k1_proc_init(emu10k1_t * emu);
 
+/* fx8010 irq handler */
+int snd_emu10k1_fx8010_register_irq_handler(emu10k1_t *emu,
+					    snd_fx8010_irq_handler_t *handler,
+					    unsigned char gpr_running,
+					    void *private_data,
+					    snd_emu10k1_fx8010_irq_t **r_irq);
+int snd_emu10k1_fx8010_unregister_irq_handler(emu10k1_t *emu,
+					      snd_emu10k1_fx8010_irq_t *irq);
+
 #endif /* __KERNEL__ */
 
 /*
@@ -1162,6 +1167,8 @@
 #define FXBUS_PCM_RIGHT_FRONT	0x09
 #define FXBUS_MIDI_REVERB	0x0c
 #define FXBUS_MIDI_CHORUS	0x0d
+#define FXBUS_PCM_LEFT_SIDE	0x0e
+#define FXBUS_PCM_RIGHT_SIDE	0x0f
 #define FXBUS_PT_LEFT		0x14
 #define FXBUS_PT_RIGHT		0x15
 
@@ -1227,8 +1234,8 @@
 #define A_EXTOUT_AFRONT_R	0x09	/*              right */
 #define A_EXTOUT_ACENTER	0x0a	/* analog center */
 #define A_EXTOUT_ALFE		0x0b	/* analog LFE */
-/* 0x0c ?? */
-/* 0x0d ?? */
+#define A_EXTOUT_ASIDE_L	0x0c	/* analog side left  - Audigy 2 ZS */
+#define A_EXTOUT_ASIDE_R	0x0d	/*             right - Audigy 2 ZS */
 #define A_EXTOUT_AREAR_L	0x0e	/* analog rear left */
 #define A_EXTOUT_AREAR_R	0x0f	/*             right */
 #define A_EXTOUT_AC97_L		0x10	/* AC97 left (front) */
diff -Nru a/include/sound/es1688.h b/include/sound/es1688.h
--- a/include/sound/es1688.h	2004-08-04 17:48:49 -07:00
+++ b/include/sound/es1688.h	2004-08-04 17:48:49 -07:00
@@ -55,8 +55,6 @@
 
 typedef struct _snd_es1688 es1688_t;
 
-#define chip_t es1688_t
-
 /* I/O ports */
 
 #define ES1688P(codec, x) ((codec)->port + e_s_s_ESS1688##x)
diff -Nru a/include/sound/info.h b/include/sound/info.h
--- a/include/sound/info.h	2004-08-04 17:48:49 -07:00
+++ b/include/sound/info.h	2004-08-04 17:48:49 -07:00
@@ -89,9 +89,12 @@
 
 extern int snd_info_check_reserved_words(const char *str);
 
-#ifdef CONFIG_SND_OSSEMUL
+#if defined(CONFIG_SND_OSSEMUL) && defined(CONFIG_PROC_FS)
 extern int snd_info_minor_register(void);
 extern int snd_info_minor_unregister(void);
+#else
+#define snd_info_minor_register() /* NOP */
+#define snd_info_minor_unregister() /* NOP */
 #endif
 
 
diff -Nru a/include/sound/initval.h b/include/sound/initval.h
--- a/include/sound/initval.h	2004-08-04 17:48:48 -07:00
+++ b/include/sound/initval.h	2004-08-04 17:48:48 -07:00
@@ -21,20 +21,6 @@
  *
  */
 
-#ifndef MODULE_GENERIC_STRING
-#ifdef MODULE
-#define MODULE_GENERIC_STRING(name, string) \
-static const char __module_generic_string_##name [] \
-  __attribute__ ((unused, __section__(".modstring"))) = #name "=" string;
-#else
-#define MODULE_GENERIC_STRING(name, string)
-#endif
-#endif
-
-#define MODULE_CLASSES(val) MODULE_GENERIC_STRING(info_classes, val)
-#define MODULE_DEVICES(val) MODULE_GENERIC_STRING(info_devices, val)
-#define MODULE_PARM_SYNTAX(id, val) MODULE_GENERIC_STRING(info_parm_##id, val)
-
 #define SNDRV_AUTO_PORT		1
 #define SNDRV_AUTO_IRQ		0xffff
 #define SNDRV_AUTO_DMA		0xffff
@@ -63,25 +49,6 @@
 #define SNDRV_DEFAULT_DMA	{ [0 ... (SNDRV_CARDS-1)] = SNDRV_AUTO_DMA }
 #define SNDRV_DEFAULT_DMA_SIZE	{ [0 ... (SNDRV_CARDS-1)] = SNDRV_AUTO_DMA_SIZE }
 #define SNDRV_DEFAULT_PTR	SNDRV_DEFAULT_STR
-
-#define SNDRV_BOOLEAN_TRUE_DESC	"allows:{{0,Disabled},{1,Enabled}},default:1,dialog:check"
-#define SNDRV_BOOLEAN_FALSE_DESC "allows:{{0,Disabled},{1,Enabled}},default:0,dialog:check"
-
-#define SNDRV_ENABLED		"enable:(enable)"
-
-#define SNDRV_INDEX_DESC	SNDRV_ENABLED ",allows:{{0,7}},unique,skill:required,dialog:list"
-#define SNDRV_ID_DESC		SNDRV_ENABLED ",unique"
-#define SNDRV_ENABLE_DESC	SNDRV_BOOLEAN_FALSE_DESC
-#define SNDRV_ISAPNP_DESC	SNDRV_ENABLED "," SNDRV_BOOLEAN_TRUE_DESC
-#define SNDRV_DMA8_DESC		SNDRV_ENABLED ",allows:{{0,1},{3}},dialog:list"
-#define SNDRV_DMA16_DESC	SNDRV_ENABLED ",allows:{{5,7}},dialog:list"
-#define SNDRV_DMA_DESC		SNDRV_ENABLED ",allows:{{0,1},{3},{5,7}},dialog:list"
-#define SNDRV_IRQ_DESC		SNDRV_ENABLED ",allows:{{5},{7},{9},{10,12},{14,15}},dialog:list"
-#define SNDRV_DMA_SIZE_DESC	SNDRV_ENABLED ",allows:{{4,128}},default:64,skill:advanced"
-#define SNDRV_DMA8_SIZE_DESC	SNDRV_ENABLED ",allows:{{4, 64}},default:64,skill:advanced"
-#define SNDRV_DMA16_SIZE_DESC	SNDRV_ENABLED ",allows:{{4,128}},default:64,skill:advanced"
-#define SNDRV_PORT12_DESC	SNDRV_ENABLED ",allows:{{0,0x3fff}},base:16"
-#define SNDRV_PORT_DESC		SNDRV_ENABLED ",allows:{{0,0xffff}},base:16"
 
 #ifdef SNDRV_LEGACY_AUTO_PROBE
 static int snd_legacy_auto_probe(unsigned long *ports, int (*probe)(unsigned long port))
diff -Nru a/include/sound/memalloc.h b/include/sound/memalloc.h
--- a/include/sound/memalloc.h	2004-08-04 17:48:48 -07:00
+++ b/include/sound/memalloc.h	2004-08-04 17:48:48 -07:00
@@ -30,9 +30,8 @@
  * buffer device info
  */
 struct snd_dma_device {
-	int type;			/* SNDRV_MEM_TYPE_XXX */
+	int type;			/* SNDRV_DMA_TYPE_XXX */
 	struct device *dev;		/* generic device */
-	unsigned int id;		/* a unique ID */
 };
 
 #ifndef snd_dma_pci_data
@@ -56,6 +55,7 @@
  * info for buffer allocation
  */
 struct snd_dma_buffer {
+	struct snd_dma_device dev;	/* device type */
 	unsigned char *area;	/* virtual pointer */
 	dma_addr_t addr;	/* physical address */
 	size_t bytes;		/* buffer size in bytes */
@@ -76,7 +76,7 @@
 	int tblsize;	/* allocated table size */
 	struct snd_sg_page *table;	/* address table */
 	struct page **page_table;	/* page table (for vmap/vunmap) */
-	struct snd_dma_device dev;
+	struct device *dev;
 };
 
 /*
@@ -97,20 +97,21 @@
 
 
 /* allocate/release a buffer */
-int snd_dma_alloc_pages(const struct snd_dma_device *dev, size_t size,
+int snd_dma_alloc_pages(int type, struct device *dev, size_t size,
 			struct snd_dma_buffer *dmab);
-int snd_dma_alloc_pages_fallback(const struct snd_dma_device *dev, size_t size,
+int snd_dma_alloc_pages_fallback(int type, struct device *dev, size_t size,
                                  struct snd_dma_buffer *dmab);
-void snd_dma_free_pages(const struct snd_dma_device *dev, struct snd_dma_buffer *dmab);
+void snd_dma_free_pages(struct snd_dma_buffer *dmab);
 
 /* buffer-preservation managements */
-size_t snd_dma_get_reserved(const struct snd_dma_device *dev, struct snd_dma_buffer *dmab);
-int snd_dma_free_reserved(const struct snd_dma_device *dev);
-int snd_dma_set_reserved(const struct snd_dma_device *dev, struct snd_dma_buffer *dmab);
+
+#define snd_dma_pci_buf_id(pci)	(((unsigned int)(pci)->vendor << 16) | (pci)->device)
+
+size_t snd_dma_get_reserved_buf(struct snd_dma_buffer *dmab, unsigned int id);
+int snd_dma_reserve_buf(struct snd_dma_buffer *dmab, unsigned int id);
 
 /* basic memory allocation functions */
 void *snd_malloc_pages(size_t size, unsigned int gfp_flags);
-void *snd_malloc_pages_fallback(size_t size, unsigned int gfp_flags, size_t *res_size);
 void snd_free_pages(void *ptr, size_t size);
 
 #endif /* __SOUND_MEMALLOC_H */
diff -Nru a/include/sound/pcm-indirect.h b/include/sound/pcm-indirect.h
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/include/sound/pcm-indirect.h	2004-08-04 17:48:49 -07:00
@@ -0,0 +1,177 @@
+/*
+ * Helper functions for indirect PCM data transfer
+ *
+ *  Copyright (c) by Takashi Iwai <tiwai@suse.de>
+ *                   Jaroslav Kysela <perex@suse.cz>
+ *
+ *   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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef __SOUND_PCM_INDIRECT_H
+#define __SOUND_PCM_INDIRECT_H
+
+#include <sound/pcm.h>
+
+typedef struct sndrv_pcm_indirect {
+	unsigned int hw_buffer_size;	/* Byte size of hardware buffer */
+	unsigned int hw_queue_size;	/* Max queue size of hw buffer (0 = buffer size) */
+	unsigned int hw_data;	/* Offset to next dst (or src) in hw ring buffer */
+	unsigned int hw_io;	/* Ring buffer hw pointer */
+	int hw_ready;		/* Bytes ready for play (or captured) in hw ring buffer */
+	unsigned int sw_buffer_size;	/* Byte size of software buffer */
+	unsigned int sw_data;	/* Offset to next dst (or src) in sw ring buffer */
+	unsigned int sw_io;	/* Current software pointer in bytes */
+	int sw_ready;		/* Bytes ready to be transferred to/from hw */
+	snd_pcm_uframes_t appl_ptr;	/* Last seen appl_ptr */
+} snd_pcm_indirect_t;
+
+typedef void (*snd_pcm_indirect_copy_t)(snd_pcm_substream_t *substream,
+					snd_pcm_indirect_t *rec, size_t bytes);
+
+/*
+ * helper function for playback ack callback
+ */
+static inline void
+snd_pcm_indirect_playback_transfer(snd_pcm_substream_t *substream,
+				   snd_pcm_indirect_t *rec,
+				   snd_pcm_indirect_copy_t copy)
+{
+	snd_pcm_runtime_t *runtime = substream->runtime;
+	snd_pcm_uframes_t appl_ptr = runtime->control->appl_ptr;
+	snd_pcm_sframes_t diff = appl_ptr - rec->appl_ptr;
+	int qsize;
+
+	if (diff) {
+		if (diff < -(snd_pcm_sframes_t) (runtime->boundary / 2))
+			diff += runtime->boundary;
+		rec->sw_ready += (int)frames_to_bytes(runtime, diff);
+		rec->appl_ptr = appl_ptr;
+	}
+	qsize = rec->hw_queue_size ? rec->hw_queue_size : rec->hw_buffer_size;
+	while (rec->hw_ready < qsize && rec->sw_ready > 0) {
+		unsigned int hw_to_end = rec->hw_buffer_size - rec->hw_data;
+		unsigned int sw_to_end = rec->sw_buffer_size - rec->sw_data;
+		unsigned int bytes = qsize - rec->hw_ready;
+		if (rec->sw_ready < (int)bytes)
+			bytes = rec->sw_ready;
+		if (hw_to_end < bytes)
+			bytes = hw_to_end;
+		if (sw_to_end < bytes)
+			bytes = sw_to_end;
+		if (! bytes)
+			break;
+		copy(substream, rec, bytes);
+		rec->hw_data += bytes;
+		if (rec->hw_data == rec->hw_buffer_size)
+			rec->hw_data = 0;
+		rec->sw_data += bytes;
+		if (rec->sw_data == rec->sw_buffer_size)
+			rec->sw_data = 0;
+		rec->hw_ready += bytes;
+		rec->sw_ready -= bytes;
+	}
+}
+
+/*
+ * helper function for playback pointer callback
+ * ptr = current byte pointer
+ */
+static inline snd_pcm_uframes_t
+snd_pcm_indirect_playback_pointer(snd_pcm_substream_t *substream,
+				  snd_pcm_indirect_t *rec, unsigned int ptr)
+{
+	int bytes = ptr - rec->hw_io;
+	if (bytes < 0)
+		bytes += rec->hw_buffer_size;
+	rec->hw_io = ptr;
+	rec->hw_ready -= bytes;
+	rec->sw_io += bytes;
+	if (rec->sw_io >= rec->sw_buffer_size)
+		rec->sw_io -= rec->sw_buffer_size;
+	if (substream->ops->ack)
+		substream->ops->ack(substream);
+	return bytes_to_frames(substream->runtime, rec->sw_io);
+}
+
+
+/*
+ * helper function for capture ack callback
+ */
+static inline void
+snd_pcm_indirect_capture_transfer(snd_pcm_substream_t *substream,
+				  snd_pcm_indirect_t *rec,
+				  snd_pcm_indirect_copy_t copy)
+{
+	snd_pcm_runtime_t *runtime = substream->runtime;
+	snd_pcm_uframes_t appl_ptr = runtime->control->appl_ptr;
+	snd_pcm_sframes_t diff = appl_ptr - rec->appl_ptr;
+
+	if (diff) {
+		if (diff < -(snd_pcm_sframes_t) (runtime->boundary / 2))
+			diff += runtime->boundary;
+		rec->sw_ready -= frames_to_bytes(runtime, diff);
+		rec->appl_ptr = appl_ptr;
+	}
+	while (rec->hw_ready > 0 && 
+	       rec->sw_ready < (int)rec->sw_buffer_size) {
+		size_t hw_to_end = rec->hw_buffer_size - rec->hw_data;
+		size_t sw_to_end = rec->sw_buffer_size - rec->sw_data;
+		size_t bytes = rec->sw_buffer_size - rec->sw_ready;
+		if (rec->hw_ready < (int)bytes)
+			bytes = rec->hw_ready;
+		if (hw_to_end < bytes)
+			bytes = hw_to_end;
+		if (sw_to_end < bytes)
+			bytes = sw_to_end;
+		if (! bytes)
+			break;
+		copy(substream, rec, bytes);
+		rec->hw_data += bytes;
+		if ((int)rec->hw_data == rec->hw_buffer_size)
+			rec->hw_data = 0;
+		rec->sw_data += bytes;
+		if (rec->sw_data == rec->sw_buffer_size)
+			rec->sw_data = 0;
+		rec->hw_ready -= bytes;
+		rec->sw_ready += bytes;
+	}
+}
+
+/*
+ * helper function for capture pointer callback,
+ * ptr = current byte pointer
+ */
+static inline snd_pcm_uframes_t
+snd_pcm_indirect_capture_pointer(snd_pcm_substream_t *substream,
+				 snd_pcm_indirect_t *rec, unsigned int ptr)
+{
+	int qsize;
+	int bytes = ptr - rec->hw_io;
+	if (bytes < 0)
+		bytes += rec->hw_buffer_size;
+	rec->hw_io = ptr;
+	rec->hw_ready += bytes;
+	qsize = rec->hw_queue_size ? rec->hw_queue_size : rec->hw_buffer_size;
+	if (rec->hw_ready > qsize)
+		return SNDRV_PCM_POS_XRUN;
+	rec->sw_io += bytes;
+	if (rec->sw_io >= rec->sw_buffer_size)
+		rec->sw_io -= rec->sw_buffer_size;
+	if (substream->ops->ack)
+		substream->ops->ack(substream);
+	return bytes_to_frames(substream->runtime, rec->sw_io);
+}
+
+#endif /* __SOUND_PCM_INDIRECT_H */
diff -Nru a/include/sound/pcm.h b/include/sound/pcm.h
--- a/include/sound/pcm.h	2004-08-04 17:48:49 -07:00
+++ b/include/sound/pcm.h	2004-08-04 17:48:49 -07:00
@@ -52,10 +52,8 @@
 typedef struct sndrv_mask snd_mask_t;
 typedef struct snd_sg_buf snd_pcm_sgbuf_t;
 
-#define _snd_pcm_substream_chip(substream) ((substream)->private_data)
-#define snd_pcm_substream_chip(substream) snd_magic_cast1(chip_t, _snd_pcm_substream_chip(substream), return -ENXIO)
-#define _snd_pcm_chip(pcm) ((pcm)->private_data)
-#define snd_pcm_chip(pcm) snd_magic_cast1(chip_t, _snd_pcm_chip(pcm), return -ENXIO)
+#define snd_pcm_substream_chip(substream) ((substream)->private_data)
+#define snd_pcm_chip(pcm) ((pcm)->private_data)
 
 typedef struct _snd_pcm_file snd_pcm_file_t;
 typedef struct _snd_pcm_runtime snd_pcm_runtime_t;
@@ -123,6 +121,8 @@
 #define SNDRV_PCM_TRIGGER_SUSPEND	5
 #define SNDRV_PCM_TRIGGER_RESUME	6
 
+#define SNDRV_PCM_POS_XRUN		((snd_pcm_uframes_t)-1)
+
 /* If you change this don't forget to change rates[] table in pcm_native.c */
 #define SNDRV_PCM_RATE_5512		(1<<0)		/* 5512Hz */
 #define SNDRV_PCM_RATE_8000		(1<<1)		/* 8000Hz */
@@ -351,7 +351,8 @@
 	unsigned char *dma_area;	/* DMA area */
 	dma_addr_t dma_addr;		/* physical bus address (not accessible from main CPU) */
 	size_t dma_bytes;		/* size of DMA area */
-	void *dma_private;		/* private DMA data for the memory allocator */
+
+	struct snd_dma_buffer *dma_buffer_p;	/* allocated buffer */
 
 #if defined(CONFIG_SND_PCM_OSS) || defined(CONFIG_SND_PCM_OSS_MODULE)
 	/* -- OSS things -- */
@@ -372,8 +373,8 @@
 	char name[32];			/* substream name */
 	int stream;			/* stream (direction) */
 	size_t buffer_bytes_max;	/* limit ring buffer size */
-	struct snd_dma_device dma_device;
 	struct snd_dma_buffer dma_buffer;
+	unsigned int dma_buf_id;
 	size_t dma_max;
 	/* -- hardware operations -- */
 	unsigned int open_flag: 1;	/* lowlevel device has been opened */
@@ -851,7 +852,7 @@
 int snd_pcm_format_big_endian(snd_pcm_format_t format);
 int snd_pcm_format_width(snd_pcm_format_t format);			/* in bits */
 int snd_pcm_format_physical_width(snd_pcm_format_t format);		/* in bits */
-u_int64_t snd_pcm_format_silence_64(snd_pcm_format_t format);
+const unsigned char *snd_pcm_format_silence_64(snd_pcm_format_t format);
 int snd_pcm_format_set_silence(snd_pcm_format_t format, void *buf, unsigned int frames);
 snd_pcm_format_t snd_pcm_build_linear_format(int width, int unsignd, int big_endian);
 ssize_t snd_pcm_format_size(snd_pcm_format_t format, size_t samples);
@@ -892,6 +893,22 @@
 
 int snd_pcm_limit_hw_rates(snd_pcm_runtime_t *runtime);
 
+static inline void snd_pcm_set_runtime_buffer(snd_pcm_substream_t *substream,
+					      struct snd_dma_buffer *bufp)
+{
+	snd_pcm_runtime_t *runtime = substream->runtime;
+	if (bufp) {
+		runtime->dma_buffer_p = bufp;
+		runtime->dma_area = bufp->area;
+		runtime->dma_addr = bufp->addr;
+		runtime->dma_bytes = bufp->bytes;
+	} else {
+		runtime->dma_buffer_p = NULL;
+		runtime->dma_area = NULL;
+		runtime->dma_addr = 0;
+		runtime->dma_bytes = 0;
+	}
+}
 
 /*
  *  Timer interface
@@ -916,7 +933,7 @@
 int snd_pcm_lib_malloc_pages(snd_pcm_substream_t *substream, size_t size);
 int snd_pcm_lib_free_pages(snd_pcm_substream_t *substream);
 
-#define snd_pcm_substream_sgbuf(substream) ((substream)->runtime->dma_private)
+#define snd_pcm_substream_sgbuf(substream) ((substream)->runtime->dma_buffer_p->private_data)
 #define snd_pcm_sgbuf_pages(size) snd_sgbuf_aligned_pages(size)
 #define snd_pcm_sgbuf_get_addr(sgbuf,ofs) snd_sgbuf_get_addr(sgbuf,ofs)
 struct page *snd_pcm_sgbuf_ops_page(snd_pcm_substream_t *substream, unsigned long offset);
diff -Nru a/include/sound/seq_kernel.h b/include/sound/seq_kernel.h
--- a/include/sound/seq_kernel.h	2004-08-04 17:48:49 -07:00
+++ b/include/sound/seq_kernel.h	2004-08-04 17:48:49 -07:00
@@ -168,6 +168,9 @@
 int snd_seq_expand_var_event(const snd_seq_event_t *event, int count, char *buf, int in_kernel, int size_aligned);
 int snd_seq_dump_var_event(const snd_seq_event_t *event, snd_seq_dump_func_t func, void *private_data);
 
+/* interface for OSS emulation */
+int snd_seq_set_queue_tempo(int client, snd_seq_queue_tempo_t *tempo);
+
 /* port callback routines */
 void snd_port_init_callback(snd_seq_port_callback_t *p);
 snd_seq_port_callback_t *snd_port_alloc_callback(void);
diff -Nru a/include/sound/sndmagic.h b/include/sound/sndmagic.h
--- a/include/sound/sndmagic.h	2004-08-04 17:48:48 -07:00
+++ /dev/null	Wed Dec 31 16:00:00 196900
@@ -1,218 +0,0 @@
-#ifndef __SOUND_SNDMAGIC_H
-#define __SOUND_SNDMAGIC_H
-
-/*
- *  Magic allocation, deallocation, check
- *  Copyright (c) 2000 by Abramo Bagnara <abramo@alsa-project.org>
- *
- *
- *   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
- *
- */
-
-
-#ifdef CONFIG_SND_DEBUG_MEMORY
-
-void *_snd_magic_kcalloc(unsigned long magic, size_t size, int flags);
-void *_snd_magic_kmalloc(unsigned long magic, size_t size, int flags);
-
-/**
- * snd_magic_kmalloc - allocate a record with a magic-prefix
- * @type: the type to allocate a record (like xxx_t)
- * @extra: the extra size to allocate in bytes
- * @flags: the allocation condition (GFP_XXX)
- *
- * Allocates a record of the given type with the extra space and
- * returns its pointer.  The allocated record has a secret magic-key
- * to be checked via snd_magic_cast() for safe casts.
- *
- * The allocated pointer must be released via snd_magic_kfree().
- *
- * The "struct xxx" style cannot be used as the type argument
- * because the magic-key constant is generated from the type-name
- * string.
- */
-#define snd_magic_kmalloc(type, extra, flags) \
-	(type *) _snd_magic_kmalloc(type##_magic, sizeof(type) + extra, flags)
-/**
- * snd_magic_kcalloc - allocate a record with a magic-prefix and initialize
- * @type: the type to allocate a record (like xxx_t)
- * @extra: the extra size to allocate in bytes
- * @flags: the allocation condition (GFP_XXX)
- *
- * Works like snd_magic_kmalloc() but this clears the area with zero
- * automatically.
- */
-#define snd_magic_kcalloc(type, extra, flags) \
-	(type *) _snd_magic_kcalloc(type##_magic, sizeof(type) + extra, flags)
-
-/**
- * snd_magic_kfree - release the allocated area
- * @ptr: the pointer allocated via snd_magic_kmalloc() or snd_magic_kcalloc()
- *
- * Releases the memory area allocated via snd_magic_kmalloc() or
- * snd_magic_kcalloc() function.
- */
-void snd_magic_kfree(void *ptr);
-
-static inline unsigned long _snd_magic_value(void *obj)
-{
-	return obj == NULL ? (unsigned long)-1 : *(((unsigned long *)obj) - 1);
-}
-
-static inline int _snd_magic_bad(void *obj, unsigned long magic)
-{
-	return _snd_magic_value(obj) != magic;
-}
-
-#define snd_magic_cast1(t, expr, cmd) snd_magic_cast(t, expr, cmd)
-
-/**
- * snd_magic_cast - check and cast the magic-allocated pointer
- * @type: the type of record to cast
- * @ptr: the magic-allocated pointer
- * @action...: the action to do if failed
- *
- * This macro provides a safe cast for the given type, which was
- * allocated via snd_magic_kmalloc() or snd_magic_kcallc().
- * If the pointer is invalid, i.e. the cast-type doesn't match,
- * the action arguments are called with a debug message.
- */
-#define snd_magic_cast(type, ptr, action...) \
-	(type *) ({\
-	void *__ptr = ptr;\
-	unsigned long __magic = _snd_magic_value(__ptr);\
-	if (__magic != type##_magic) {\
-		snd_printk("bad MAGIC (0x%lx)\n", __magic);\
-		action;\
-	}\
-	__ptr;\
-})
-
-#define snd_device_t_magic			0xa15a00ff
-#define snd_pcm_t_magic				0xa15a0101
-#define snd_pcm_file_t_magic			0xa15a0102
-#define snd_pcm_substream_t_magic		0xa15a0103
-#define snd_pcm_proc_private_t_magic		0xa15a0104
-#define snd_pcm_oss_file_t_magic		0xa15a0105
-#define snd_mixer_oss_t_magic			0xa15a0106
-// #define snd_pcm_sgbuf_t_magic			0xa15a0107
-
-#define snd_info_private_data_t_magic		0xa15a0201
-#define snd_info_entry_t_magic			0xa15a0202
-#define snd_ctl_file_t_magic			0xa15a0301
-#define snd_kcontrol_t_magic			0xa15a0302
-#define snd_rawmidi_t_magic			0xa15a0401
-#define snd_rawmidi_file_t_magic		0xa15a0402
-#define snd_virmidi_t_magic			0xa15a0403
-#define snd_virmidi_dev_t_magic			0xa15a0404
-#define snd_timer_t_magic			0xa15a0501
-#define snd_timer_user_t_magic			0xa15a0502
-#define snd_hwdep_t_magic			0xa15a0601
-#define snd_seq_device_t_magic			0xa15a0701
-
-#define es18xx_t_magic				0xa15a1101
-#define trident_t_magic				0xa15a1201
-#define es1938_t_magic				0xa15a1301
-#define cs46xx_t_magic				0xa15a1401
-#define cs46xx_pcm_t_magic			0xa15a1402
-#define ensoniq_t_magic				0xa15a1501
-#define sonicvibes_t_magic			0xa15a1601
-#define mpu401_t_magic				0xa15a1701
-#define fm801_t_magic				0xa15a1801
-#define ac97_t_magic				0xa15a1901
-#define ac97_bus_t_magic			0xa15a1902
-#define ak4531_t_magic				0xa15a1a01
-#define snd_uart16550_t_magic			0xa15a1b01
-#define emu10k1_t_magic				0xa15a1c01
-#define emu10k1_pcm_t_magic			0xa15a1c02
-#define emu10k1_midi_t_magic			0xa15a1c03
-#define snd_gus_card_t_magic			0xa15a1d01
-#define gus_pcm_private_t_magic			0xa15a1d02
-#define gus_proc_private_t_magic		0xa15a1d03
-#define tea6330t_t_magic			0xa15a1e01
-#define ad1848_t_magic				0xa15a1f01
-#define cs4231_t_magic				0xa15a2001
-#define es1688_t_magic				0xa15a2101
-#define opti93x_t_magic				0xa15a2201
-#define emu8000_t_magic				0xa15a2301
-#define emu8000_proc_private_t_magic		0xa15a2302
-#define snd_emux_t_magic			0xa15a2303
-#define snd_emux_port_t_magic			0xa15a2304
-#define sb_t_magic				0xa15a2401
-#define snd_sb_csp_t_magic			0xa15a2402
-#define snd_card_dummy_t_magic			0xa15a2501
-#define snd_card_dummy_pcm_t_magic		0xa15a2502
-#define opl3_t_magic				0xa15a2601
-#define opl4_t_magic				0xa15a2602
-#define snd_seq_dummy_port_t_magic		0xa15a2701
-#define ice1712_t_magic				0xa15a2801
-#define ad1816a_t_magic				0xa15a2901
-#define intel8x0_t_magic			0xa15a2a01
-#define es1968_t_magic				0xa15a2b01
-#define esschan_t_magic				0xa15a2b02
-#define via82xx_t_magic				0xa15a2c01
-#define pdplus_t_magic				0xa15a2d01
-#define cmipci_t_magic				0xa15a2e01
-#define ymfpci_t_magic				0xa15a2f01
-#define ymfpci_pcm_t_magic			0xa15a2f02
-#define cs4281_t_magic				0xa15a3001
-#define snd_i2c_bus_t_magic			0xa15a3101
-#define snd_i2c_device_t_magic			0xa15a3102
-#define cs8427_t_magic				0xa15a3111
-#define m3_t_magic				0xa15a3201
-#define m3_dma_t_magic				0xa15a3202
-#define nm256_t_magic				0xa15a3301
-#define nm256_dma_t_magic			0xa15a3302
-#define sam9407_t_magic				0xa15a3401
-#define pmac_t_magic				0xa15a3501
-#define ali_t_magic				0xa15a3601
-#define mtpav_t_magic				0xa15a3701
-#define mtpav_port_t_magic			0xa15a3702
-#define korg1212_t_magic			0xa15a3800
-#define opl3sa2_t_magic				0xa15a3900
-#define serialmidi_t_magic			0xa15a3a00
-#define sa11xx_uda1341_t_magic			0xa15a3b00
-#define uda1341_t_magic                         0xa15a3c00
-#define l3_client_t_magic                       0xa15a3d00
-#define snd_usb_audio_t_magic			0xa15a3e01
-#define usb_mixer_elem_info_t_magic		0xa15a3e02
-#define snd_usb_stream_t_magic			0xa15a3e03
-#define snd_usb_midi_t_magic			0xa15a3f01
-#define snd_usb_midi_out_endpoint_t_magic	0xa15a3f02
-#define snd_usb_midi_in_endpoint_t_magic	0xa15a3f03
-#define ak4117_t_magic				0xa15a4000
-#define psic_t_magic				0xa15a4100
-#define vx_core_t_magic				0xa15a4110
-#define vx_pipe_t_magic				0xa15a4112
-#define azf3328_t_magic				0xa15a4200
-#define snd_card_harmony_t_magic		0xa15a4300
-#define bt87x_t_magic				0xa15a4400
-#define pdacf_t_magic				0xa15a4500
-#define vortex_t_magic				0xa15a4601
-#define atiixp_t_magic				0xa15a4701
-#define amd7930_t_magic				0xa15a4801
-
-#else
-
-#define snd_magic_kcalloc(type, extra, flags) (type *) snd_kcalloc(sizeof(type) + extra, flags)
-#define snd_magic_kmalloc(type, extra, flags) (type *) kmalloc(sizeof(type) + extra, flags)
-#define snd_magic_cast(type, ptr, retval) (type *) ptr
-#define snd_magic_cast1(type, ptr, retval) snd_magic_cast(type, ptr, retval)
-#define snd_magic_kfree kfree
-
-#endif
-
-#endif /* __SOUND_SNDMAGIC_H */
diff -Nru a/include/sound/timer.h b/include/sound/timer.h
--- a/include/sound/timer.h	2004-08-04 17:48:49 -07:00
+++ b/include/sound/timer.h	2004-08-04 17:48:49 -07:00
@@ -40,8 +40,7 @@
 typedef struct sndrv_timer_read snd_timer_read_t;
 typedef struct sndrv_timer_tread snd_timer_tread_t;
 
-#define _snd_timer_chip(timer) ((timer)->private_data)
-#define snd_timer_chip(timer) snd_magic_cast1(chip_t, _snd_timer_chip(timer), return -ENXIO)
+#define snd_timer_chip(timer) ((timer)->private_data)
 
 #define SNDRV_TIMER_DEVICES	16
 
diff -Nru a/include/sound/trident.h b/include/sound/trident.h
--- a/include/sound/trident.h	2004-08-04 17:48:49 -07:00
+++ b/include/sound/trident.h	2004-08-04 17:48:49 -07:00
@@ -398,7 +398,6 @@
         unsigned char  bDMAStart;
 
 	unsigned long port;
-	struct resource *res_port;
 	unsigned long midi_port;
 
 	unsigned int spurious_irq_count;
diff -Nru a/include/sound/version.h b/include/sound/version.h
--- a/include/sound/version.h	2004-08-04 17:48:48 -07:00
+++ b/include/sound/version.h	2004-08-04 17:48:48 -07:00
@@ -1,3 +1,3 @@
 /* include/version.h.  Generated by configure.  */
-#define CONFIG_SND_VERSION "1.0.4"
-#define CONFIG_SND_DATE " (Mon May 17 14:31:44 2004 UTC)"
+#define CONFIG_SND_VERSION "1.0.5"
+#define CONFIG_SND_DATE " (Sun May 30 10:49:40 2004 UTC)"
diff -Nru a/include/sound/vx_core.h b/include/sound/vx_core.h
--- a/include/sound/vx_core.h	2004-08-04 17:48:48 -07:00
+++ b/include/sound/vx_core.h	2004-08-04 17:48:48 -07:00
@@ -182,6 +182,7 @@
 	/* clock and audio sources */
 	unsigned int audio_source;	/* current audio input source */
 	unsigned int audio_source_target;
+	unsigned int clock_mode;	/* clock mode (VX_CLOCK_MODE_XXX) */
 	unsigned int clock_source;	/* current clock source (INTERNAL_QUARTZ or UER_SYNC) */
 	unsigned int freq;		/* current frequency */
 	unsigned int freq_detected;	/* detected frequency from digital in */
@@ -362,6 +363,13 @@
 enum {
 	INTERNAL_QUARTZ,
 	UER_SYNC
+};
+
+/* clock mode */
+enum {
+	VX_CLOCK_MODE_AUTO,	/* depending on the current audio source */
+	VX_CLOCK_MODE_INTERNAL,	/* fixed to internal quartz */
+	VX_CLOCK_MODE_EXTERNAL	/* fixed to UER sync */
 };
 
 /* SPDIF/UER type */
diff -Nru a/include/sound/ymfpci.h b/include/sound/ymfpci.h
--- a/include/sound/ymfpci.h	2004-08-04 17:48:48 -07:00
+++ b/include/sound/ymfpci.h	2004-08-04 17:48:48 -07:00
@@ -316,7 +316,6 @@
 	struct gameport gameport;
 #endif
 
-	struct snd_dma_device dma_dev;
 	struct snd_dma_buffer work_ptr;
 
 	unsigned int bank_size_playback;
diff -Nru a/mm/slab.c b/mm/slab.c
--- a/mm/slab.c	2004-08-04 17:48:49 -07:00
+++ b/mm/slab.c	2004-08-04 17:48:49 -07:00
@@ -2434,6 +2434,27 @@
 EXPORT_SYMBOL(kmem_cache_free);
 
 /**
+ * kcalloc - allocate memory for an array. The memory is set to zero.
+ * @n: number of elements.
+ * @size: element size.
+ * @flags: the type of memory to allocate.
+ */
+void *kcalloc(size_t n, size_t size, int flags)
+{
+	void *ret = NULL;
+
+	if (n != 0 && size > INT_MAX / n)
+		return ret;
+
+	ret = kmalloc(n * size, flags);
+	if (ret)
+		memset(ret, 0, n * size);
+	return ret;
+}
+
+EXPORT_SYMBOL(kcalloc);
+
+/**
  * kfree - free previously allocated memory
  * @objp: pointer returned by kmalloc.
  *
diff -Nru a/sound/arm/sa11xx-uda1341.c b/sound/arm/sa11xx-uda1341.c
--- a/sound/arm/sa11xx-uda1341.c	2004-08-04 17:48:48 -07:00
+++ b/sound/arm/sa11xx-uda1341.c	2004-08-04 17:48:48 -07:00
@@ -21,7 +21,7 @@
  *                              merged HAL layer (patches from Brian)
  */
 
-/* $Id: sa11xx-uda1341.c,v 1.15 2004/05/03 17:36:50 tiwai Exp $ */
+/* $Id: sa11xx-uda1341.c,v 1.18 2004/07/20 15:54:09 cladisch Exp $ */
 
 /***************************************************************************************************
 *
@@ -108,16 +108,13 @@
 MODULE_AUTHOR("Tomas Kasparek <tomas.kasparek@seznam.cz>");
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("SA1100/SA1111 + UDA1341TS driver for ALSA");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{UDA1341,iPAQ H3600 UDA1341TS}}");
+MODULE_SUPPORTED_DEVICE("{{UDA1341,iPAQ H3600 UDA1341TS}}");
 
 static char *id = NULL;	/* ID for this card */
 
 module_param(id, charp, 0444);
 MODULE_PARM_DESC(id, "ID string for SA1100/SA1111 + UDA1341TS soundcard.");
 
-#define chip_t sa11xx_uda1341_t
-
 typedef struct audio_stream {
 	char *id;		/* identification string */
 	int stream_id;		/* numeric identification */	
@@ -152,10 +149,8 @@
 	29400, 32000, 44100, 48000,
 };
 
-#define RATES sizeof(rates) / sizeof(rates[0])
-
 static snd_pcm_hw_constraint_list_t hw_constraints_rates = {
-	.count	= RATES,
+	.count	= ARRAY_SIZE(rates),
 	.list	= rates,
 	.mask	= 0,
 };
@@ -869,7 +864,7 @@
 
 static int snd_sa11xx_uda1341_suspend(snd_card_t *card, unsigned int state)
 {
-	sa11xx_uda1341_t *chip = snd_magic_cast(sa11x_uda1341_t, card->pm_private_data, return -EINVAL);
+	sa11xx_uda1341_t *chip = card->pm_private_data;
 
 	snd_pcm_suspend_all(chip->pcm);
 #ifdef HH_VERSION	
@@ -886,7 +881,7 @@
 
 static int snd_sa11xx_uda1341_resume(snd_card_t *card, unsigned int state)
 {
-	sa11xx_uda1341_t *chip = snd_magic_cast(sa11x_uda1341_t, card->pm_private_data, return -EINVAL);
+	sa11xx_uda1341_t *chip = card->pm_private_data;
 
 	sa11xx_uda1341_audio_init(chip);
 	l3_command(chip->uda1341, CMD_RESUME, NULL);
@@ -903,7 +898,7 @@
 
 void snd_sa11xx_uda1341_free(snd_card_t *card)
 {
-	sa11xx_uda1341_t *chip = snd_magic_cast(sa11xx_uda1341_t, card->private_data, return);
+	sa11xx_uda1341_t *chip = card->private_data;
 
 	audio_dma_free(&chip->s[SNDRV_PCM_STREAM_PLAYBACK]);
 	audio_dma_free(&chip->s[SNDRV_PCM_STREAM_CAPTURE]);
@@ -925,7 +920,7 @@
 	if (card == NULL)
 		return -ENOMEM;
 
-	sa11xx_uda1341 = snd_magic_kcalloc(sa11xx_uda1341_t, 0, GFP_KERNEL);
+	sa11xx_uda1341 = kcalloc(1, sizeof(*sa11xx_uda1341), GFP_KERNEL);
 	if (sa11xx_uda1341 == NULL)
 		return -ENOMEM;	
 	spin_lock_init(&chip->s[0].dma_lock);
diff -Nru a/sound/core/control.c b/sound/core/control.c
--- a/sound/core/control.c	2004-08-04 17:48:48 -07:00
+++ b/sound/core/control.c	2004-08-04 17:48:48 -07:00
@@ -62,7 +62,7 @@
 		err = -EFAULT;
 		goto __error2;
 	}
-	ctl = snd_magic_kcalloc(snd_ctl_file_t, 0, GFP_KERNEL);
+	ctl = kcalloc(1, sizeof(*ctl), GFP_KERNEL);
 	if (ctl == NULL) {
 		err = -ENOMEM;
 		goto __error;
@@ -108,7 +108,7 @@
 	snd_kcontrol_t *control;
 	unsigned int idx;
 
-	ctl = snd_magic_cast(snd_ctl_file_t, file->private_data, return -ENXIO);
+	ctl = file->private_data;
 	fasync_helper(-1, file, 0, &ctl->fasync);
 	file->private_data = NULL;
 	card = ctl->card;
@@ -124,7 +124,7 @@
 	}
 	up_write(&card->controls_rwsem);
 	snd_ctl_empty_read_queue(ctl);
-	snd_magic_kfree(ctl);
+	kfree(ctl);
 	module_put(card->module);
 	snd_card_file_remove(card, file);
 	return 0;
@@ -155,7 +155,7 @@
 				goto _found;
 			}
 		}
-		ev = snd_kcalloc(sizeof(*ev), GFP_ATOMIC);
+		ev = kcalloc(1, sizeof(*ev), GFP_ATOMIC);
 		if (ev) {
 			ev->id = *id;
 			ev->mask = mask;
@@ -188,9 +188,7 @@
 	
 	snd_runtime_check(control != NULL, return NULL);
 	snd_runtime_check(control->count > 0, return NULL);
-	kctl = (snd_kcontrol_t *)snd_magic_kcalloc(snd_kcontrol_t,
-						   sizeof(snd_kcontrol_volatile_t) * control->count,
-						   GFP_KERNEL);
+	kctl = kcalloc(1, sizeof(*kctl) + sizeof(snd_kcontrol_volatile_t) * control->count, GFP_KERNEL);
 	if (kctl == NULL)
 		return NULL;
 	*kctl = *control;
@@ -249,7 +247,7 @@
 	if (kcontrol) {
 		if (kcontrol->private_free)
 			kcontrol->private_free(kcontrol);
-		snd_magic_kfree(kcontrol);
+		kfree(kcontrol);
 	}
 }
 
@@ -927,7 +925,7 @@
 	if (!(info.access & SNDRV_CTL_ELEM_ACCESS_DINDIRECT))
 		for (idx = 0; idx < 4 && info.dimen.d[idx]; idx++)
 			dimen_size += sizeof(unsigned short);
-	ue = snd_kcalloc(sizeof(struct user_element) + dimen_size + private_size + extra_size, GFP_KERNEL);
+	ue = kcalloc(1, sizeof(struct user_element) + dimen_size + private_size + extra_size, GFP_KERNEL);
 	if (ue == NULL)
 		return -ENOMEM;
 	ue->type = info.type;
@@ -1022,8 +1020,8 @@
 }
 #endif
 
-static int snd_ctl_ioctl(struct inode *inode, struct file *file,
-			 unsigned int cmd, unsigned long arg)
+static inline int _snd_ctl_ioctl(struct inode *inode, struct file *file,
+				 unsigned int cmd, unsigned long arg)
 {
 	snd_ctl_file_t *ctl;
 	snd_card_t *card;
@@ -1033,7 +1031,7 @@
 	int __user *ip = argp;
 	int err;
 
-	ctl = snd_magic_cast(snd_ctl_file_t, file->private_data, return -ENXIO);
+	ctl = file->private_data;
 	card = ctl->card;
 	snd_assert(card != NULL, return -ENXIO);
 	switch (cmd) {
@@ -1096,13 +1094,24 @@
 	return -ENOTTY;
 }
 
+/* FIXME: need to unlock BKL to allow preemption */
+static int snd_ctl_ioctl(struct inode *inode, struct file *file,
+			 unsigned int cmd, unsigned long arg)
+{
+	int err;
+	unlock_kernel();
+	err = _snd_ctl_ioctl(inode, file, cmd, arg);
+	lock_kernel();
+	return err;
+}
+
 static ssize_t snd_ctl_read(struct file *file, char __user *buffer, size_t count, loff_t * offset)
 {
 	snd_ctl_file_t *ctl;
 	int err = 0;
 	ssize_t result = 0;
 
-	ctl = snd_magic_cast(snd_ctl_file_t, file->private_data, return -ENXIO);
+	ctl = file->private_data;
 	snd_assert(ctl != NULL && ctl->card != NULL, return -ENXIO);
 	if (!ctl->subscribed)
 		return -EBADFD;
@@ -1116,7 +1125,7 @@
 			wait_queue_t wait;
 			if ((file->f_flags & O_NONBLOCK) != 0 || result > 0) {
 				err = -EAGAIN;
-				goto __end;
+				goto __end_lock;
 			}
 			init_waitqueue_entry(&wait, current);
 			add_wait_queue(&ctl->change_sleep, &wait);
@@ -1137,16 +1146,16 @@
 		kfree(kev);
 		if (copy_to_user(buffer, &ev, sizeof(snd_ctl_event_t))) {
 			err = -EFAULT;
-			goto out;
+			goto __end;
 		}
 		spin_lock_irq(&ctl->read_lock);
 		buffer += sizeof(snd_ctl_event_t);
 		count -= sizeof(snd_ctl_event_t);
 		result += sizeof(snd_ctl_event_t);
 	}
-__end:
+      __end_lock:
 	spin_unlock_irq(&ctl->read_lock);
-out:
+      __end:
       	return result > 0 ? result : err;
 }
 
@@ -1155,7 +1164,7 @@
 	unsigned int mask;
 	snd_ctl_file_t *ctl;
 
-	ctl = snd_magic_cast(snd_ctl_file_t, file->private_data, return 0);
+	ctl = file->private_data;
 	if (!ctl->subscribed)
 		return 0;
 	poll_wait(file, &ctl->change_sleep, wait);
@@ -1175,8 +1184,7 @@
 {
 	snd_kctl_ioctl_t *pn;
 
-	pn = (snd_kctl_ioctl_t *)
-		snd_kcalloc(sizeof(snd_kctl_ioctl_t), GFP_KERNEL);
+	pn = kcalloc(1, sizeof(snd_kctl_ioctl_t), GFP_KERNEL);
 	if (pn == NULL)
 		return -ENOMEM;
 	pn->fioctl = fcn;
@@ -1214,7 +1222,7 @@
 {
 	snd_ctl_file_t *ctl;
 	int err;
-	ctl = snd_magic_cast(snd_ctl_file_t, file->private_data, return -ENXIO);
+	ctl = file->private_data;
 	err = fasync_helper(fd, file, on, &ctl->fasync);
 	if (err < 0)
 		return err;
diff -Nru a/sound/core/device.c b/sound/core/device.c
--- a/sound/core/device.c	2004-08-04 17:48:49 -07:00
+++ b/sound/core/device.c	2004-08-04 17:48:49 -07:00
@@ -47,7 +47,7 @@
 	snd_device_t *dev;
 
 	snd_assert(card != NULL && device_data != NULL && ops != NULL, return -ENXIO);
-	dev = (snd_device_t *) snd_magic_kcalloc(snd_device_t, 0, GFP_KERNEL);
+	dev = kcalloc(1, sizeof(*dev), GFP_KERNEL);
 	if (dev == NULL)
 		return -ENOMEM;
 	dev->card = card;
@@ -94,7 +94,7 @@
 					snd_printk(KERN_ERR "device free failure\n");
 			}
 		}
-		snd_magic_kfree(dev);
+		kfree(dev);
 		return 0;
 	}
 	snd_printd("device free %p (from %p), not found\n", device_data, __builtin_return_address(0));
diff -Nru a/sound/core/hwdep.c b/sound/core/hwdep.c
--- a/sound/core/hwdep.c	2004-08-04 17:48:48 -07:00
+++ b/sound/core/hwdep.c	2004-08-04 17:48:48 -07:00
@@ -22,6 +22,7 @@
 #include <sound/driver.h>
 #include <linux/major.h>
 #include <linux/init.h>
+#include <linux/smp_lock.h>
 #include <linux/slab.h>
 #include <linux/time.h>
 #include <sound/core.h>
@@ -49,7 +50,7 @@
 
 static loff_t snd_hwdep_llseek(struct file * file, loff_t offset, int orig)
 {
-	snd_hwdep_t *hw = snd_magic_cast(snd_hwdep_t, file->private_data, return -ENXIO);
+	snd_hwdep_t *hw = file->private_data;
 	if (hw->ops.llseek)
 		return hw->ops.llseek(hw, file, offset, orig);
 	return -ENXIO;
@@ -57,7 +58,7 @@
 
 static ssize_t snd_hwdep_read(struct file * file, char __user *buf, size_t count, loff_t *offset)
 {
-	snd_hwdep_t *hw = snd_magic_cast(snd_hwdep_t, file->private_data, return -ENXIO);
+	snd_hwdep_t *hw = file->private_data;
 	if (hw->ops.read)
 		return hw->ops.read(hw, buf, count, offset);
 	return -ENXIO;	
@@ -65,7 +66,7 @@
 
 static ssize_t snd_hwdep_write(struct file * file, const char __user *buf, size_t count, loff_t *offset)
 {
-	snd_hwdep_t *hw = snd_magic_cast(snd_hwdep_t, file->private_data, return -ENXIO);
+	snd_hwdep_t *hw = file->private_data;
 	if (hw->ops.write)
 		return hw->ops.write(hw, buf, count, offset);
 	return -ENXIO;	
@@ -157,7 +158,7 @@
 static int snd_hwdep_release(struct inode *inode, struct file * file)
 {
 	int err = -ENXIO;
-	snd_hwdep_t *hw = snd_magic_cast(snd_hwdep_t, file->private_data, return -ENXIO);
+	snd_hwdep_t *hw = file->private_data;
 	down(&hw->open_mutex);
 	if (hw->ops.release) {
 		err = hw->ops.release(hw, file);
@@ -173,7 +174,7 @@
 
 static unsigned int snd_hwdep_poll(struct file * file, poll_table * wait)
 {
-	snd_hwdep_t *hw = snd_magic_cast(snd_hwdep_t, file->private_data, return 0);
+	snd_hwdep_t *hw = file->private_data;
 	if (hw->ops.poll)
 		return hw->ops.poll(hw, file, wait);
 	return 0;
@@ -231,10 +232,10 @@
 	return 0;
 }
 
-static int snd_hwdep_ioctl(struct inode *inode, struct file * file,
-			   unsigned int cmd, unsigned long arg)
+static inline int _snd_hwdep_ioctl(struct inode *inode, struct file * file,
+				   unsigned int cmd, unsigned long arg)
 {
-	snd_hwdep_t *hw = snd_magic_cast(snd_hwdep_t, file->private_data, return -ENXIO);
+	snd_hwdep_t *hw = file->private_data;
 	void __user *argp = (void __user *)arg;
 	switch (cmd) {
 	case SNDRV_HWDEP_IOCTL_PVERSION:
@@ -251,9 +252,20 @@
 	return -ENOTTY;
 }
 
+/* FIXME: need to unlock BKL to allow preemption */
+static int snd_hwdep_ioctl(struct inode *inode, struct file * file,
+			   unsigned int cmd, unsigned long arg)
+{
+	int err;
+	unlock_kernel();
+	err = _snd_hwdep_ioctl(inode, file, cmd, arg);
+	lock_kernel();
+	return err;
+}
+
 static int snd_hwdep_mmap(struct file * file, struct vm_area_struct * vma)
 {
-	snd_hwdep_t *hw = snd_magic_cast(snd_hwdep_t, file->private_data, return -ENXIO);
+	snd_hwdep_t *hw = file->private_data;
 	if (hw->ops.mmap)
 		return hw->ops.mmap(hw, file, vma);
 	return -ENXIO;
@@ -352,7 +364,7 @@
 	snd_assert(rhwdep != NULL, return -EINVAL);
 	*rhwdep = NULL;
 	snd_assert(card != NULL, return -ENXIO);
-	hwdep = snd_magic_kcalloc(snd_hwdep_t, 0, GFP_KERNEL);
+	hwdep = kcalloc(1, sizeof(*hwdep), GFP_KERNEL);
 	if (hwdep == NULL)
 		return -ENOMEM;
 	hwdep->card = card;
@@ -378,19 +390,19 @@
 	snd_assert(hwdep != NULL, return -ENXIO);
 	if (hwdep->private_free)
 		hwdep->private_free(hwdep);
-	snd_magic_kfree(hwdep);
+	kfree(hwdep);
 	return 0;
 }
 
 static int snd_hwdep_dev_free(snd_device_t *device)
 {
-	snd_hwdep_t *hwdep = snd_magic_cast(snd_hwdep_t, device->device_data, return -ENXIO);
+	snd_hwdep_t *hwdep = device->device_data;
 	return snd_hwdep_free(hwdep);
 }
 
 static int snd_hwdep_dev_register(snd_device_t *device)
 {
-	snd_hwdep_t *hwdep = snd_magic_cast(snd_hwdep_t, device->device_data, return -ENXIO);
+	snd_hwdep_t *hwdep = device->device_data;
 	int idx, err;
 	char name[32];
 
@@ -433,7 +445,7 @@
 
 static int snd_hwdep_dev_unregister(snd_device_t *device)
 {
-	snd_hwdep_t *hwdep = snd_magic_cast(snd_hwdep_t, device->device_data, return -ENXIO);
+	snd_hwdep_t *hwdep = device->device_data;
 	int idx;
 
 	snd_assert(hwdep != NULL, return -ENXIO);
diff -Nru a/sound/core/info.c b/sound/core/info.c
--- a/sound/core/info.c	2004-08-04 17:48:49 -07:00
+++ b/sound/core/info.c	2004-08-04 17:48:49 -07:00
@@ -139,7 +139,7 @@
 	struct snd_info_entry *entry;
 	loff_t ret;
 
-	data = snd_magic_cast(snd_info_private_data_t, file->private_data, return -ENXIO);
+	data = file->private_data;
 	entry = data->entry;
 	lock_kernel();
 	switch (entry->content) {
@@ -182,7 +182,7 @@
 	snd_info_buffer_t *buf;
 	size_t size = 0;
 
-	data = snd_magic_cast(snd_info_private_data_t, file->private_data, return -ENXIO);
+	data = file->private_data;
 	snd_assert(data != NULL, return -ENXIO);
 	entry = data->entry;
 	switch (entry->content) {
@@ -216,7 +216,7 @@
 	snd_info_buffer_t *buf;
 	size_t size = 0;
 
-	data = snd_magic_cast(snd_info_private_data_t, file->private_data, return -ENXIO);
+	data = file->private_data;
 	snd_assert(data != NULL, return -ENXIO);
 	entry = data->entry;
 	switch (entry->content) {
@@ -284,7 +284,7 @@
 		    	goto __error;
 		}
 	}
-	data = snd_magic_kcalloc(snd_info_private_data_t, 0, GFP_KERNEL);
+	data = kcalloc(1, sizeof(*data), GFP_KERNEL);
 	if (data == NULL) {
 		err = -ENOMEM;
 		goto __error;
@@ -293,10 +293,9 @@
 	switch (entry->content) {
 	case SNDRV_INFO_CONTENT_TEXT:
 		if (mode == O_RDONLY || mode == O_RDWR) {
-			buffer = (snd_info_buffer_t *)
-				 	snd_kcalloc(sizeof(snd_info_buffer_t), GFP_KERNEL);
+			buffer = kcalloc(1, sizeof(*buffer), GFP_KERNEL);
 			if (buffer == NULL) {
-				snd_magic_kfree(data);
+				kfree(data);
 				err = -ENOMEM;
 				goto __error;
 			}
@@ -305,7 +304,7 @@
 			buffer->buffer = vmalloc(buffer->len);
 			if (buffer->buffer == NULL) {
 				kfree(buffer);
-				snd_magic_kfree(data);
+				kfree(data);
 				err = -ENOMEM;
 				goto __error;
 			}
@@ -313,14 +312,13 @@
 			data->rbuffer = buffer;
 		}
 		if (mode == O_WRONLY || mode == O_RDWR) {
-			buffer = (snd_info_buffer_t *)
-					snd_kcalloc(sizeof(snd_info_buffer_t), GFP_KERNEL);
+			buffer = kcalloc(1, sizeof(*buffer), GFP_KERNEL);
 			if (buffer == NULL) {
 				if (mode == O_RDWR) {
 					vfree(data->rbuffer->buffer);
 					kfree(data->rbuffer);
 				}
-				snd_magic_kfree(data);
+				kfree(data);
 				err = -ENOMEM;
 				goto __error;
 			}
@@ -333,7 +331,7 @@
 					kfree(data->rbuffer);
 				}
 				kfree(buffer);
-				snd_magic_kfree(data);
+				kfree(data);
 				err = -ENOMEM;
 				goto __error;
 			}
@@ -345,7 +343,7 @@
 		if (entry->c.ops->open) {
 			if ((err = entry->c.ops->open(entry, mode,
 						      &data->file_private_data)) < 0) {
-				snd_magic_kfree(data);
+				kfree(data);
 				goto __error;
 			}
 		}
@@ -377,7 +375,7 @@
 	int mode;
 
 	mode = file->f_flags & O_ACCMODE;
-	data = snd_magic_cast(snd_info_private_data_t, file->private_data, return -ENXIO);
+	data = file->private_data;
 	entry = data->entry;
 	switch (entry->content) {
 	case SNDRV_INFO_CONTENT_TEXT:
@@ -405,7 +403,7 @@
 		break;
 	}
 	module_put(entry->module);
-	snd_magic_kfree(data);
+	kfree(data);
 	return 0;
 }
 
@@ -415,7 +413,7 @@
 	struct snd_info_entry *entry;
 	unsigned int mask;
 
-	data = snd_magic_cast(snd_info_private_data_t, file->private_data, return -ENXIO);
+	data = file->private_data;
 	if (data == NULL)
 		return 0;
 	entry = data->entry;
@@ -435,13 +433,13 @@
 	return mask;
 }
 
-static int snd_info_entry_ioctl(struct inode *inode, struct file *file,
-				unsigned int cmd, unsigned long arg)
+static inline int _snd_info_entry_ioctl(struct inode *inode, struct file *file,
+					unsigned int cmd, unsigned long arg)
 {
 	snd_info_private_data_t *data;
 	struct snd_info_entry *entry;
 
-	data = snd_magic_cast(snd_info_private_data_t, file->private_data, return -ENXIO);
+	data = file->private_data;
 	if (data == NULL)
 		return 0;
 	entry = data->entry;
@@ -456,13 +454,24 @@
 	return -ENOTTY;
 }
 
+/* FIXME: need to unlock BKL to allow preemption */
+static int snd_info_entry_ioctl(struct inode *inode, struct file *file,
+				unsigned int cmd, unsigned long arg)
+{
+	int err;
+	unlock_kernel();
+	err = _snd_info_entry_ioctl(inode, file, cmd, arg);
+	lock_kernel();
+	return err;
+}
+
 static int snd_info_entry_mmap(struct file *file, struct vm_area_struct *vma)
 {
 	struct inode *inode = file->f_dentry->d_inode;
 	snd_info_private_data_t *data;
 	struct snd_info_entry *entry;
 
-	data = snd_magic_cast(snd_info_private_data_t, file->private_data, return -ENXIO);
+	data = file->private_data;
 	if (data == NULL)
 		return 0;
 	entry = data->entry;
@@ -732,12 +741,12 @@
 static snd_info_entry_t *snd_info_create_entry(const char *name)
 {
 	snd_info_entry_t *entry;
-	entry = snd_magic_kcalloc(snd_info_entry_t, 0, GFP_KERNEL);
+	entry = kcalloc(1, sizeof(*entry), GFP_KERNEL);
 	if (entry == NULL)
 		return NULL;
 	entry->name = snd_kmalloc_strdup(name, GFP_KERNEL);
 	if (entry->name == NULL) {
-		snd_magic_kfree(entry);
+		kfree(entry);
 		return NULL;
 	}
 	entry->mode = S_IFREG | S_IRUGO;
@@ -793,27 +802,27 @@
 
 static int snd_info_dev_free_entry(snd_device_t *device)
 {
-	snd_info_entry_t *entry = snd_magic_cast(snd_info_entry_t, device->device_data, return -ENXIO);
+	snd_info_entry_t *entry = device->device_data;
 	snd_info_free_entry(entry);
 	return 0;
 }
 
 static int snd_info_dev_register_entry(snd_device_t *device)
 {
-	snd_info_entry_t *entry = snd_magic_cast(snd_info_entry_t, device->device_data, return -ENXIO);
+	snd_info_entry_t *entry = device->device_data;
 	return snd_info_register(entry);
 }
 
 static int snd_info_dev_disconnect_entry(snd_device_t *device)
 {
-	snd_info_entry_t *entry = snd_magic_cast(snd_info_entry_t, device->device_data, return -ENXIO);
+	snd_info_entry_t *entry = device->device_data;
 	entry->disconnected = 1;
 	return 0;
 }
 
 static int snd_info_dev_unregister_entry(snd_device_t *device)
 {
-	snd_info_entry_t *entry = snd_magic_cast(snd_info_entry_t, device->device_data, return -ENXIO);
+	snd_info_entry_t *entry = device->device_data;
 	return snd_info_unregister(entry);
 }
 
@@ -875,7 +884,7 @@
 		kfree((char *)entry->name);
 	if (entry->private_free)
 		entry->private_free(entry);
-	snd_magic_kfree(entry);
+	kfree(entry);
 }
 
 /**
diff -Nru a/sound/core/info_oss.c b/sound/core/info_oss.c
--- a/sound/core/info_oss.c	2004-08-04 17:48:48 -07:00
+++ b/sound/core/info_oss.c	2004-08-04 17:48:48 -07:00
@@ -134,16 +134,4 @@
 	return 0;
 }
 
-#else
-
-int snd_info_minor_register(void)
-{
-	return 0;
-}
-
-int snd_info_minor_unregister(void)
-{
-	return 0;
-}
-
 #endif /* CONFIG_SND_OSSEMUL */
diff -Nru a/sound/core/init.c b/sound/core/init.c
--- a/sound/core/init.c	2004-08-04 17:48:48 -07:00
+++ b/sound/core/init.c	2004-08-04 17:48:48 -07:00
@@ -73,7 +73,7 @@
 
 	if (extra_size < 0)
 		extra_size = 0;
-	card = (snd_card_t *) snd_kcalloc(sizeof(snd_card_t) + extra_size, GFP_KERNEL);
+	card = kcalloc(1, sizeof(*card) + extra_size, GFP_KERNEL);
 	if (card == NULL)
 		return NULL;
 	if (xid) {
@@ -800,6 +800,8 @@
 		return 0;
 	if (card->power_state == SNDRV_CTL_POWER_D0)
 		return 0;
+	/* restore the PCI config space */
+	pci_restore_state(dev, dev->saved_config_space);
 	/* FIXME: correct state value? */
 	return card->pm_resume(card, 0);
 }
diff -Nru a/sound/core/ioctl32/ioctl32.c b/sound/core/ioctl32/ioctl32.c
--- a/sound/core/ioctl32/ioctl32.c	2004-08-04 17:48:48 -07:00
+++ b/sound/core/ioctl32/ioctl32.c	2004-08-04 17:48:48 -07:00
@@ -257,7 +257,7 @@
 	snd_ctl_elem_info_t info;
 	int err;
 
-	ctl = snd_magic_cast(snd_ctl_file_t, file->private_data, return -ENXIO);
+	ctl = file->private_data;
 
 	down_read(&ctl->card->controls_rwsem);
 	kctl = snd_ctl_find_id(ctl->card, id);
diff -Nru a/sound/core/ioctl32/pcm32.c b/sound/core/ioctl32/pcm32.c
--- a/sound/core/ioctl32/pcm32.c	2004-08-04 17:48:49 -07:00
+++ b/sound/core/ioctl32/pcm32.c	2004-08-04 17:48:49 -07:00
@@ -69,7 +69,7 @@
 	unsigned char reserved[64];
 } __attribute__((packed));
 
-#define numberof(array)  (sizeof(array)/sizeof(array[0]))
+#define numberof(array) ARRAY_SIZE(array)
 
 #define CVT_sndrv_pcm_hw_params()\
 {\
@@ -235,7 +235,7 @@
 
 	/* FIXME: need to check whether fop->ioctl is sane */
 
-	pcm_file = snd_magic_cast(snd_pcm_file_t, file->private_data, return -ENXIO);
+	pcm_file = file->private_data;
 	substream = pcm_file->substream;
 	snd_assert(substream != NULL && substream->runtime, return -ENXIO);
 
@@ -313,7 +313,7 @@
 
 	memset(params, 0, sizeof(*params));
 	params->flags = oparams->flags;
-	for (i = 0; i < sizeof(oparams->masks) / sizeof(unsigned int); i++)
+	for (i = 0; i < ARRAY_SIZE(oparams->masks); i++)
 		params->masks[i].bits[0] = oparams->masks[i];
 	memcpy(params->intervals, oparams->intervals, sizeof(oparams->intervals));
 	params->rmask = __OLD_TO_NEW_MASK(oparams->rmask);
@@ -331,7 +331,7 @@
 
 	memset(oparams, 0, sizeof(*oparams));
 	oparams->flags = params->flags;
-	for (i = 0; i < sizeof(oparams->masks) / sizeof(unsigned int); i++)
+	for (i = 0; i < ARRAY_SIZE(oparams->masks); i++)
 		oparams->masks[i] = params->masks[i].bits[0];
 	memcpy(oparams->intervals, params->intervals, sizeof(oparams->intervals));
 	oparams->rmask = __NEW_TO_OLD_MASK(params->rmask);
@@ -350,8 +350,8 @@
 	mm_segment_t oldseg;
 	int err;
 
-	data32 = snd_kcalloc(sizeof(*data32), GFP_KERNEL);
-	data = snd_kcalloc(sizeof(*data), GFP_KERNEL);
+	data32 = kcalloc(1, sizeof(*data32), GFP_KERNEL);
+	data = kcalloc(1, sizeof(*data), GFP_KERNEL);
 	if (data32 == NULL || data == NULL) {
 		err = -ENOMEM;
 		goto __end;
@@ -379,6 +379,45 @@
 	return err;
 }
 
+struct sndrv_pcm_mmap_status32 {
+	s32 state;
+	s32 pad1;
+	u32 hw_ptr;
+	struct compat_timespec tstamp;
+	s32 suspended_state;
+} __attribute__((packed));
+
+struct sndrv_pcm_mmap_control32 {
+	u32 appl_ptr;
+	u32 avail_min;
+} __attribute__((packed));
+
+struct sndrv_pcm_sync_ptr32 {
+	u32 flags;
+	union {
+		struct sndrv_pcm_mmap_status32 status;
+		unsigned char reserved[64];
+	} s;
+	union {
+		struct sndrv_pcm_mmap_control32 control;
+		unsigned char reserved[64];
+	} c;
+} __attribute__((packed));
+
+#define CVT_sndrv_pcm_sync_ptr()\
+{\
+	COPY(flags);\
+	COPY(s.status.state);\
+	COPY(s.status.pad1);\
+	COPY(s.status.hw_ptr);\
+	COPY(s.status.tstamp.tv_sec);\
+	COPY(s.status.tstamp.tv_nsec);\
+	COPY(s.status.suspended_state);\
+	COPY(c.control.appl_ptr);\
+	COPY(c.control.avail_min);\
+}
+
+DEFINE_ALSA_IOCTL_BIG(pcm_sync_ptr);
 
 /*
  */
@@ -396,6 +435,7 @@
 DEFINE_ALSA_IOCTL_ENTRY(pcm_writei, xferi, SNDRV_PCM_IOCTL_WRITEI_FRAMES);
 DEFINE_ALSA_IOCTL_ENTRY(pcm_readn, xfern, SNDRV_PCM_IOCTL_READN_FRAMES);
 DEFINE_ALSA_IOCTL_ENTRY(pcm_writen, xfern, SNDRV_PCM_IOCTL_WRITEN_FRAMES);
+DEFINE_ALSA_IOCTL_ENTRY(pcm_sync_ptr, pcm_sync_ptr, SNDRV_PCM_IOCTL_SYNC_PTR);
 
 
 /*
@@ -416,6 +456,7 @@
 	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),
 
 };
 
@@ -431,6 +472,8 @@
 	{ SNDRV_PCM_IOCTL_SW_PARAMS32, AP(pcm_sw_params) },
 	{ SNDRV_PCM_IOCTL_STATUS32, AP(pcm_status) },
 	{ SNDRV_PCM_IOCTL_DELAY32, AP(pcm_delay) },
+	MAP_COMPAT(SNDRV_PCM_IOCTL_HWSYNC),
+	{ SNDRV_PCM_IOCTL_SYNC_PTR32, AP(pcm_sync_ptr) },
 	{ SNDRV_PCM_IOCTL_CHANNEL_INFO32, AP(pcm_channel_info) },
 	MAP_COMPAT(SNDRV_PCM_IOCTL_PREPARE),
 	MAP_COMPAT(SNDRV_PCM_IOCTL_RESET),
diff -Nru a/sound/core/memalloc.c b/sound/core/memalloc.c
--- a/sound/core/memalloc.c	2004-08-04 17:48:49 -07:00
+++ b/sound/core/memalloc.c	2004-08-04 17:48:49 -07:00
@@ -45,15 +45,19 @@
 #ifndef SNDRV_CARDS
 #define SNDRV_CARDS	8
 #endif
+
+/* FIXME: so far only some PCI devices have the preallocation table */
+#ifdef CONFIG_PCI
 static int enable[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = 1};
 static int boot_devs;
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable cards to allocate buffers.");
+#endif
 
 /*
  */
 
-void *snd_malloc_sgbuf_pages(const struct snd_dma_device *dev,
+void *snd_malloc_sgbuf_pages(struct device *device,
                              size_t size, struct snd_dma_buffer *dmab,
 			     size_t *res_size);
 int snd_free_sgbuf_pages(struct snd_dma_buffer *dmab);
@@ -66,9 +70,8 @@
 
 /* buffer preservation list */
 struct snd_mem_list {
-	struct snd_dma_device dev;
 	struct snd_dma_buffer buffer;
-	int used;
+	unsigned int id;
 	struct list_head list;
 };
 
@@ -148,6 +151,10 @@
 
 #endif /* arch */
 
+#if ! defined(__arm__)
+#define NEED_RESERVE_PAGES
+#endif
+
 /*
  *
  *  Generic memory allocators
@@ -156,22 +163,28 @@
 
 static long snd_allocated_pages; /* holding the number of allocated pages */
 
-static void mark_pages(void *res, int order)
+static inline void inc_snd_pages(int order)
+{
+	snd_allocated_pages += 1 << order;
+}
+
+static inline void dec_snd_pages(int order)
+{
+	snd_allocated_pages -= 1 << order;
+}
+
+static void mark_pages(struct page *page, int order)
 {
-	struct page *page = virt_to_page(res);
 	struct page *last_page = page + (1 << order);
 	while (page < last_page)
 		SetPageReserved(page++);
-	snd_allocated_pages += 1 << order;
 }
 
-static void unmark_pages(void *res, int order)
+static void unmark_pages(struct page *page, int order)
 {
-	struct page *page = virt_to_page(res);
 	struct page *last_page = page + (1 << order);
 	while (page < last_page)
 		ClearPageReserved(page++);
-	snd_allocated_pages -= 1 << order;
 }
 
 /**
@@ -190,43 +203,15 @@
 
 	snd_assert(size > 0, return NULL);
 	snd_assert(gfp_flags != 0, return NULL);
-	for (pg = 0; PAGE_SIZE * (1 << pg) < size; pg++);
+	pg = get_order(size);
 	if ((res = (void *) __get_free_pages(gfp_flags, pg)) != NULL) {
-		mark_pages(res, pg);
+		mark_pages(virt_to_page(res), pg);
+		inc_snd_pages(pg);
 	}
 	return res;
 }
 
 /**
- * snd_malloc_pages_fallback - allocate pages with the given size with fallback
- * @size: the requested size to allocate in bytes
- * @gfp_flags: the allocation conditions, GFP_XXX
- * @res_size: the pointer to store the size of buffer actually allocated
- *
- * Allocates the physically contiguous pages with the given request
- * size.  When no space is left, this function reduces the size and
- * tries to allocate again.  The size actually allocated is stored in
- * res_size argument.
- *
- * Returns the pointer of the buffer, or NULL if no enoguh memory.
- */            
-void *snd_malloc_pages_fallback(size_t size, unsigned int gfp_flags, size_t *res_size)
-{
-	void *res;
-
-	snd_assert(size > 0, return NULL);
-	snd_assert(res_size != NULL, return NULL);
-	do {
-		if ((res = snd_malloc_pages(size, gfp_flags)) != NULL) {
-			*res_size = size;
-			return res;
-		}
-		size >>= 1;
-	} while (size >= PAGE_SIZE);
-	return NULL;
-}
-
-/**
  * snd_free_pages - release the pages
  * @ptr: the buffer pointer to release
  * @size: the allocated buffer size
@@ -239,8 +224,9 @@
 
 	if (ptr == NULL)
 		return;
-	for (pg = 0; PAGE_SIZE * (1 << pg) < size; pg++);
-	unmark_pages(ptr, pg);
+	pg = get_order(size);
+	dec_snd_pages(pg);
+	unmark_pages(virt_to_page(ptr), pg);
 	free_pages((unsigned long) ptr, pg);
 }
 
@@ -250,6 +236,7 @@
  *
  */
 
+/* allocate the coherent DMA pages */
 static void *snd_malloc_dev_pages(struct device *dev, size_t size, dma_addr_t *dma)
 {
 	int pg;
@@ -263,28 +250,17 @@
 	if (pg > 0)
 		gfp_flags |= __GFP_NOWARN;
 	res = dma_alloc_coherent(dev, PAGE_SIZE << pg, dma, gfp_flags);
-	if (res != NULL)
-		mark_pages(res, pg);
+	if (res != NULL) {
+#ifdef NEED_RESERVE_PAGES
+		mark_pages(virt_to_page(res), pg); /* should be dma_to_page() */
+#endif
+		inc_snd_pages(pg);
+	}
 
 	return res;
 }
 
-static void *snd_malloc_dev_pages_fallback(struct device *dev, size_t size,
-					   dma_addr_t *dma, size_t *res_size)
-{
-	void *res;
-
-	snd_assert(res_size != NULL, return NULL);
-	do {
-		if ((res = snd_malloc_dev_pages(dev, size, dma)) != NULL) {
-			*res_size = size;
-			return res;
-		}
-		size >>= 1;
-	} while (size >= PAGE_SIZE);
-	return NULL;
-}
-
+/* free the coherent DMA pages */
 static void snd_free_dev_pages(struct device *dev, size_t size, void *ptr,
 			       dma_addr_t dma)
 {
@@ -293,7 +269,10 @@
 	if (ptr == NULL)
 		return;
 	pg = get_order(size);
-	unmark_pages(ptr, pg);
+	dec_snd_pages(pg);
+#ifdef NEED_RESERVE_PAGES
+	unmark_pages(virt_to_page(ptr), pg); /* should be dma_to_page() */
+#endif
 	dma_free_coherent(dev, PAGE_SIZE << pg, ptr, dma);
 }
 
@@ -308,30 +287,13 @@
 
 	snd_assert(size > 0, return NULL);
 	snd_assert(dma_addr != NULL, return NULL);
-	for (pg = 0; PAGE_SIZE * (1 << pg) < size; pg++);
+	pg = get_order(size);
 	res = sbus_alloc_consistent(sdev, PAGE_SIZE * (1 << pg), dma_addr);
-	if (res != NULL) {
-		mark_pages(res, pg);
-	}
+	if (res != NULL)
+		inc_snd_pages(pg);
 	return res;
 }
 
-static void *snd_malloc_sbus_pages_fallback(struct device *dev, size_t size,
-					    dma_addr_t *dma_addr, size_t *res_size)
-{
-	void *res;
-
-	snd_assert(res_size != NULL, return NULL);
-	do {
-		if ((res = snd_malloc_sbus_pages(dev, size, dma_addr)) != NULL) {
-			*res_size = size;
-			return res;
-		}
-		size >>= 1;
-	} while (size >= PAGE_SIZE);
-	return NULL;
-}
-
 static void snd_free_sbus_pages(struct device *dev, size_t size,
 				void *ptr, dma_addr_t dma_addr)
 {
@@ -340,8 +302,8 @@
 
 	if (ptr == NULL)
 		return;
-	for (pg = 0; PAGE_SIZE * (1 << pg) < size; pg++);
-	unmark_pages(ptr, pg);
+	pg = get_order(size);
+	dec_snd_pages(pg);
 	sbus_free_consistent(sdev, PAGE_SIZE * (1 << pg), ptr, dma_addr);
 }
 
@@ -354,24 +316,10 @@
  */
 
 
-/*
- * compare the two devices
- * returns non-zero if matched.
- */
-static int compare_device(const struct snd_dma_device *a, const struct snd_dma_device *b, int allow_unused)
-{
-	if (a->type != b->type)
-		return 0;
-	if (a->id != b->id) {
-		if (! allow_unused || (a->id != SNDRV_DMA_DEVICE_UNUSED && b->id != SNDRV_DMA_DEVICE_UNUSED))
-			return 0;
-	}
-	return a->dev == b->dev;
-}
-
 /**
  * snd_dma_alloc_pages - allocate the buffer area according to the given type
- * @dev: the buffer device info
+ * @type: the DMA buffer type
+ * @device: the device pointer
  * @size: the buffer size to allocate
  * @dmab: buffer allocation record to store the allocated data
  *
@@ -381,32 +329,33 @@
  * Returns zero if the buffer with the given size is allocated successfuly,
  * other a negative value at error.
  */
-int snd_dma_alloc_pages(const struct snd_dma_device *dev, size_t size,
+int snd_dma_alloc_pages(int type, struct device *device, size_t size,
 			struct snd_dma_buffer *dmab)
 {
-	snd_assert(dev != NULL, return -ENXIO);
 	snd_assert(size > 0, return -ENXIO);
 	snd_assert(dmab != NULL, return -ENXIO);
 
+	dmab->dev.type = type;
+	dmab->dev.dev = device;
 	dmab->bytes = 0;
-	switch (dev->type) {
+	switch (type) {
 	case SNDRV_DMA_TYPE_CONTINUOUS:
-		dmab->area = snd_malloc_pages(size, (unsigned long)dev->dev);
+		dmab->area = snd_malloc_pages(size, (unsigned long)device);
 		dmab->addr = 0;
 		break;
 #ifdef CONFIG_SBUS
 	case SNDRV_DMA_TYPE_SBUS:
-		dmab->area = snd_malloc_sbus_pages(dev->dev, size, &dmab->addr);
+		dmab->area = snd_malloc_sbus_pages(device, size, &dmab->addr);
 		break;
 #endif
 	case SNDRV_DMA_TYPE_DEV:
-		dmab->area = snd_malloc_dev_pages(dev->dev, size, &dmab->addr);
+		dmab->area = snd_malloc_dev_pages(device, size, &dmab->addr);
 		break;
 	case SNDRV_DMA_TYPE_DEV_SG:
-		snd_malloc_sgbuf_pages(dev, size, dmab, NULL);
+		snd_malloc_sgbuf_pages(device, size, dmab, NULL);
 		break;
 	default:
-		printk(KERN_ERR "snd-malloc: invalid device type %d\n", dev->type);
+		printk(KERN_ERR "snd-malloc: invalid device type %d\n", type);
 		dmab->area = NULL;
 		dmab->addr = 0;
 		return -ENXIO;
@@ -419,7 +368,8 @@
 
 /**
  * snd_dma_alloc_pages_fallback - allocate the buffer area according to the given type with fallback
- * @dev: the buffer device info
+ * @type: the DMA buffer type
+ * @device: the device pointer
  * @size: the buffer size to allocate
  * @dmab: buffer allocation record to store the allocated data
  *
@@ -431,35 +381,20 @@
  * Returns zero if the buffer with the given size is allocated successfuly,
  * other a negative value at error.
  */
-int snd_dma_alloc_pages_fallback(const struct snd_dma_device *dev, size_t size,
+int snd_dma_alloc_pages_fallback(int type, struct device *device, size_t size,
 				 struct snd_dma_buffer *dmab)
 {
-	snd_assert(dev != NULL, return -ENXIO);
+	int err;
+
 	snd_assert(size > 0, return -ENXIO);
 	snd_assert(dmab != NULL, return -ENXIO);
 
-	dmab->bytes = 0;
-	switch (dev->type) {
-	case SNDRV_DMA_TYPE_CONTINUOUS:
-		dmab->area = snd_malloc_pages_fallback(size, (unsigned long)dev->dev, &dmab->bytes);
-		dmab->addr = 0;
-		break;
-#ifdef CONFIG_SBUS
-	case SNDRV_DMA_TYPE_SBUS:
-		dmab->area = snd_malloc_sbus_pages_fallback(dev->dev, size, &dmab->addr, &dmab->bytes);
-		break;
-#endif
-	case SNDRV_DMA_TYPE_DEV:
-		dmab->area = snd_malloc_dev_pages_fallback(dev->dev, size, &dmab->addr, &dmab->bytes);
-		break;
-	case SNDRV_DMA_TYPE_DEV_SG:
-		snd_malloc_sgbuf_pages(dev, size, dmab, &dmab->bytes);
-		break;
-	default:
-		printk(KERN_ERR "snd-malloc: invalid device type %d\n", dev->type);
-		dmab->area = NULL;
-		dmab->addr = 0;
-		return -ENXIO;
+	while ((err = snd_dma_alloc_pages(type, device, size, dmab)) < 0) {
+		if (err != -ENOMEM)
+			return err;
+		size >>= 1;
+		if (size <= PAGE_SIZE)
+			return -ENOMEM;
 	}
 	if (! dmab->area)
 		return -ENOMEM;
@@ -469,152 +404,87 @@
 
 /**
  * snd_dma_free_pages - release the allocated buffer
- * @dev: the buffer device info
- * @dmbab: the buffer allocation record to release
+ * @dmab: the buffer allocation record to release
  *
  * Releases the allocated buffer via snd_dma_alloc_pages().
  */
-void snd_dma_free_pages(const struct snd_dma_device *dev, struct snd_dma_buffer *dmab)
+void snd_dma_free_pages(struct snd_dma_buffer *dmab)
 {
-	switch (dev->type) {
+	switch (dmab->dev.type) {
 	case SNDRV_DMA_TYPE_CONTINUOUS:
 		snd_free_pages(dmab->area, dmab->bytes);
 		break;
 #ifdef CONFIG_SBUS
 	case SNDRV_DMA_TYPE_SBUS:
-		snd_free_sbus_pages(dev->dev, dmab->bytes, dmab->area, dmab->addr);
+		snd_free_sbus_pages(dmab->dev.dev, dmab->bytes, dmab->area, dmab->addr);
 		break;
 #endif
 	case SNDRV_DMA_TYPE_DEV:
-		snd_free_dev_pages(dev->dev, dmab->bytes, dmab->area, dmab->addr);
+		snd_free_dev_pages(dmab->dev.dev, dmab->bytes, dmab->area, dmab->addr);
 		break;
 	case SNDRV_DMA_TYPE_DEV_SG:
 		snd_free_sgbuf_pages(dmab);
 		break;
 	default:
-		printk(KERN_ERR "snd-malloc: invalid device type %d\n", dev->type);
+		printk(KERN_ERR "snd-malloc: invalid device type %d\n", dmab->dev.type);
 	}
 }
 
 
-/*
- * search for the device
- */
-static struct snd_mem_list *mem_list_find(const struct snd_dma_device *dev, int search_empty)
-{
-	struct list_head *p;
-	struct snd_mem_list *mem;
-
-	list_for_each(p, &mem_list_head) {
-		mem = list_entry(p, struct snd_mem_list, list);
-		if (mem->used && search_empty)
-			continue;
-		if (compare_device(&mem->dev, dev, search_empty))
-			return mem;
-	}
-	return NULL;
-}
-
 /**
  * snd_dma_get_reserved - get the reserved buffer for the given device
- * @dev: the buffer device info
  * @dmab: the buffer allocation record to store
+ * @id: the buffer id
  *
  * Looks for the reserved-buffer list and re-uses if the same buffer
- * is found in the list.  When the buffer is found, it's marked as used.
- * For unmarking the buffer, call snd_dma_free_reserved().
+ * is found in the list.  When the buffer is found, it's removed from the free list.
  *
  * Returns the size of buffer if the buffer is found, or zero if not found.
  */
-size_t snd_dma_get_reserved(const struct snd_dma_device *dev, struct snd_dma_buffer *dmab)
+size_t snd_dma_get_reserved_buf(struct snd_dma_buffer *dmab, unsigned int id)
 {
+	struct list_head *p;
 	struct snd_mem_list *mem;
 
-	snd_assert(dev && dmab, return 0);
+	snd_assert(dmab, return 0);
 
 	down(&list_mutex);
-	mem = mem_list_find(dev, 1);
-	if (mem) {
-		mem->used = 1;
-		mem->dev = *dev;
-		*dmab = mem->buffer;
-		up(&list_mutex);
-		return dmab->bytes;
+	list_for_each(p, &mem_list_head) {
+		mem = list_entry(p, struct snd_mem_list, list);
+		if (mem->id == id &&
+		    ! memcmp(&mem->buffer.dev, &dmab->dev, sizeof(dmab->dev))) {
+			list_del(p);
+			*dmab = mem->buffer;
+			kfree(mem);
+			up(&list_mutex);
+			return dmab->bytes;
+		}
 	}
 	up(&list_mutex);
 	return 0;
 }
 
 /**
- * snd_dma_free_reserved - unmark the reserved buffer
- * @dev: the buffer device info
- *
- * Looks for the matching reserved buffer and erases the mark on it
- * if found.
- *
- * Returns zero.
- */
-int snd_dma_free_reserved(const struct snd_dma_device *dev)
-{
-	struct snd_mem_list *mem;
-
-	snd_assert(dev, return -EINVAL);
-	down(&list_mutex);
-	mem = mem_list_find(dev, 0);
-	if (mem)
-		mem->used = 0;
-	up(&list_mutex);
-	return 0;
-}
-
-/**
- * snd_dma_set_reserved - reserve the buffer
- * @dev: the buffer device info
+ * snd_dma_reserve_buf - reserve the buffer
  * @dmab: the buffer to reserve
+ * @id: the buffer id
  *
  * Reserves the given buffer as a reserved buffer.
- * When an old reserved buffer already exists, the old one is released
- * and replaced with the new one.
- *
- * When NULL buffer pointer or zero buffer size is given, the existing
- * buffer is released and the entry is removed.
  * 
  * Returns zero if successful, or a negative code at error.
  */
-int snd_dma_set_reserved(const struct snd_dma_device *dev, struct snd_dma_buffer *dmab)
+int snd_dma_reserve_buf(struct snd_dma_buffer *dmab, unsigned int id)
 {
 	struct snd_mem_list *mem;
 
-	snd_assert(dev, return -EINVAL);
+	snd_assert(dmab, return -EINVAL);
+	mem = kmalloc(sizeof(*mem), GFP_KERNEL);
+	if (! mem)
+		return -ENOMEM;
 	down(&list_mutex);
-	mem = mem_list_find(dev, 0);
-	if (mem) {
-		if (mem->used)
-			printk(KERN_WARNING "snd-page-alloc: releasing the used block (type=%d, id=0x%x\n", mem->dev.type, mem->dev.id);
-		snd_dma_free_pages(dev, &mem->buffer);
-		if (! dmab || ! dmab->bytes) {
-			/* remove the entry */
-			list_del(&mem->list);
-			kfree(mem);
-			up(&list_mutex);
-			return 0;
-		}
-	} else {
-		if (! dmab || ! dmab->bytes) {
-			up(&list_mutex);
-			return 0;
-		}
-		mem = kmalloc(sizeof(*mem), GFP_KERNEL);
-		if (! mem) {
-			up(&list_mutex);
-			return -ENOMEM;
-		}
-		mem->dev = *dev;
-		list_add_tail(&mem->list, &mem_list_head);
-	}
-	/* store the entry */
-	mem->used = 1;
 	mem->buffer = *dmab;
+	mem->id = id;
+	list_add_tail(&mem->list, &mem_list_head);
 	up(&list_mutex);
 	return 0;
 }
@@ -632,7 +502,7 @@
 		p = mem_list_head.next;
 		mem = list_entry(p, struct snd_mem_list, list);
 		list_del(p);
-		snd_dma_free_pages(&mem->dev, &mem->buffer);
+		snd_dma_free_pages(&mem->buffer);
 		kfree(mem);
 	}
 	up(&list_mutex);
@@ -654,7 +524,7 @@
 	unsigned int buffers;
 };
 
-#define HAMMERFALL_BUFFER_SIZE    (16*1024*4*(26+1))
+#define HAMMERFALL_BUFFER_SIZE    (16*1024*4*(26+1)+0x10000)
 
 static struct prealloc_dev prealloc_devices[] __initdata = {
 	{
@@ -676,17 +546,6 @@
 	{ }, /* terminator */
 };
 
-/*
- * compose a snd_dma_device struct for the PCI device
- */
-static inline void snd_dma_device_pci(struct snd_dma_device *dev, struct pci_dev *pci, unsigned int id)
-{
-	memset(dev, 0, sizeof(*dev));
-	dev->type = SNDRV_DMA_TYPE_DEV;
-	dev->dev = snd_dma_pci_data(pci);
-	dev->id = id;
-}
-
 static void __init preallocate_cards(void)
 {
 	struct pci_dev *pci = NULL;
@@ -716,22 +575,13 @@
 			continue;
 		}
 		for (i = 0; i < dev->buffers; i++) {
-			struct snd_mem_list *mem;
-			mem = kmalloc(sizeof(*mem), GFP_KERNEL);
-			if (! mem) {
-				printk(KERN_WARNING "snd-page-alloc: can't malloc memlist\n");
-				break;
-			}
-			memset(mem, 0, sizeof(*mem));
-			snd_dma_device_pci(&mem->dev, pci, SNDRV_DMA_DEVICE_UNUSED);
-			if (snd_dma_alloc_pages(&mem->dev, dev->size, &mem->buffer) < 0) {
+			struct snd_dma_buffer dmab;
+			memset(&dmab, 0, sizeof(dmab));
+			if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci),
+						dev->size, &dmab) < 0)
 				printk(KERN_WARNING "snd-page-alloc: cannot allocate buffer pages (size = %d)\n", dev->size);
-				kfree(mem);
-			} else {
-				down(&list_mutex);
-				list_add_tail(&mem->list, &mem_list_head);
-				up(&list_mutex);
-			}
+			else
+				snd_dma_reserve_buf(&dmab, snd_dma_pci_buf_id(pci));
 		}
 	}
 }
@@ -752,48 +602,22 @@
 	struct list_head *p;
 	struct snd_mem_list *mem;
 	int devno;
+	static char *types[] = { "UNKNOWN", "CONT", "DEV", "DEV-SG", "SBUS" };
 
 	down(&list_mutex);
-	len += sprintf(page + len, "pages  : %li bytes (%li pages per %likB)\n",
-		       pages * PAGE_SIZE, pages, PAGE_SIZE / 1024);
+	len += snprintf(page + len, count - len,
+			"pages  : %li bytes (%li pages per %likB)\n",
+			pages * PAGE_SIZE, pages, PAGE_SIZE / 1024);
 	devno = 0;
 	list_for_each(p, &mem_list_head) {
 		mem = list_entry(p, struct snd_mem_list, list);
 		devno++;
-		len += sprintf(page + len, "buffer %d : ", devno);
-		if (mem->dev.id == SNDRV_DMA_DEVICE_UNUSED)
-			len += sprintf(page + len, "UNUSED");
-		else
-			len += sprintf(page + len, "ID %08x", mem->dev.id);
-		len += sprintf(page + len, " : type ");
-		switch (mem->dev.type) {
-		case SNDRV_DMA_TYPE_CONTINUOUS:
-			len += sprintf(page + len, "CONT [%p]", mem->dev.dev);
-			break;
-#ifdef CONFIG_SBUS
-		case SNDRV_DMA_TYPE_SBUS:
-			{
-				struct sbus_dev *sdev = (struct sbus_dev *)(mem->dev.dev);
-				len += sprintf(page + len, "SBUS [%x]", sdev->slot);
-			}
-			break;
-#endif
-		case SNDRV_DMA_TYPE_DEV:
-		case SNDRV_DMA_TYPE_DEV_SG:
-			if (mem->dev.dev) {
-				len += sprintf(page + len, "%s [%s]",
-					       mem->dev.type == SNDRV_DMA_TYPE_DEV_SG ? "DEV-SG" : "DEV",
-					       mem->dev.dev->bus_id);
-			} else
-				len += sprintf(page + len, "ISA");
-			break;
-		default:
-			len += sprintf(page + len, "UNKNOWN");
-			break;
-		}
-		len += sprintf(page + len, "\n  addr = 0x%lx, size = %d bytes, used = %s\n",
-			       (unsigned long)mem->buffer.addr, (int)mem->buffer.bytes,
-			       mem->used ? "yes" : "no");
+		len += snprintf(page + len, count - len,
+				"buffer %d : ID %08x : type %s\n",
+				devno, mem->id, types[mem->buffer.dev.type]);
+		len += snprintf(page + len, count - len,
+				"  addr = 0x%lx, size = %d bytes\n",
+				(unsigned long)mem->buffer.addr, (int)mem->buffer.bytes);
 	}
 	up(&list_mutex);
 	return len;
@@ -833,10 +657,8 @@
 EXPORT_SYMBOL(snd_dma_alloc_pages_fallback);
 EXPORT_SYMBOL(snd_dma_free_pages);
 
-EXPORT_SYMBOL(snd_dma_get_reserved);
-EXPORT_SYMBOL(snd_dma_free_reserved);
-EXPORT_SYMBOL(snd_dma_set_reserved);
+EXPORT_SYMBOL(snd_dma_get_reserved_buf);
+EXPORT_SYMBOL(snd_dma_reserve_buf);
 
 EXPORT_SYMBOL(snd_malloc_pages);
-EXPORT_SYMBOL(snd_malloc_pages_fallback);
 EXPORT_SYMBOL(snd_free_pages);
diff -Nru a/sound/core/memory.c b/sound/core/memory.c
--- a/sound/core/memory.c	2004-08-04 17:48:48 -07:00
+++ b/sound/core/memory.c	2004-08-04 17:48:48 -07:00
@@ -71,8 +71,7 @@
 		snd_printk(KERN_ERR "Not freed snd_alloc_kmalloc = %li\n", snd_alloc_kmalloc);
 	if (snd_alloc_vmalloc > 0)
 		snd_printk(KERN_ERR "Not freed snd_alloc_vmalloc = %li\n", snd_alloc_vmalloc);
-	for (head = snd_alloc_kmalloc_list.prev;
-	     head != &snd_alloc_kmalloc_list; head = head->prev) {
+	list_for_each_prev(head, &snd_alloc_kmalloc_list) {
 		t = list_entry(head, struct snd_alloc_track, list);
 		if (t->magic != KMALLOC_MAGIC) {
 			snd_printk(KERN_ERR "Corrupted kmalloc\n");
@@ -80,8 +79,7 @@
 		}
 		snd_printk(KERN_ERR "kmalloc(%ld) from %p not freed\n", (long) t->size, t->caller);
 	}
-	for (head = snd_alloc_vmalloc_list.prev;
-	     head != &snd_alloc_vmalloc_list; head = head->prev) {
+	list_for_each_prev(head, &snd_alloc_vmalloc_list) {
 		t = list_entry(head, struct snd_alloc_track, list);
 		if (t->magic != VMALLOC_MAGIC) {
 			snd_printk(KERN_ERR "Corrupted vmalloc\n");
@@ -118,6 +116,17 @@
 	return _snd_kmalloc(size, flags);
 }
 
+void *snd_hidden_kcalloc(size_t n, size_t size, int flags)
+{
+	void *ret = NULL;
+	if (n != 0 && size > INT_MAX / n)
+		return ret;
+	ret = _snd_kmalloc(n * size, flags);
+	if (ret)
+		memset(ret, 0, n * size);
+	return ret;
+}
+
 void snd_hidden_kfree(const void *obj)
 {
 	unsigned long flags;
@@ -140,46 +149,6 @@
 	snd_wrapper_kfree(obj);
 }
 
-void *_snd_magic_kcalloc(unsigned long magic, size_t size, int flags)
-{
-	unsigned long *ptr;
-	ptr = _snd_kmalloc(size + sizeof(unsigned long), flags);
-	if (ptr) {
-		*ptr++ = magic;
-		memset(ptr, 0, size);
-	}
-	return ptr;
-}
-
-void *_snd_magic_kmalloc(unsigned long magic, size_t size, int flags)
-{
-	unsigned long *ptr;
-	ptr = _snd_kmalloc(size + sizeof(unsigned long), flags);
-	if (ptr)
-		*ptr++ = magic;
-	return ptr;
-}
-
-void snd_magic_kfree(void *_ptr)
-{
-	unsigned long *ptr = _ptr;
-	if (ptr == NULL) {
-		snd_printk(KERN_WARNING "null snd_magic_kfree (called from %p)\n", __builtin_return_address(0));
-		return;
-	}
-	*--ptr = 0;
-	{
-		struct snd_alloc_track *t;
-		t = snd_alloc_track_entry(ptr);
-		if (t->magic != KMALLOC_MAGIC) {
-			snd_printk(KERN_ERR "bad snd_magic_kfree (called from %p)\n", __builtin_return_address(0));
-			return;
-		}
-	}
-	snd_hidden_kfree(ptr);
-	return;
-}
-
 void *snd_hidden_vmalloc(unsigned long size)
 {
 	void *ptr;
@@ -254,25 +223,6 @@
 #define _snd_kmalloc kmalloc
 
 #endif /* CONFIG_SND_DEBUG_MEMORY */
-
-/**
- * snd_kcalloc - memory allocation and zero-clear
- * @size: the size to allocate in bytes
- * @flags: allocation conditions, GFP_XXX
- *
- * Allocates a memory chunk via kmalloc() and initializes it to zero.
- *
- * Returns the pointer, or NULL if no enoguh memory.
- */
-void *snd_kcalloc(size_t size, int flags)
-{
-	void *ptr;
-	
-	ptr = _snd_kmalloc(size, flags);
-	if (ptr)
-		memset(ptr, 0, size);
-	return ptr;
-}
 
 /**
  * snd_kmalloc_strdup - copy the string
diff -Nru a/sound/core/oss/mixer_oss.c b/sound/core/oss/mixer_oss.c
--- a/sound/core/oss/mixer_oss.c	2004-08-04 17:48:49 -07:00
+++ b/sound/core/oss/mixer_oss.c	2004-08-04 17:48:49 -07:00
@@ -21,6 +21,7 @@
 
 #include <sound/driver.h>
 #include <linux/init.h>
+#include <linux/smp_lock.h>
 #include <linux/slab.h>
 #include <linux/time.h>
 #include <sound/core.h>
@@ -51,7 +52,7 @@
 	err = snd_card_file_add(card, file);
 	if (err < 0)
 		return err;
-	fmixer = (snd_mixer_oss_file_t *)snd_kcalloc(sizeof(*fmixer), GFP_KERNEL);
+	fmixer = kcalloc(1, sizeof(*fmixer), GFP_KERNEL);
 	if (fmixer == NULL) {
 		snd_card_file_remove(card, file);
 		return -ENOMEM;
@@ -358,10 +359,16 @@
 	return -ENXIO;
 }
 
+/* FIXME: need to unlock BKL to allow preemption */
 int snd_mixer_oss_ioctl(struct inode *inode, struct file *file,
 			unsigned int cmd, unsigned long arg)
 {
-	return snd_mixer_oss_ioctl1((snd_mixer_oss_file_t *) file->private_data, cmd, arg);
+	int err;
+	/* FIXME: need to unlock BKL to allow preemption */
+	unlock_kernel();
+	err = snd_mixer_oss_ioctl1((snd_mixer_oss_file_t *) file->private_data, cmd, arg);
+	lock_kernel();
+	return err;
 }
 
 int snd_mixer_oss_ioctl_card(snd_card_t *card, unsigned int cmd, unsigned long arg)
@@ -508,8 +515,8 @@
 		up_read(&card->controls_rwsem);
 		return;
 	}
-	uinfo = snd_kcalloc(sizeof(*uinfo), GFP_KERNEL);
-	uctl = snd_kcalloc(sizeof(*uctl), GFP_KERNEL);
+	uinfo = kcalloc(1, sizeof(*uinfo), GFP_KERNEL);
+	uctl = kcalloc(1, sizeof(*uctl), GFP_KERNEL);
 	if (uinfo == NULL || uctl == NULL)
 		goto __unalloc;
 	snd_runtime_check(!kctl->info(kctl, uinfo), goto __unalloc);
@@ -544,8 +551,8 @@
 		up_read(&card->controls_rwsem);
 		return;
 	}
-	uinfo = snd_kcalloc(sizeof(*uinfo), GFP_KERNEL);
-	uctl = snd_kcalloc(sizeof(*uctl), GFP_KERNEL);
+	uinfo = kcalloc(1, sizeof(*uinfo), GFP_KERNEL);
+	uctl = kcalloc(1, sizeof(*uctl), GFP_KERNEL);
 	if (uinfo == NULL || uctl == NULL)
 		goto __unalloc;
 	snd_runtime_check(!kctl->info(kctl, uinfo), goto __unalloc);
@@ -607,8 +614,8 @@
 	down_read(&card->controls_rwsem);
 	if ((kctl = snd_ctl_find_numid(card, numid)) == NULL)
 		return;
-	uinfo = snd_kcalloc(sizeof(*uinfo), GFP_KERNEL);
-	uctl = snd_kcalloc(sizeof(*uctl), GFP_KERNEL);
+	uinfo = kcalloc(1, sizeof(*uinfo), GFP_KERNEL);
+	uctl = kcalloc(1, sizeof(*uctl), GFP_KERNEL);
 	if (uinfo == NULL || uctl == NULL)
 		goto __unalloc;
 	snd_runtime_check(!kctl->info(kctl, uinfo), goto __unalloc);
@@ -646,8 +653,8 @@
 		up_read(&fmixer->card->controls_rwsem);
 		return;
 	}
-	uinfo = snd_kcalloc(sizeof(*uinfo), GFP_KERNEL);
-	uctl = snd_kcalloc(sizeof(*uctl), GFP_KERNEL);
+	uinfo = kcalloc(1, sizeof(*uinfo), GFP_KERNEL);
+	uctl = kcalloc(1, sizeof(*uctl), GFP_KERNEL);
 	if (uinfo == NULL || uctl == NULL)
 		goto __unalloc;
 	snd_runtime_check(!kctl->info(kctl, uinfo), goto __unalloc);
@@ -767,8 +774,8 @@
 	snd_ctl_elem_value_t *uctl;
 	int err, idx;
 	
-	uinfo = snd_kcalloc(sizeof(*uinfo), GFP_KERNEL);
-	uctl = snd_kcalloc(sizeof(*uctl), GFP_KERNEL);
+	uinfo = kcalloc(1, sizeof(*uinfo), GFP_KERNEL);
+	uctl = kcalloc(1, sizeof(*uctl), GFP_KERNEL);
 	if (uinfo == NULL || uctl == NULL) {
 		err = -ENOMEM;
 		goto __unlock;
@@ -814,8 +821,8 @@
 	int err;
 	unsigned int idx;
 
-	uinfo = snd_kcalloc(sizeof(*uinfo), GFP_KERNEL);
-	uctl = snd_kcalloc(sizeof(*uctl), GFP_KERNEL);
+	uinfo = kcalloc(1, sizeof(*uinfo), GFP_KERNEL);
+	uctl = kcalloc(1, sizeof(*uctl), GFP_KERNEL);
 	if (uinfo == NULL || uctl == NULL) {
 		err = -ENOMEM;
 		goto __unlock;
@@ -968,8 +975,10 @@
 		snd_ctl_elem_info_t uinfo;
 
 		memset(&uinfo, 0, sizeof(uinfo));
-		if (kctl->info(kctl, &uinfo))
+		if (kctl->info(kctl, &uinfo)) {
+			up_read(&mixer->card->controls_rwsem);
 			return 0;
+		}
 		strcpy(str, ptr->name);
 		if (!strcmp(str, "Master"))
 			strcpy(str, "Mix");
@@ -1060,7 +1069,7 @@
 static void snd_mixer_oss_proc_read(snd_info_entry_t *entry,
 				    snd_info_buffer_t * buffer)
 {
-	snd_mixer_oss_t *mixer = snd_magic_cast(snd_mixer_oss_t, entry->private_data, return);
+	snd_mixer_oss_t *mixer = entry->private_data;
 	int i;
 
 	down(&mixer->reg_mutex);
@@ -1084,7 +1093,7 @@
 static void snd_mixer_oss_proc_write(snd_info_entry_t *entry,
 				     snd_info_buffer_t * buffer)
 {
-	snd_mixer_oss_t *mixer = snd_magic_cast(snd_mixer_oss_t, entry->private_data, return);
+	snd_mixer_oss_t *mixer = entry->private_data;
 	char line[128], str[32], idxstr[16], *cptr;
 	int ch, idx;
 	struct snd_mixer_oss_assign_table *tbl;
@@ -1210,7 +1219,7 @@
 	};
 	unsigned int idx;
 	
-	for (idx = 0; idx < sizeof(table) / sizeof(struct snd_mixer_oss_assign_table); idx++)
+	for (idx = 0; idx < ARRAY_SIZE(table); idx++)
 		snd_mixer_oss_build_input(mixer, &table[idx], 0, 0);
 	if (mixer->mask_recsrc) {
 		mixer->get_recsrc = snd_mixer_oss_get_recsrc2;
@@ -1224,7 +1233,7 @@
 
 static int snd_mixer_oss_free1(void *private)
 {
-	snd_mixer_oss_t *mixer = snd_magic_cast(snd_mixer_oss_t, private, return -ENXIO);
+	snd_mixer_oss_t *mixer = private;
 	snd_card_t * card;
 	int idx;
  
@@ -1237,7 +1246,7 @@
 		if (chn->private_free)
 			chn->private_free(chn);
 	}
-	snd_magic_kfree(mixer);
+	kfree(mixer);
 	return 0;
 }
 
@@ -1249,7 +1258,7 @@
 		char name[128];
 		int idx, err;
 
-		mixer = snd_magic_kcalloc(snd_mixer_oss_t, sizeof(snd_mixer_oss_t), GFP_KERNEL);
+		mixer = kcalloc(2, sizeof(*mixer), GFP_KERNEL);
 		if (mixer == NULL)
 			return -ENOMEM;
 		init_MUTEX(&mixer->reg_mutex);
@@ -1259,7 +1268,7 @@
 						   &snd_mixer_oss_reg,
 						   name)) < 0) {
 			snd_printk("unable to register OSS mixer device %i:%i\n", card->number, 0);
-			snd_magic_kfree(mixer);
+			kfree(mixer);
 			return err;
 		}
 		mixer->oss_dev_alloc = 1;
diff -Nru a/sound/core/oss/pcm_oss.c b/sound/core/oss/pcm_oss.c
--- a/sound/core/oss/pcm_oss.c	2004-08-04 17:48:49 -07:00
+++ b/sound/core/oss/pcm_oss.c	2004-08-04 17:48:49 -07:00
@@ -28,6 +28,7 @@
 
 #include <sound/driver.h>
 #include <linux/init.h>
+#include <linux/smp_lock.h>
 #include <linux/slab.h>
 #include <linux/time.h>
 #include <linux/vmalloc.h>
@@ -53,13 +54,10 @@
 MODULE_LICENSE("GPL");
 module_param_array(dsp_map, int, boot_devs, 0444);
 MODULE_PARM_DESC(dsp_map, "PCM device number assigned to 1st OSS device.");
-MODULE_PARM_SYNTAX(dsp_map, "default:0,skill:advanced");
 module_param_array(adsp_map, int, boot_devs, 0444);
 MODULE_PARM_DESC(adsp_map, "PCM device number assigned to 2nd OSS device.");
-MODULE_PARM_SYNTAX(adsp_map, "default:1,skill:advanced");
 module_param(nonblock_open, bool, 0644);
 MODULE_PARM_DESC(nonblock_open, "Don't block opening busy PCM devices.");
-MODULE_PARM_SYNTAX(nonblock_open, "default:0,skill:advanced");
 MODULE_ALIAS_SNDRV_MINOR(SNDRV_MINOR_OSS_PCM);
 MODULE_ALIAS_SNDRV_MINOR(SNDRV_MINOR_OSS_PCM1);
 
@@ -1177,10 +1175,11 @@
 	snd_pcm_substream_t *substream;
 	int err;
 	int direct;
-	snd_pcm_hw_params_t params;
+	snd_pcm_hw_params_t *params;
 	unsigned int formats = 0;
 	snd_mask_t format_mask;
 	int fmt;
+
 	if ((err = snd_pcm_oss_get_active_substream(pcm_oss_file, &substream)) < 0)
 		return err;
 	if (atomic_read(&substream->runtime->mmap_count)) {
@@ -1194,10 +1193,14 @@
 		       AFMT_S16_LE | AFMT_S16_BE |
 		       AFMT_S8 | AFMT_U16_LE |
 		       AFMT_U16_BE;
-	_snd_pcm_hw_params_any(&params);
-	err = snd_pcm_hw_refine(substream, &params);
+	params = kmalloc(sizeof(*params), GFP_KERNEL);
+	if (!params)
+		return -ENOMEM;
+	_snd_pcm_hw_params_any(params);
+	err = snd_pcm_hw_refine(substream, params);
+	format_mask = *hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT); 
+	kfree(params);
 	snd_assert(err >= 0, return err);
-	format_mask = *hw_param_mask(&params, SNDRV_PCM_HW_PARAM_FORMAT); 
 	for (fmt = 0; fmt < 32; ++fmt) {
 		if (snd_mask_test(&format_mask, fmt)) {
 			int f = snd_pcm_oss_format_to(fmt);
@@ -1693,7 +1696,7 @@
 		snd_pcm_oss_release_substream(substream);
 		snd_pcm_release_substream(substream);
 	}
-	snd_magic_kfree(pcm_oss_file);
+	kfree(pcm_oss_file);
 	return 0;
 }
 
@@ -1712,7 +1715,7 @@
 	snd_assert(rpcm_oss_file != NULL, return -EINVAL);
 	*rpcm_oss_file = NULL;
 
-	pcm_oss_file = snd_magic_kcalloc(snd_pcm_oss_file_t, 0, GFP_KERNEL);
+	pcm_oss_file = kcalloc(1, sizeof(*pcm_oss_file), GFP_KERNEL);
 	if (pcm_oss_file == NULL)
 		return -ENOMEM;
 
@@ -1892,7 +1895,7 @@
 	snd_pcm_substream_t *substream;
 	snd_pcm_oss_file_t *pcm_oss_file;
 
-	pcm_oss_file = snd_magic_cast(snd_pcm_oss_file_t, file->private_data, return -ENXIO);
+	pcm_oss_file = file->private_data;
 	substream = pcm_oss_file->streams[SNDRV_PCM_STREAM_PLAYBACK];
 	if (substream == NULL)
 		substream = pcm_oss_file->streams[SNDRV_PCM_STREAM_CAPTURE];
@@ -1908,14 +1911,14 @@
 	return 0;
 }
 
-static int snd_pcm_oss_ioctl(struct inode *inode, struct file *file,
-                             unsigned int cmd, unsigned long arg)
+static inline int _snd_pcm_oss_ioctl(struct inode *inode, struct file *file,
+				     unsigned int cmd, unsigned long arg)
 {
 	snd_pcm_oss_file_t *pcm_oss_file;
 	int __user *p = (int __user *)arg;
 	int res;
 
-	pcm_oss_file = snd_magic_cast(snd_pcm_oss_file_t, file->private_data, return -ENXIO);
+	pcm_oss_file = file->private_data;
 	if (cmd == OSS_GETVERSION)
 		return put_user(SNDRV_OSS_VERSION, p);
 	if (cmd == OSS_ALSAEMULVER)
@@ -2068,12 +2071,23 @@
 	return -EINVAL;
 }
 
+/* FIXME: need to unlock BKL to allow preemption */
+static int snd_pcm_oss_ioctl(struct inode *inode, struct file *file,
+			     unsigned int cmd, unsigned long arg)
+{
+	int err;
+	unlock_kernel();
+	err = _snd_pcm_oss_ioctl(inode, file, cmd, arg);
+	lock_kernel();
+	return err;
+}
+
 static ssize_t snd_pcm_oss_read(struct file *file, char __user *buf, size_t count, loff_t *offset)
 {
 	snd_pcm_oss_file_t *pcm_oss_file;
 	snd_pcm_substream_t *substream;
 
-	pcm_oss_file = snd_magic_cast(snd_pcm_oss_file_t, file->private_data, return -ENXIO);
+	pcm_oss_file = file->private_data;
 	substream = pcm_oss_file->streams[SNDRV_PCM_STREAM_CAPTURE];
 	if (substream == NULL)
 		return -ENXIO;
@@ -2094,7 +2108,7 @@
 	snd_pcm_substream_t *substream;
 	long result;
 
-	pcm_oss_file = snd_magic_cast(snd_pcm_oss_file_t, file->private_data, return -ENXIO);
+	pcm_oss_file = file->private_data;
 	substream = pcm_oss_file->streams[SNDRV_PCM_STREAM_PLAYBACK];
 	if (substream == NULL)
 		return -ENXIO;
@@ -2131,7 +2145,7 @@
 	unsigned int mask;
 	snd_pcm_substream_t *psubstream = NULL, *csubstream = NULL;
 	
-	pcm_oss_file = snd_magic_cast(snd_pcm_oss_file_t, file->private_data, return 0);
+	pcm_oss_file = file->private_data;
 
 	psubstream = pcm_oss_file->streams[SNDRV_PCM_STREAM_PLAYBACK];
 	csubstream = pcm_oss_file->streams[SNDRV_PCM_STREAM_CAPTURE];
@@ -2178,7 +2192,7 @@
 #ifdef OSS_DEBUG
 	printk("pcm_oss: mmap begin\n");
 #endif
-	pcm_oss_file = snd_magic_cast(snd_pcm_oss_file_t, file->private_data, return -ENXIO);
+	pcm_oss_file = file->private_data;
 	switch ((area->vm_flags & (VM_READ | VM_WRITE))) {
 	case VM_READ | VM_WRITE:
 		substream = pcm_oss_file->streams[SNDRV_PCM_STREAM_PLAYBACK];
@@ -2280,7 +2294,7 @@
 				   snd_info_buffer_t * buffer)
 {
 	snd_pcm_str_t *pstr = (snd_pcm_str_t *)entry->private_data;
-	char line[512], str[32], task_name[32], *ptr;
+	char line[256], str[32], task_name[32], *ptr;
 	int idx1;
 	snd_pcm_oss_setup_t *setup, *setup1, template;
 
diff -Nru a/sound/core/oss/pcm_plugin.c b/sound/core/oss/pcm_plugin.c
--- a/sound/core/oss/pcm_plugin.c	2004-08-04 17:48:48 -07:00
+++ b/sound/core/oss/pcm_plugin.c	2004-08-04 17:48:48 -07:00
@@ -172,7 +172,7 @@
 	
 	snd_assert(plug != NULL, return -ENXIO);
 	snd_assert(src_format != NULL && dst_format != NULL, return -ENXIO);
-	plugin = (snd_pcm_plugin_t *)snd_kcalloc(sizeof(*plugin) + extra, GFP_KERNEL);
+	plugin = kcalloc(1, sizeof(*plugin) + extra, GFP_KERNEL);
 	if (plugin == NULL)
 		return -ENOMEM;
 	plugin->name = name;
@@ -189,7 +189,7 @@
 		channels = src_format->channels;
 	else
 		channels = dst_format->channels;
-	plugin->buf_channels = snd_kcalloc(channels * sizeof(*plugin->buf_channels), GFP_KERNEL);
+	plugin->buf_channels = kcalloc(channels, sizeof(*plugin->buf_channels), GFP_KERNEL);
 	if (plugin->buf_channels == NULL) {
 		snd_pcm_plugin_free(plugin);
 		return -ENOMEM;
@@ -370,7 +370,7 @@
 		unsigned int i;
 		switch (format) {
 		case SNDRV_PCM_FORMAT_MU_LAW:
-			for (i = 0; i < sizeof(preferred_formats) / sizeof(preferred_formats[0]); ++i) {
+			for (i = 0; i < ARRAY_SIZE(preferred_formats); ++i) {
 				int format1 = preferred_formats[i];
 				if (snd_mask_test(format_mask, format1))
 					return format1;
@@ -468,7 +468,7 @@
 	if (srcformat.channels > dstformat.channels) {
 		int sv = srcformat.channels;
 		int dv = dstformat.channels;
-		route_ttable_entry_t *ttable = snd_kcalloc(dv*sv*sizeof(*ttable), GFP_KERNEL);
+		route_ttable_entry_t *ttable = kcalloc(dv * sv, sizeof(*ttable), GFP_KERNEL);
 		if (ttable == NULL)
 			return -ENOMEM;
 #if 1
@@ -531,7 +531,7 @@
 	if (srcformat.channels < dstformat.channels) {
 		int sv = srcformat.channels;
 		int dv = dstformat.channels;
-		route_ttable_entry_t *ttable = snd_kcalloc(dv * sv * sizeof(*ttable), GFP_KERNEL);
+		route_ttable_entry_t *ttable = kcalloc(dv * sv, sizeof(*ttable), GFP_KERNEL);
 		if (ttable == NULL)
 			return -ENOMEM;
 #if 0
@@ -846,41 +846,31 @@
 			 size_t samples, int format)
 {
 	/* FIXME: sub byte resolution and odd dst_offset */
-	char *dst;
+	unsigned char *dst;
 	unsigned int dst_step;
 	int width;
-	u_int64_t silence;
+	const unsigned char *silence;
 	if (!dst_area->addr)
 		return 0;
 	dst = dst_area->addr + (dst_area->first + dst_area->step * dst_offset) / 8;
 	width = snd_pcm_format_physical_width(format);
+	if (width <= 0)
+		return -EINVAL;
+	if (dst_area->step == (unsigned int) width && width >= 8)
+		return snd_pcm_format_set_silence(format, dst, samples);
 	silence = snd_pcm_format_silence_64(format);
-	if (dst_area->step == (unsigned int) width) {
-		size_t dwords = samples * width / 64;
-		u_int64_t *dst64 = (u_int64_t *)dst;
-
-		samples -= dwords * 64 / width;
-		while (dwords-- > 0)
-			*dst64++ = silence;
-		if (samples == 0)
-			return 0;
-		dst = (char *)dst64;
-	}
+	if (! silence)
+		return -EINVAL;
 	dst_step = dst_area->step / 8;
-	switch (width) {
-	case 4: {
-		u_int8_t s0 = silence & 0xf0;
-		u_int8_t s1 = silence & 0x0f;
+	if (width == 4) {
+		/* Ima ADPCM */
 		int dstbit = dst_area->first % 8;
 		int dstbit_step = dst_area->step % 8;
 		while (samples-- > 0) {
-			if (dstbit) {
+			if (dstbit)
 				*dst &= 0xf0;
-				*dst |= s1;
-			} else {
+			else
 				*dst &= 0x0f;
-				*dst |= s0;
-			}
 			dst += dst_step;
 			dstbit += dstbit_step;
 			if (dstbit == 8) {
@@ -888,41 +878,12 @@
 				dstbit = 0;
 			}
 		}
-		break;
-	}
-	case 8: {
-		u_int8_t sil = silence;
-		while (samples-- > 0) {
-			*dst = sil;
-			dst += dst_step;
-		}
-		break;
-	}
-	case 16: {
-		u_int16_t sil = silence;
-		while (samples-- > 0) {
-			*(u_int16_t*)dst = sil;
-			dst += dst_step;
-		}
-		break;
-	}
-	case 32: {
-		u_int32_t sil = silence;
-		while (samples-- > 0) {
-			*(u_int32_t*)dst = sil;
-			dst += dst_step;
-		}
-		break;
-	}
-	case 64: {
+	} else {
+		width /= 8;
 		while (samples-- > 0) {
-			*(u_int64_t*)dst = silence;
+			memcpy(dst, silence, width);
 			dst += dst_step;
 		}
-		break;
-	}
-	default:
-		snd_BUG();
 	}
 	return 0;
 }
@@ -942,18 +903,18 @@
 	if (!dst_area->addr)
 		return 0;
 	width = snd_pcm_format_physical_width(format);
+	if (width <= 0)
+		return -EINVAL;
 	if (src_area->step == (unsigned int) width &&
-	    dst_area->step == (unsigned int) width) {
+	    dst_area->step == (unsigned int) width && width >= 8) {
 		size_t bytes = samples * width / 8;
-		samples -= bytes * 8 / width;
 		memcpy(dst, src, bytes);
-		if (samples == 0)
-			return 0;
+		return 0;
 	}
 	src_step = src_area->step / 8;
 	dst_step = dst_area->step / 8;
-	switch (width) {
-	case 4: {
+	if (width == 4) {
+		/* Ima ADPCM */
 		int srcbit = src_area->first % 8;
 		int srcbit_step = src_area->step % 8;
 		int dstbit = dst_area->first % 8;
@@ -963,12 +924,11 @@
 			if (srcbit)
 				srcval = *src & 0x0f;
 			else
-				srcval = *src & 0xf0;
+				srcval = (*src & 0xf0) >> 4;
 			if (dstbit)
-				*dst &= 0xf0;
+				*dst = (*dst & 0xf0) | srcval;
 			else
-				*dst &= 0x0f;
-			*dst |= srcval;
+				*dst = (*dst & 0x0f) | (srcval << 4);
 			src += src_step;
 			srcbit += srcbit_step;
 			if (srcbit == 8) {
@@ -982,42 +942,13 @@
 				dstbit = 0;
 			}
 		}
-		break;
-	}
-	case 8: {
-		while (samples-- > 0) {
-			*dst = *src;
-			src += src_step;
-			dst += dst_step;
-		}
-		break;
-	}
-	case 16: {
-		while (samples-- > 0) {
-			*(u_int16_t*)dst = *(u_int16_t*)src;
-			src += src_step;
-			dst += dst_step;
-		}
-		break;
-	}
-	case 32: {
-		while (samples-- > 0) {
-			*(u_int32_t*)dst = *(u_int32_t*)src;
-			src += src_step;
-			dst += dst_step;
-		}
-		break;
-	}
-	case 64: {
+	} else {
+		width /= 8;
 		while (samples-- > 0) {
-			*(u_int64_t*)dst = *(u_int64_t*)src;
+			memcpy(dst, src, width);
 			src += src_step;
 			dst += dst_step;
 		}
-		break;
-	}
-	default:
-		snd_BUG();
 	}
 	return 0;
 }
diff -Nru a/sound/core/oss/pcm_plugin.h b/sound/core/oss/pcm_plugin.h
--- a/sound/core/oss/pcm_plugin.h	2004-08-04 17:48:49 -07:00
+++ b/sound/core/oss/pcm_plugin.h	2004-08-04 17:48:49 -07:00
@@ -35,7 +35,7 @@
 
 static inline bitset_t *bitset_alloc(int nbits)
 {
-	return snd_kcalloc(bitset_size(nbits) * sizeof(bitset_t), GFP_KERNEL);
+	return kcalloc(bitset_size(nbits), sizeof(bitset_t), GFP_KERNEL);
 }
 	
 static inline void bitset_set(bitset_t *bitmap, unsigned int pos)
diff -Nru a/sound/core/oss/route.c b/sound/core/oss/route.c
--- a/sound/core/oss/route.c	2004-08-04 17:48:49 -07:00
+++ b/sound/core/oss/route.c	2004-08-04 17:48:49 -07:00
@@ -458,7 +458,7 @@
 			dptr->func = route_to_channel;
 		if (nsrcs > 0) {
                         int srcidx;
-			dptr->srcs = snd_kcalloc(nsrcs * sizeof(*srcs), GFP_KERNEL);
+			dptr->srcs = kcalloc(nsrcs, sizeof(*srcs), GFP_KERNEL);
                         for(srcidx = 0; srcidx < nsrcs; srcidx++)
 				dptr->srcs[srcidx] = srcs[srcidx];
 		} else
diff -Nru a/sound/core/pcm.c b/sound/core/pcm.c
--- a/sound/core/pcm.c	2004-08-04 17:48:49 -07:00
+++ b/sound/core/pcm.c	2004-08-04 17:48:49 -07:00
@@ -585,7 +585,7 @@
 	}
 	prev = NULL;
 	for (idx = 0, prev = NULL; idx < substream_count; idx++) {
-		substream = snd_magic_kcalloc(snd_pcm_substream_t, 0, GFP_KERNEL);
+		substream = kcalloc(1, sizeof(*substream), GFP_KERNEL);
 		if (substream == NULL)
 			return -ENOMEM;
 		substream->pcm = pcm;
@@ -600,7 +600,7 @@
 			prev->next = substream;
 		err = snd_pcm_substream_proc_init(substream);
 		if (err < 0) {
-			snd_magic_kfree(substream);
+			kfree(substream);
 			return err;
 		}
 		substream->group = &substream->self_group;
@@ -645,7 +645,7 @@
 	snd_assert(rpcm != NULL, return -EINVAL);
 	*rpcm = NULL;
 	snd_assert(card != NULL, return -ENXIO);
-	pcm = snd_magic_kcalloc(snd_pcm_t, 0, GFP_KERNEL);
+	pcm = kcalloc(1, sizeof(*pcm), GFP_KERNEL);
 	if (pcm == NULL)
 		return -ENOMEM;
 	pcm->card = card;
@@ -681,7 +681,7 @@
 	while (substream) {
 		substream_next = substream->next;
 		snd_pcm_substream_proc_done(substream);
-		snd_magic_kfree(substream);
+		kfree(substream);
 		substream = substream_next;
 	}
 	snd_pcm_stream_proc_done(pstr);
@@ -702,13 +702,13 @@
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 	snd_pcm_free_stream(&pcm->streams[SNDRV_PCM_STREAM_PLAYBACK]);
 	snd_pcm_free_stream(&pcm->streams[SNDRV_PCM_STREAM_CAPTURE]);
-	snd_magic_kfree(pcm);
+	kfree(pcm);
 	return 0;
 }
 
 static int snd_pcm_dev_free(snd_device_t *device)
 {
-	snd_pcm_t *pcm = snd_magic_cast(snd_pcm_t, device->device_data, return -ENXIO);
+	snd_pcm_t *pcm = device->device_data;
 	return snd_pcm_free(pcm);
 }
 
@@ -783,7 +783,7 @@
 	if (substream == NULL)
 		return -EAGAIN;
 
-	runtime = snd_kcalloc(sizeof(snd_pcm_runtime_t), GFP_KERNEL);
+	runtime = kcalloc(1, sizeof(*runtime), GFP_KERNEL);
 	if (runtime == NULL)
 		return -ENOMEM;
 
@@ -843,7 +843,7 @@
 	snd_pcm_substream_t *substream;
 	struct list_head *list;
 	char str[16];
-	snd_pcm_t *pcm = snd_magic_cast(snd_pcm_t, device->device_data, return -ENXIO);
+	snd_pcm_t *pcm = device->device_data;
 
 	snd_assert(pcm != NULL && device != NULL, return -ENXIO);
 	down(&register_mutex);
@@ -888,7 +888,7 @@
 
 static int snd_pcm_dev_disconnect(snd_device_t *device)
 {
-	snd_pcm_t *pcm = snd_magic_cast(snd_pcm_t, device->device_data, return -ENXIO);
+	snd_pcm_t *pcm = device->device_data;
 	struct list_head *list;
 	snd_pcm_substream_t *substream;
 	int idx, cidx;
@@ -914,7 +914,7 @@
 	int idx, cidx, devtype;
 	snd_pcm_substream_t *substream;
 	struct list_head *list;
-	snd_pcm_t *pcm = snd_magic_cast(snd_pcm_t, device->device_data, return -ENXIO);
+	snd_pcm_t *pcm = device->device_data;
 
 	snd_assert(pcm != NULL, return -ENXIO);
 	down(&register_mutex);
diff -Nru a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c
--- a/sound/core/pcm_lib.c	2004-08-04 17:48:49 -07:00
+++ b/sound/core/pcm_lib.c	2004-08-04 17:48:49 -07:00
@@ -128,12 +128,29 @@
 	}
 }
 
+static void xrun(snd_pcm_substream_t *substream)
+{
+	snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);
+#ifdef CONFIG_SND_DEBUG
+	if (substream->pstr->xrun_debug) {
+		snd_printd(KERN_DEBUG "XRUN: pcmC%dD%d%c\n",
+			   substream->pcm->card->number,
+			   substream->pcm->device,
+			   substream->stream ? 'c' : 'p');
+		if (substream->pstr->xrun_debug > 1)
+			dump_stack();
+	}
+#endif
+}
+
 static inline snd_pcm_uframes_t snd_pcm_update_hw_ptr_pos(snd_pcm_substream_t *substream,
 							  snd_pcm_runtime_t *runtime)
 {
 	snd_pcm_uframes_t pos;
 
 	pos = substream->ops->pointer(substream);
+	if (pos == SNDRV_PCM_POS_XRUN)
+		return pos; /* XRUN */
 	if (runtime->tstamp_mode & SNDRV_PCM_TSTAMP_MMAP)
 		snd_timestamp_now((snd_timestamp_t*)&runtime->status->tstamp, runtime->tstamp_timespec);
 #ifdef CONFIG_SND_DEBUG
@@ -158,19 +175,10 @@
 	if (avail > runtime->avail_max)
 		runtime->avail_max = avail;
 	if (avail >= runtime->stop_threshold) {
-		snd_pcm_stop(substream,
-			     runtime->status->state == SNDRV_PCM_STATE_DRAINING ?
-			     SNDRV_PCM_STATE_SETUP : SNDRV_PCM_STATE_XRUN);
-#ifdef CONFIG_SND_DEBUG
-		if (substream->pstr->xrun_debug) {
-			snd_printd(KERN_DEBUG "XRUN: pcmC%dD%d%c\n",
-				   substream->pcm->card->number,
-				   substream->pcm->device,
-				   substream->stream ? 'c' : 'p');
-			if (substream->pstr->xrun_debug > 1)
-				dump_stack();
-		}
-#endif
+		if (substream->runtime->status->state == SNDRV_PCM_STATE_DRAINING)
+			snd_pcm_stop(substream, SNDRV_PCM_STATE_SETUP);
+		else
+			xrun(substream);
 		return -EPIPE;
 	}
 	if (avail >= runtime->control->avail_min)
@@ -186,6 +194,10 @@
 	snd_pcm_sframes_t delta;
 
 	pos = snd_pcm_update_hw_ptr_pos(substream, runtime);
+	if (pos == SNDRV_PCM_POS_XRUN) {
+		xrun(substream);
+		return -EPIPE;
+	}
 	if (runtime->period_size == runtime->buffer_size)
 		goto __next_buf;
 	new_hw_ptr = runtime->hw_ptr_base + pos;
@@ -230,6 +242,10 @@
 
 	old_hw_ptr = runtime->status->hw_ptr;
 	pos = snd_pcm_update_hw_ptr_pos(substream, runtime);
+	if (pos == SNDRV_PCM_POS_XRUN) {
+		xrun(substream);
+		return -EPIPE;
+	}
 	new_hw_ptr = runtime->hw_ptr_base + pos;
 
 	delta = old_hw_ptr - new_hw_ptr;
@@ -887,22 +903,18 @@
 	va_list args;
 	va_start(args, dep);
 	if (constrs->rules_num >= constrs->rules_all) {
-		snd_pcm_hw_rule_t *old = constrs->rules;
-		if (constrs->rules_all == 0)
-			constrs->rules_all = 32;
-		else {
-			old = constrs->rules;
-			constrs->rules_all += 10;
-		}
-		constrs->rules = snd_kcalloc(constrs->rules_all * sizeof(*c),
-					     GFP_KERNEL);
-		if (!constrs->rules)
+		snd_pcm_hw_rule_t *new;
+		unsigned int new_rules = constrs->rules_all + 16;
+		new = kcalloc(new_rules, sizeof(*c), GFP_KERNEL);
+		if (!new)
 			return -ENOMEM;
-		if (old) {
-			memcpy(constrs->rules, old,
+		if (constrs->rules) {
+			memcpy(new, constrs->rules,
 			       constrs->rules_num * sizeof(*c));
-			kfree(old);
+			kfree(constrs->rules);
 		}
+		constrs->rules = new;
+		constrs->rules_all = new_rules;
 	}
 	c = &constrs->rules[constrs->rules_num];
 	c->cond = cond;
@@ -911,7 +923,7 @@
 	c->private = private;
 	k = 0;
 	while (1) {
-		snd_assert(k < sizeof(c->deps) / sizeof(c->deps[0]), return -EINVAL);
+		snd_assert(k < ARRAY_SIZE(c->deps), return -EINVAL);
 		c->deps[k++] = dep;
 		if (dep < 0)
 			break;
@@ -1109,7 +1121,7 @@
 		1<<24, 1<<25, 1<<26, 1<<27, 1<<28, 1<<29, 1<<30
 	};
 	return snd_interval_list(hw_param_interval(params, rule->var),
-				 sizeof(pow2_sizes)/sizeof(int), pow2_sizes, 0);
+				 ARRAY_SIZE(pow2_sizes), pow2_sizes, 0);
 }		
 
 /**
@@ -1769,12 +1781,14 @@
 				   void *arg)
 {
 	snd_pcm_runtime_t *runtime = substream->runtime;
+	unsigned long flags;
+	snd_pcm_stream_lock_irqsave(substream, flags);
 	if (snd_pcm_running(substream) &&
-	    snd_pcm_update_hw_ptr(substream) >= 0) {
+	    snd_pcm_update_hw_ptr(substream) >= 0)
 		runtime->status->hw_ptr %= runtime->buffer_size;
-		return 0;
-	}
-	runtime->status->hw_ptr = 0;
+	else
+		runtime->status->hw_ptr = 0;
+	snd_pcm_stream_unlock_irqrestore(substream, flags);
 	return 0;
 }
 
diff -Nru a/sound/core/pcm_memory.c b/sound/core/pcm_memory.c
--- a/sound/core/pcm_memory.c	2004-08-04 17:48:49 -07:00
+++ b/sound/core/pcm_memory.c	2004-08-04 17:48:49 -07:00
@@ -32,12 +32,10 @@
 static int preallocate_dma = 1;
 module_param(preallocate_dma, int, 0444);
 MODULE_PARM_DESC(preallocate_dma, "Preallocate DMA memory when the PCM devices are initialized.");
-MODULE_PARM_SYNTAX(preallocate_dma, SNDRV_BOOLEAN_TRUE_DESC);
 
 static int maximum_substreams = 4;
 module_param(maximum_substreams, int, 0444);
 MODULE_PARM_DESC(maximum_substreams, "Maximum substreams with preallocated DMA memory.");
-MODULE_PARM_SYNTAX(maximum_substreams, SNDRV_BOOLEAN_TRUE_DESC);
 
 const static size_t snd_minimum_buffer = 16384;
 
@@ -56,26 +54,21 @@
 	snd_assert(size > 0, return -EINVAL);
 
 	/* already reserved? */
-	if (snd_dma_get_reserved(&substream->dma_device, dmab) > 0) {
+	if (snd_dma_get_reserved_buf(dmab, substream->dma_buf_id) > 0) {
 		if (dmab->bytes >= size)
 			return 0; /* yes */
-		/* no, reset the reserved block */
-		/* if we can find bigger pages below, this block will be
-		 * automatically removed in snd_dma_set_reserved().
-		 */
-		snd_dma_free_reserved(&substream->dma_device);
+		/* no, free the reserved block */
+		snd_dma_free_pages(dmab);
 		dmab->bytes = 0;
 	}
 
 	do {
-		if ((err = snd_dma_alloc_pages(&substream->dma_device, size, dmab)) < 0) {
+		if ((err = snd_dma_alloc_pages(dmab->dev.type, dmab->dev.dev,
+					       size, dmab)) < 0) {
 			if (err != -ENOMEM)
 				return err; /* fatal error */
-		} else {
-			/* remember this one */
-			snd_dma_set_reserved(&substream->dma_device, dmab);
+		} else
 			return 0;
-		}
 		size >>= 1;
 	} while (size >= snd_minimum_buffer);
 	dmab->bytes = 0; /* tell error */
@@ -89,7 +82,10 @@
 {
 	if (substream->dma_buffer.area == NULL)
 		return;
-	snd_dma_free_reserved(&substream->dma_device);
+	if (substream->dma_buf_id)
+		snd_dma_reserve_buf(&substream->dma_buffer, substream->dma_buf_id);
+	else
+		snd_dma_free_pages(&substream->dma_buffer);
 	substream->dma_buffer.area = NULL;
 }
 
@@ -108,7 +104,6 @@
 		snd_info_unregister(substream->proc_prealloc_entry);
 		substream->proc_prealloc_entry = NULL;
 	}
-	substream->dma_device.type = SNDRV_DMA_TYPE_UNKNOWN;
 	return 0;
 }
 
@@ -170,18 +165,20 @@
 		if (substream->dma_buffer.bytes == size)
 			return;
 		memset(&new_dmab, 0, sizeof(new_dmab));
+		new_dmab.dev = substream->dma_buffer.dev;
 		if (size > 0) {
-
-			if (snd_dma_alloc_pages(&substream->dma_device, size, &new_dmab) < 0) {
+			if (snd_dma_alloc_pages(substream->dma_buffer.dev.type,
+						substream->dma_buffer.dev.dev,
+						size, &new_dmab) < 0) {
 				buffer->error = -ENOMEM;
 				return;
 			}
 			substream->buffer_bytes_max = size;
-			snd_dma_free_reserved(&substream->dma_device);
 		} else {
 			substream->buffer_bytes_max = UINT_MAX;
 		}
-		snd_dma_set_reserved(&substream->dma_device, &new_dmab);
+		if (substream->dma_buffer.area)
+			snd_dma_free_pages(&substream->dma_buffer);
 		substream->dma_buffer = new_dmab;
 	} else {
 		buffer->error = -EINVAL;
@@ -196,7 +193,6 @@
 {
 	snd_info_entry_t *entry;
 
-	memset(&substream->dma_buffer, 0, sizeof(substream->dma_buffer));
 	if (size > 0 && preallocate_dma && substream->number < maximum_substreams)
 		preallocate_pcm_pages(substream, size);
 
@@ -219,20 +215,6 @@
 }
 
 
-/*
- * set up the unique pcm id
- */
-static inline void setup_pcm_id(snd_pcm_substream_t *subs)
-{
-	if (! subs->dma_device.id) {
-		subs->dma_device.id = subs->pcm->device << 16 |
-			subs->stream << 8 | (subs->number + 1);
-		if (subs->dma_device.type == SNDRV_DMA_TYPE_CONTINUOUS ||
-		    subs->dma_device.dev == NULL)
-			subs->dma_device.id |= (subs->pcm->card->number + 1) << 24;
-	}
-}
-
 /**
  * snd_pcm_lib_preallocate_pages - pre-allocation for the given DMA type
  * @substream: the pcm substream instance
@@ -241,7 +223,12 @@
  * @size: the requested pre-allocation size in bytes
  * @max: the max. allowed pre-allocation size
  *
- * Do pre-allocation for the given DMA type.
+ * Do pre-allocation for the given DMA buffer type.
+ *
+ * When substream->dma_buf_id is set, the function tries to look for
+ * the reserved buffer, and the buffer is not freed but reserved at
+ * destruction time.  The dma_buf_id must be unique for all systems
+ * (in the same DMA buffer type) e.g. using snd_dma_pci_buf_id().
  *
  * Returns zero if successful, or a negative error code on failure.
  */
@@ -249,9 +236,8 @@
 				  int type, struct device *data,
 				  size_t size, size_t max)
 {
-	substream->dma_device.type = type;
-	substream->dma_device.dev = data;
-	setup_pcm_id(substream);
+	substream->dma_buffer.dev.type = type;
+	substream->dma_buffer.dev.dev = data;
 	return snd_pcm_lib_preallocate_pages1(substream, size, max);
 }
 
@@ -314,31 +300,38 @@
 int snd_pcm_lib_malloc_pages(snd_pcm_substream_t *substream, size_t size)
 {
 	snd_pcm_runtime_t *runtime;
-	struct snd_dma_buffer dmab;
+	struct snd_dma_buffer *dmab = NULL;
 
-	snd_assert(substream->dma_device.type != SNDRV_DMA_TYPE_UNKNOWN, return -EINVAL);
+	snd_assert(substream->dma_buffer.dev.type != SNDRV_DMA_TYPE_UNKNOWN, return -EINVAL);
 	snd_assert(substream != NULL, return -EINVAL);
 	runtime = substream->runtime;
-	snd_assert(runtime != NULL, return -EINVAL);	
+	snd_assert(runtime != NULL, return -EINVAL);
 
-	if (runtime->dma_area != NULL) {
+	if (runtime->dma_buffer_p) {
 		/* perphaps, we might free the large DMA memory region
 		   to save some space here, but the actual solution
 		   costs us less time */
-		if (runtime->dma_bytes >= size)
+		if (runtime->dma_buffer_p->bytes >= size) {
+			runtime->dma_bytes = size;
 			return 0;	/* ok, do not change */
+		}
 		snd_pcm_lib_free_pages(substream);
 	}
 	if (substream->dma_buffer.area != NULL && substream->dma_buffer.bytes >= size) {
-		dmab = substream->dma_buffer; /* use the pre-allocated buffer */
+		dmab = &substream->dma_buffer; /* use the pre-allocated buffer */
 	} else {
-		memset(&dmab, 0, sizeof(dmab)); /* allocate a new buffer */
-		if (snd_dma_alloc_pages(&substream->dma_device, size, &dmab) < 0)
+		dmab = kcalloc(1, sizeof(*dmab), GFP_KERNEL);
+		if (! dmab)
+			return -ENOMEM;
+		dmab->dev = substream->dma_buffer.dev;
+		if (snd_dma_alloc_pages(substream->dma_buffer.dev.type,
+					substream->dma_buffer.dev.dev,
+					size, dmab) < 0) {
+			kfree(dmab);
 			return -ENOMEM;
+		}
 	}
-	runtime->dma_area = dmab.area;
-	runtime->dma_addr = dmab.addr;
-	runtime->dma_private = dmab.private_data;
+	snd_pcm_set_runtime_buffer(substream, dmab);
 	runtime->dma_bytes = size;
 	return 1;			/* area was changed */
 }
@@ -360,34 +353,11 @@
 	snd_assert(runtime != NULL, return -EINVAL);
 	if (runtime->dma_area == NULL)
 		return 0;
-	if (runtime->dma_area != substream->dma_buffer.area) {
+	if (runtime->dma_buffer_p != &substream->dma_buffer) {
 		/* it's a newly allocated buffer.  release it now. */
-		struct snd_dma_buffer dmab;
-		memset(&dmab, 0, sizeof(dmab));
-		dmab.area = runtime->dma_area;
-		dmab.addr = runtime->dma_addr;
-		dmab.bytes = runtime->dma_bytes;
-		dmab.private_data = runtime->dma_private;
-		snd_dma_free_pages(&substream->dma_device, &dmab);
+		snd_dma_free_pages(runtime->dma_buffer_p);
+		kfree(runtime->dma_buffer_p);
 	}
-	runtime->dma_area = NULL;
-	runtime->dma_addr = 0UL;
-	runtime->dma_bytes = 0;
-	runtime->dma_private = NULL;
+	snd_pcm_set_runtime_buffer(substream, NULL);
 	return 0;
 }
-
-#ifndef MODULE
-
-/* format is: snd-pcm=preallocate_dma,maximum_substreams */
-
-static int __init alsa_pcm_setup(char *str)
-{
-	(void)(get_option(&str,&preallocate_dma) == 2 &&
-	       get_option(&str,&maximum_substreams) == 2);
-	return 1;
-}
-
-__setup("snd-pcm=", alsa_pcm_setup);
-
-#endif /* ifndef MODULE */
diff -Nru a/sound/core/pcm_misc.c b/sound/core/pcm_misc.c
--- a/sound/core/pcm_misc.c	2004-08-04 17:48:49 -07:00
+++ b/sound/core/pcm_misc.c	2004-08-04 17:48:49 -07:00
@@ -23,12 +23,169 @@
 #include <linux/time.h>
 #include <sound/core.h>
 #include <sound/pcm.h>
-#define bswap_16 swab16
-#define bswap_32 swab32
-#define bswap_64 swab64
 #define SND_PCM_FORMAT_UNKNOWN (-1)
-#define snd_enum_to_int(v) (v)
-#define snd_int_to_enum(v) (v)
+
+struct pcm_format_data {
+	char width;	/* bit width */
+	char phys;	/* physical bit width */
+	char le;	/* 0 = big-endian, 1 = little-endian, -1 = others */
+	char signd;	/* 0 = unsigned, 1 = signed, -1 = others */
+	unsigned char silence[8];	/* silence data to fill */
+};
+
+static struct pcm_format_data pcm_formats[SNDRV_PCM_FORMAT_LAST+1] = {
+	[SNDRV_PCM_FORMAT_S8] = {
+		.width = 8, .phys = 8, .le = -1, .signd = 1,
+		.silence = {},
+	},
+	[SNDRV_PCM_FORMAT_U8] = {
+		.width = 8, .phys = 8, .le = -1, .signd = 0,
+		.silence = { 0x80 },
+	},
+	[SNDRV_PCM_FORMAT_S16_LE] = {
+		.width = 16, .phys = 16, .le = 1, .signd = 1,
+		.silence = {},
+	},
+	[SNDRV_PCM_FORMAT_S16_BE] = {
+		.width = 16, .phys = 16, .le = 0, .signd = 1,
+		.silence = {},
+	},
+	[SNDRV_PCM_FORMAT_U16_LE] = {
+		.width = 16, .phys = 16, .le = 1, .signd = 0,
+		.silence = { 0x00, 0x80 },
+	},
+	[SNDRV_PCM_FORMAT_U16_BE] = {
+		.width = 16, .phys = 16, .le = 0, .signd = 0,
+		.silence = { 0x80, 0x00 },
+	},
+	[SNDRV_PCM_FORMAT_S24_LE] = {
+		.width = 24, .phys = 32, .le = 1, .signd = 1,
+		.silence = {},
+	},
+	[SNDRV_PCM_FORMAT_S24_BE] = {
+		.width = 24, .phys = 32, .le = 0, .signd = 1,
+		.silence = {},
+	},
+	[SNDRV_PCM_FORMAT_U24_LE] = {
+		.width = 24, .phys = 32, .le = 1, .signd = 0,
+		.silence = { 0x00, 0x00, 0x80 },
+	},
+	[SNDRV_PCM_FORMAT_U24_BE] = {
+		.width = 24, .phys = 32, .le = 0, .signd = 0,
+		.silence = { 0x80, 0x00, 0x00 },
+	},
+	[SNDRV_PCM_FORMAT_S32_LE] = {
+		.width = 32, .phys = 32, .le = 1, .signd = 1,
+		.silence = {},
+	},
+	[SNDRV_PCM_FORMAT_S32_BE] = {
+		.width = 32, .phys = 32, .le = 0, .signd = 1,
+		.silence = {},
+	},
+	[SNDRV_PCM_FORMAT_U32_LE] = {
+		.width = 32, .phys = 32, .le = 1, .signd = 0,
+		.silence = { 0x00, 0x00, 0x00, 0x80 },
+	},
+	[SNDRV_PCM_FORMAT_U32_BE] = {
+		.width = 32, .phys = 32, .le = 0, .signd = 0,
+		.silence = { 0x80, 0x00, 0x00, 0x00 },
+	},
+	[SNDRV_PCM_FORMAT_FLOAT_LE] = {
+		.width = 32, .phys = 32, .le = 1, .signd = -1,
+		.silence = {},
+	},
+	[SNDRV_PCM_FORMAT_FLOAT_BE] = {
+		.width = 32, .phys = 32, .le = 0, .signd = -1,
+		.silence = {},
+	},
+	[SNDRV_PCM_FORMAT_FLOAT64_LE] = {
+		.width = 64, .phys = 64, .le = 1, .signd = -1,
+		.silence = {},
+	},
+	[SNDRV_PCM_FORMAT_FLOAT64_BE] = {
+		.width = 64, .phys = 64, .le = 0, .signd = -1,
+		.silence = {},
+	},
+	[SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE] = {
+		.width = 32, .phys = 32, .le = 1, .signd = -1,
+		.silence = {},
+	},
+	[SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE] = {
+		.width = 32, .phys = 32, .le = 0, .signd = -1,
+		.silence = {},
+	},
+	[SNDRV_PCM_FORMAT_MU_LAW] = {
+		.width = 8, .phys = 8, .le = -1, .signd = -1,
+		.silence = { 0x7f },
+	},
+	[SNDRV_PCM_FORMAT_A_LAW] = {
+		.width = 8, .phys = 8, .le = -1, .signd = -1,
+		.silence = { 0x55 },
+	},
+	[SNDRV_PCM_FORMAT_IMA_ADPCM] = {
+		.width = 4, .phys = 4, .le = -1, .signd = -1,
+		.silence = {},
+	},
+	/* FIXME: the following three formats are not defined properly yet */
+	[SNDRV_PCM_FORMAT_MPEG] = {
+		.le = -1, .signd = -1,
+	},
+	[SNDRV_PCM_FORMAT_GSM] = {
+		.le = -1, .signd = -1,
+	},
+	[SNDRV_PCM_FORMAT_SPECIAL] = {
+		.le = -1, .signd = -1,
+	},
+	[SNDRV_PCM_FORMAT_S24_3LE] = {
+		.width = 24, .phys = 24, .le = 1, .signd = 1,
+		.silence = {},
+	},
+	[SNDRV_PCM_FORMAT_S24_3BE] = {
+		.width = 24, .phys = 24, .le = 0, .signd = 1,
+		.silence = {},
+	},
+	[SNDRV_PCM_FORMAT_U24_3LE] = {
+		.width = 24, .phys = 24, .le = 1, .signd = 0,
+		.silence = { 0x00, 0x00, 0x80 },
+	},
+	[SNDRV_PCM_FORMAT_U24_3BE] = {
+		.width = 24, .phys = 24, .le = 0, .signd = 0,
+		.silence = { 0x80, 0x00, 0x00 },
+	},
+	[SNDRV_PCM_FORMAT_S20_3LE] = {
+		.width = 20, .phys = 24, .le = 1, .signd = 1,
+		.silence = {},
+	},
+	[SNDRV_PCM_FORMAT_S20_3BE] = {
+		.width = 20, .phys = 24, .le = 0, .signd = 1,
+		.silence = {},
+	},
+	[SNDRV_PCM_FORMAT_U20_3LE] = {
+		.width = 20, .phys = 24, .le = 1, .signd = 0,
+		.silence = { 0x00, 0x00, 0x08 },
+	},
+	[SNDRV_PCM_FORMAT_U20_3BE] = {
+		.width = 20, .phys = 24, .le = 0, .signd = 0,
+		.silence = { 0x08, 0x00, 0x00 },
+	},
+	[SNDRV_PCM_FORMAT_S18_3LE] = {
+		.width = 18, .phys = 24, .le = 1, .signd = 1,
+		.silence = {},
+	},
+	[SNDRV_PCM_FORMAT_S18_3BE] = {
+		.width = 18, .phys = 24, .le = 0, .signd = 1,
+		.silence = {},
+	},
+	[SNDRV_PCM_FORMAT_U18_3LE] = {
+		.width = 18, .phys = 24, .le = 1, .signd = 0,
+		.silence = { 0x00, 0x00, 0x02 },
+	},
+	[SNDRV_PCM_FORMAT_U18_3BE] = {
+		.width = 18, .phys = 24, .le = 0, .signd = 0,
+		.silence = { 0x02, 0x00, 0x00 },
+	},
+};
+
 
 /**
  * snd_pcm_format_signed - Check the PCM format is signed linear
@@ -39,38 +196,12 @@
  */
 int snd_pcm_format_signed(snd_pcm_format_t format)
 {
-	switch (snd_enum_to_int(format)) {
-	case SNDRV_PCM_FORMAT_S8:
-	case SNDRV_PCM_FORMAT_S16_LE:
-	case SNDRV_PCM_FORMAT_S16_BE:
-	case SNDRV_PCM_FORMAT_S24_LE:
-	case SNDRV_PCM_FORMAT_S24_BE:
-	case SNDRV_PCM_FORMAT_S32_LE:
-	case SNDRV_PCM_FORMAT_S32_BE:
-	case SNDRV_PCM_FORMAT_S24_3LE:
-	case SNDRV_PCM_FORMAT_S24_3BE:
-	case SNDRV_PCM_FORMAT_S20_3LE:
-	case SNDRV_PCM_FORMAT_S20_3BE:
-	case SNDRV_PCM_FORMAT_S18_3LE:
-	case SNDRV_PCM_FORMAT_S18_3BE:
-		return 1;
-	case SNDRV_PCM_FORMAT_U8:
-	case SNDRV_PCM_FORMAT_U16_LE:
-	case SNDRV_PCM_FORMAT_U16_BE:
-	case SNDRV_PCM_FORMAT_U24_LE:
-	case SNDRV_PCM_FORMAT_U24_BE:
-	case SNDRV_PCM_FORMAT_U32_LE:
-	case SNDRV_PCM_FORMAT_U32_BE:
-	case SNDRV_PCM_FORMAT_U24_3LE:
-	case SNDRV_PCM_FORMAT_U24_3BE:
-	case SNDRV_PCM_FORMAT_U20_3LE:
-	case SNDRV_PCM_FORMAT_U20_3BE:
-	case SNDRV_PCM_FORMAT_U18_3LE:
-	case SNDRV_PCM_FORMAT_U18_3BE:
-		return 0;
-	default:
+	int val;
+	if (format < 0 || format > SNDRV_PCM_FORMAT_LAST)
 		return -EINVAL;
-	}
+	if ((val = pcm_formats[format].signd) < 0)
+		return -EINVAL;
+	return val;
 }
 
 /**
@@ -110,42 +241,12 @@
  */
 int snd_pcm_format_little_endian(snd_pcm_format_t format)
 {
-	switch (snd_enum_to_int(format)) {
-	case SNDRV_PCM_FORMAT_S16_LE:
-	case SNDRV_PCM_FORMAT_U16_LE:
-	case SNDRV_PCM_FORMAT_S24_LE:
-	case SNDRV_PCM_FORMAT_U24_LE:
-	case SNDRV_PCM_FORMAT_S32_LE:
-	case SNDRV_PCM_FORMAT_U32_LE:
-	case SNDRV_PCM_FORMAT_FLOAT_LE:
-	case SNDRV_PCM_FORMAT_FLOAT64_LE:
-	case SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE:
-	case SNDRV_PCM_FORMAT_S24_3LE:
-	case SNDRV_PCM_FORMAT_S20_3LE:
-	case SNDRV_PCM_FORMAT_S18_3LE:
-	case SNDRV_PCM_FORMAT_U24_3LE:
-	case SNDRV_PCM_FORMAT_U20_3LE:
-	case SNDRV_PCM_FORMAT_U18_3LE:
-		return 1;
-	case SNDRV_PCM_FORMAT_S16_BE:
-	case SNDRV_PCM_FORMAT_U16_BE:
-	case SNDRV_PCM_FORMAT_S24_BE:
-	case SNDRV_PCM_FORMAT_U24_BE:
-	case SNDRV_PCM_FORMAT_S32_BE:
-	case SNDRV_PCM_FORMAT_U32_BE:
-	case SNDRV_PCM_FORMAT_FLOAT_BE:
-	case SNDRV_PCM_FORMAT_FLOAT64_BE:
-	case SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE:
-	case SNDRV_PCM_FORMAT_S24_3BE:
-	case SNDRV_PCM_FORMAT_S20_3BE:
-	case SNDRV_PCM_FORMAT_S18_3BE:
-	case SNDRV_PCM_FORMAT_U24_3BE:
-	case SNDRV_PCM_FORMAT_U20_3BE:
-	case SNDRV_PCM_FORMAT_U18_3BE:
-		return 0;
-	default:
+	int val;
+	if (format < 0 || format > SNDRV_PCM_FORMAT_LAST)
 		return -EINVAL;
-	}
+	if ((val = pcm_formats[format].le) < 0)
+		return -EINVAL;
+	return val;
 }
 
 /**
@@ -190,55 +291,12 @@
  */
 int snd_pcm_format_width(snd_pcm_format_t format)
 {
-	switch (snd_enum_to_int(format)) {
-	case SNDRV_PCM_FORMAT_S8:
-	case SNDRV_PCM_FORMAT_U8:
-		return 8;
-	case SNDRV_PCM_FORMAT_S16_LE:
-	case SNDRV_PCM_FORMAT_S16_BE:
-	case SNDRV_PCM_FORMAT_U16_LE:
-	case SNDRV_PCM_FORMAT_U16_BE:
-		return 16;
-	case SNDRV_PCM_FORMAT_S18_3LE:
-	case SNDRV_PCM_FORMAT_S18_3BE:
-	case SNDRV_PCM_FORMAT_U18_3LE:
-	case SNDRV_PCM_FORMAT_U18_3BE:
-		return 18;
-	case SNDRV_PCM_FORMAT_S20_3LE:
-	case SNDRV_PCM_FORMAT_S20_3BE:
-	case SNDRV_PCM_FORMAT_U20_3LE:
-	case SNDRV_PCM_FORMAT_U20_3BE:
-		return 20;
-	case SNDRV_PCM_FORMAT_S24_LE:
-	case SNDRV_PCM_FORMAT_S24_BE:
-	case SNDRV_PCM_FORMAT_U24_LE:
-	case SNDRV_PCM_FORMAT_U24_BE:
-	case SNDRV_PCM_FORMAT_S24_3LE:
-	case SNDRV_PCM_FORMAT_S24_3BE:
-	case SNDRV_PCM_FORMAT_U24_3LE:
-	case SNDRV_PCM_FORMAT_U24_3BE:
-		return 24;
-	case SNDRV_PCM_FORMAT_S32_LE:
-	case SNDRV_PCM_FORMAT_S32_BE:
-	case SNDRV_PCM_FORMAT_U32_LE:
-	case SNDRV_PCM_FORMAT_U32_BE:
-	case SNDRV_PCM_FORMAT_FLOAT_LE:
-	case SNDRV_PCM_FORMAT_FLOAT_BE:
-		return 32;
-	case SNDRV_PCM_FORMAT_FLOAT64_LE:
-	case SNDRV_PCM_FORMAT_FLOAT64_BE:
-		return 64;
-	case SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE:
-	case SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE:
-		return 32;
-	case SNDRV_PCM_FORMAT_MU_LAW:
-	case SNDRV_PCM_FORMAT_A_LAW:
-		return 8;
-	case SNDRV_PCM_FORMAT_IMA_ADPCM:
-		return 4;
-	default:
+	int val;
+	if (format < 0 || format > SNDRV_PCM_FORMAT_LAST)
 		return -EINVAL;
-	}
+	if ((val = pcm_formats[format].width) == 0)
+		return -EINVAL;
+	return val;
 }
 
 /**
@@ -250,52 +308,12 @@
  */
 int snd_pcm_format_physical_width(snd_pcm_format_t format)
 {
-	switch (snd_enum_to_int(format)) {
-	case SNDRV_PCM_FORMAT_S8:
-	case SNDRV_PCM_FORMAT_U8:
-		return 8;
-	case SNDRV_PCM_FORMAT_S16_LE:
-	case SNDRV_PCM_FORMAT_S16_BE:
-	case SNDRV_PCM_FORMAT_U16_LE:
-	case SNDRV_PCM_FORMAT_U16_BE:
-		return 16;
-	case SNDRV_PCM_FORMAT_S18_3LE:
-	case SNDRV_PCM_FORMAT_S18_3BE:
-	case SNDRV_PCM_FORMAT_U18_3LE:
-	case SNDRV_PCM_FORMAT_U18_3BE:
-	case SNDRV_PCM_FORMAT_S20_3LE:
-	case SNDRV_PCM_FORMAT_S20_3BE:
-	case SNDRV_PCM_FORMAT_U20_3LE:
-	case SNDRV_PCM_FORMAT_U20_3BE:
-	case SNDRV_PCM_FORMAT_S24_3LE:
-	case SNDRV_PCM_FORMAT_S24_3BE:
-	case SNDRV_PCM_FORMAT_U24_3LE:
-	case SNDRV_PCM_FORMAT_U24_3BE:
-		return 24;
-	case SNDRV_PCM_FORMAT_S24_LE:
-	case SNDRV_PCM_FORMAT_S24_BE:
-	case SNDRV_PCM_FORMAT_U24_LE:
-	case SNDRV_PCM_FORMAT_U24_BE:
-	case SNDRV_PCM_FORMAT_S32_LE:
-	case SNDRV_PCM_FORMAT_S32_BE:
-	case SNDRV_PCM_FORMAT_U32_LE:
-	case SNDRV_PCM_FORMAT_U32_BE:
-	case SNDRV_PCM_FORMAT_FLOAT_LE:
-	case SNDRV_PCM_FORMAT_FLOAT_BE:
-	case SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE:
-	case SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE:
-		return 32;
-	case SNDRV_PCM_FORMAT_FLOAT64_LE:
-	case SNDRV_PCM_FORMAT_FLOAT64_BE:
-		return 64;
-	case SNDRV_PCM_FORMAT_MU_LAW:
-	case SNDRV_PCM_FORMAT_A_LAW:
-		return 8;
-	case SNDRV_PCM_FORMAT_IMA_ADPCM:
-		return 4;
-	default:
+	int val;
+	if (format < 0 || format > SNDRV_PCM_FORMAT_LAST)
 		return -EINVAL;
-	}
+	if ((val = pcm_formats[format].phys) == 0)
+		return -EINVAL;
+	return val;
 }
 
 /**
@@ -307,216 +325,25 @@
  */
 ssize_t snd_pcm_format_size(snd_pcm_format_t format, size_t samples)
 {
-	switch (snd_enum_to_int(format)) {
-	case SNDRV_PCM_FORMAT_S8:
-	case SNDRV_PCM_FORMAT_U8:
-		return samples;
-	case SNDRV_PCM_FORMAT_S16_LE:
-	case SNDRV_PCM_FORMAT_S16_BE:
-	case SNDRV_PCM_FORMAT_U16_LE:
-	case SNDRV_PCM_FORMAT_U16_BE:
-		return samples * 2;
-	case SNDRV_PCM_FORMAT_S18_3LE:
-	case SNDRV_PCM_FORMAT_S18_3BE:
-	case SNDRV_PCM_FORMAT_U18_3LE:
-	case SNDRV_PCM_FORMAT_U18_3BE:
-	case SNDRV_PCM_FORMAT_S20_3LE:
-	case SNDRV_PCM_FORMAT_S20_3BE:
-	case SNDRV_PCM_FORMAT_U20_3LE:
-	case SNDRV_PCM_FORMAT_U20_3BE:
-	case SNDRV_PCM_FORMAT_S24_3LE:
-	case SNDRV_PCM_FORMAT_S24_3BE:
-	case SNDRV_PCM_FORMAT_U24_3LE:
-	case SNDRV_PCM_FORMAT_U24_3BE:
-		return samples * 3;
-	case SNDRV_PCM_FORMAT_S24_LE:
-	case SNDRV_PCM_FORMAT_S24_BE:
-	case SNDRV_PCM_FORMAT_U24_LE:
-	case SNDRV_PCM_FORMAT_U24_BE:
-	case SNDRV_PCM_FORMAT_S32_LE:
-	case SNDRV_PCM_FORMAT_S32_BE:
-	case SNDRV_PCM_FORMAT_U32_LE:
-	case SNDRV_PCM_FORMAT_U32_BE:
-	case SNDRV_PCM_FORMAT_FLOAT_LE:
-	case SNDRV_PCM_FORMAT_FLOAT_BE:
-		return samples * 4;
-	case SNDRV_PCM_FORMAT_FLOAT64_LE:
-	case SNDRV_PCM_FORMAT_FLOAT64_BE:
-		return samples * 8;
-	case SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE:
-	case SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE:
-		return samples * 4;
-	case SNDRV_PCM_FORMAT_MU_LAW:
-	case SNDRV_PCM_FORMAT_A_LAW:
-		return samples;
-	case SNDRV_PCM_FORMAT_IMA_ADPCM:
-		if (samples & 1)
-			return -EINVAL;
-		return samples / 2;
-	default:
+	int phys_width = snd_pcm_format_physical_width(format);
+	if (phys_width < 0)
 		return -EINVAL;
-	}
+	return samples * phys_width / 8;
 }
 
 /**
- * snd_pcm_format_silence_64 - return the silent data in 64bit integer
+ * snd_pcm_format_silence_64 - return the silent data in 8 bytes array
  * @format: the format to check
  *
- * Returns the silent data in 64bit integer for the given format.
+ * Returns the format pattern to fill or NULL if error.
  */
-u_int64_t snd_pcm_format_silence_64(snd_pcm_format_t format)
+const unsigned char *snd_pcm_format_silence_64(snd_pcm_format_t format)
 {
-	switch (snd_enum_to_int(format)) {
-	case SNDRV_PCM_FORMAT_S8:
-	case SNDRV_PCM_FORMAT_S16_LE:
-	case SNDRV_PCM_FORMAT_S16_BE:
-	case SNDRV_PCM_FORMAT_S24_LE:
-	case SNDRV_PCM_FORMAT_S24_BE:
-	case SNDRV_PCM_FORMAT_S32_LE:
-	case SNDRV_PCM_FORMAT_S32_BE:
-	case SNDRV_PCM_FORMAT_S24_3LE:
-	case SNDRV_PCM_FORMAT_S24_3BE:
-	case SNDRV_PCM_FORMAT_S20_3LE:
-	case SNDRV_PCM_FORMAT_S20_3BE:
-	case SNDRV_PCM_FORMAT_S18_3LE:
-	case SNDRV_PCM_FORMAT_S18_3BE:
-		return 0;
-	case SNDRV_PCM_FORMAT_U8:
-		return 0x8080808080808080ULL;
-#ifdef SNDRV_LITTLE_ENDIAN
-	case SNDRV_PCM_FORMAT_U16_LE:
-		return 0x8000800080008000ULL;
-	case SNDRV_PCM_FORMAT_U24_LE:
-		return 0x0080000000800000ULL;
-	case SNDRV_PCM_FORMAT_U32_LE:
-		return 0x8000000080000000ULL;
-	case SNDRV_PCM_FORMAT_U16_BE:
-		return 0x0080008000800080ULL;
-	case SNDRV_PCM_FORMAT_U24_BE:
-		return 0x0000800000008000ULL;
-	case SNDRV_PCM_FORMAT_U32_BE:
-		return 0x0000008000000080ULL;
-	case SNDRV_PCM_FORMAT_U24_3LE:
-		return 0x0000800000800000ULL;
-	case SNDRV_PCM_FORMAT_U24_3BE:
-		return 0x0080000080000080ULL;
-	case SNDRV_PCM_FORMAT_U20_3LE:
-		return 0x0000080000080000ULL;
-	case SNDRV_PCM_FORMAT_U20_3BE:
-		return 0x0008000008000008ULL;
-	case SNDRV_PCM_FORMAT_U18_3LE:
-		return 0x0000020000020000ULL;
-	case SNDRV_PCM_FORMAT_U18_3BE:
-		return 0x0002000002000002ULL;
-#else
-	case SNDRV_PCM_FORMAT_U16_LE:
-		return 0x0080008000800080ULL;
-	case SNDRV_PCM_FORMAT_U24_LE:
-		return 0x0000800000008000ULL;
-	case SNDRV_PCM_FORMAT_U32_LE:
-		return 0x0000008000000080ULL;
-	case SNDRV_PCM_FORMAT_U16_BE:
-		return 0x8000800080008000ULL;
-	case SNDRV_PCM_FORMAT_U24_BE:
-		return 0x0080000000800000ULL;
-	case SNDRV_PCM_FORMAT_U32_BE:
-		return 0x8000000080000000ULL;
-	case SNDRV_PCM_FORMAT_U24_3LE:
-		return 0x0080000080000080ULL;
-	case SNDRV_PCM_FORMAT_U24_3BE:
-		return 0x0000800000800000ULL;
-	case SNDRV_PCM_FORMAT_U20_3LE:
-		return 0x0008000008000008ULL;
-	case SNDRV_PCM_FORMAT_U20_3BE:
-		return 0x0000080000080000ULL;
-	case SNDRV_PCM_FORMAT_U18_3LE:
-		return 0x0002000002000002ULL;
-	case SNDRV_PCM_FORMAT_U18_3BE:
-		return 0x0000020000020000ULL;
-#endif
-	case SNDRV_PCM_FORMAT_FLOAT_LE:
-	{
-		union {
-			float f;
-			u_int32_t i;
-		} u;
-		u.f = 0.0;
-#ifdef SNDRV_LITTLE_ENDIAN
-		return u.i;
-#else
-		return bswap_32(u.i);
-#endif
-	}
-	case SNDRV_PCM_FORMAT_FLOAT64_LE:
-	{
-		union {
-			double f;
-			u_int64_t i;
-		} u;
-		u.f = 0.0;
-#ifdef SNDRV_LITTLE_ENDIAN
-		return u.i;
-#else
-		return bswap_64(u.i);
-#endif
-	}
-	case SNDRV_PCM_FORMAT_FLOAT_BE:		
-	{
-		union {
-			float f;
-			u_int32_t i;
-		} u;
-		u.f = 0.0;
-#ifdef SNDRV_LITTLE_ENDIAN
-		return bswap_32(u.i);
-#else
-		return u.i;
-#endif
-	}
-	case SNDRV_PCM_FORMAT_FLOAT64_BE:
-	{
-		union {
-			double f;
-			u_int64_t i;
-		} u;
-		u.f = 0.0;
-#ifdef SNDRV_LITTLE_ENDIAN
-		return bswap_64(u.i);
-#else
-		return u.i;
-#endif
-	}
-	case SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE:
-	case SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE:
-		return 0;	
-	case SNDRV_PCM_FORMAT_MU_LAW:
-		return 0x7f7f7f7f7f7f7f7fULL;
-	case SNDRV_PCM_FORMAT_A_LAW:
-		return 0x5555555555555555ULL;
-	case SNDRV_PCM_FORMAT_IMA_ADPCM:	/* special case */
-	case SNDRV_PCM_FORMAT_MPEG:
-	case SNDRV_PCM_FORMAT_GSM:
-	case SNDRV_PCM_FORMAT_SPECIAL:
-		return 0;
-	default:
-		return -EINVAL;
-	}
-	return 0;
-}
-
-u_int32_t snd_pcm_format_silence_32(snd_pcm_format_t format)
-{
-	return (u_int32_t)snd_pcm_format_silence_64(format);
-}
-
-u_int16_t snd_pcm_format_silence_16(snd_pcm_format_t format)
-{
-	return (u_int16_t)snd_pcm_format_silence_64(format);
-}
-
-u_int8_t snd_pcm_format_silence(snd_pcm_format_t format)
-{
-	return (u_int8_t)snd_pcm_format_silence_64(format);
+	if (format < 0 || format > SNDRV_PCM_FORMAT_LAST)
+		return NULL;
+	if (! pcm_formats[format].phys)
+		return NULL;
+	return pcm_formats[format].silence;
 }
 
 /**
@@ -531,99 +358,73 @@
  */
 int snd_pcm_format_set_silence(snd_pcm_format_t format, void *data, unsigned int samples)
 {
+	int width;
+	unsigned char *dst, *pat;
+
+	if (format < 0 || format > SNDRV_PCM_FORMAT_LAST)
+		return -EINVAL;
 	if (samples == 0)
 		return 0;
-	switch (snd_pcm_format_width(format)) {
-	case 4: {
-		u_int8_t silence = snd_pcm_format_silence_64(format);
-		unsigned int samples1;
-		if (samples % 2 != 0)
-			return -EINVAL;
-		samples1 = samples / 2;
-		memset(data, silence, samples1);
-		break;
+	width = pcm_formats[format].phys; /* physical width */
+	pat = pcm_formats[format].silence;
+	if (! width)
+		return -EINVAL;
+	/* signed or 1 byte data */
+	if (pcm_formats[format].signd == 1 || width <= 8) {
+		unsigned int bytes = samples * width / 8;
+		memset(data, *pat, bytes);
+		return 0;
 	}
-	case 8: {
-		u_int8_t silence = snd_pcm_format_silence_64(format);
-		memset(data, silence, samples);
-		break;
+	/* non-zero samples, fill using a loop */
+	width /= 8;
+	dst = data;
+#if 0
+	while (samples--) {
+		memcpy(dst, pat, width);
+		dst += width;
 	}
-	case 16: {
-		u_int16_t silence = snd_pcm_format_silence_64(format);
-		if (! silence)
-			memset(data, 0, samples * 2);
-		else {
-			u_int16_t *data16 = data;
-			while (samples-- > 0)
-				*data16++ = silence;
+#else
+	/* a bit optimization for constant width */
+	switch (width) {
+	case 2:
+		while (samples--) {
+			memcpy(dst, pat, 2);
+			dst += 2;
 		}
 		break;
-	}
-	case 24: {
-		u_int32_t silence = snd_pcm_format_silence_64(format);
-		if (! silence)
-			memset(data, 0, samples * 3);
-		else {
-			while (samples-- > 0) {
-				u_int8_t *data8 = data;
-#ifdef SNDRV_LITTLE_ENDIAN
-				*data8++ = silence >> 0;
-				*data8++ = silence >> 8;
-				*data8++ = silence >> 16;
-#else
-				*data8++ = silence >> 16;
-				*data8++ = silence >> 8;
-				*data8++ = silence >> 0;
-#endif
-			}
+	case 3:
+		while (samples--) {
+			memcpy(dst, pat, 3);
+			dst += 3;
 		}
 		break;
-	}
-	case 32: {
-		u_int32_t silence = snd_pcm_format_silence_64(format);
-		if (! silence)
-			memset(data, 0, samples * 4);
-		else {
-			u_int32_t *data32 = data;
-			while (samples-- > 0)
-				*data32++ = silence;
+	case 4:
+		while (samples--) {
+			memcpy(dst, pat, 4);
+			dst += 4;
 		}
 		break;
-	}
-	case 64: {
-		u_int64_t silence = snd_pcm_format_silence_64(format);
-		if (! silence)
-			memset(data, 0, samples * 8);
-		else {
-			u_int64_t *data64 = data;
-			while (samples-- > 0)
-				*data64++ = silence;
+	case 8:
+		while (samples--) {
+			memcpy(dst, pat, 8);
+			dst += 8;
 		}
 		break;
 	}
-	default:
-		return -EINVAL;
-	}
+#endif
 	return 0;
 }
 
-static int linear_formats[4*2*2] = {
-	SNDRV_PCM_FORMAT_S8,
-	SNDRV_PCM_FORMAT_S8,
-	SNDRV_PCM_FORMAT_U8,
-	SNDRV_PCM_FORMAT_U8,
-	SNDRV_PCM_FORMAT_S16_LE,
-	SNDRV_PCM_FORMAT_S16_BE,
-	SNDRV_PCM_FORMAT_U16_LE,
-	SNDRV_PCM_FORMAT_U16_BE,
-	SNDRV_PCM_FORMAT_S24_LE,
-	SNDRV_PCM_FORMAT_S24_BE,
-	SNDRV_PCM_FORMAT_U24_LE,
-	SNDRV_PCM_FORMAT_U24_BE,
-	SNDRV_PCM_FORMAT_S32_LE,
-	SNDRV_PCM_FORMAT_S32_BE,
-	SNDRV_PCM_FORMAT_U32_LE,
-	SNDRV_PCM_FORMAT_U32_BE
+/* [width][unsigned][bigendian] */
+static int linear_formats[4][2][2] = {
+	{{ SNDRV_PCM_FORMAT_S8, SNDRV_PCM_FORMAT_S8},
+	 { SNDRV_PCM_FORMAT_U8, SNDRV_PCM_FORMAT_U8}},
+	{{SNDRV_PCM_FORMAT_S16_LE, SNDRV_PCM_FORMAT_S16_BE},
+	 {SNDRV_PCM_FORMAT_U16_LE, SNDRV_PCM_FORMAT_U16_BE}},
+	{{SNDRV_PCM_FORMAT_S24_LE, SNDRV_PCM_FORMAT_S24_BE},
+	 {SNDRV_PCM_FORMAT_U24_LE, SNDRV_PCM_FORMAT_U24_BE}},
+	{{SNDRV_PCM_FORMAT_S32_LE, SNDRV_PCM_FORMAT_S32_BE},
+	 {SNDRV_PCM_FORMAT_U32_LE, SNDRV_PCM_FORMAT_U32_BE}}
 };
 
 /**
@@ -636,23 +437,12 @@
  */
 snd_pcm_format_t snd_pcm_build_linear_format(int width, int unsignd, int big_endian)
 {
-	switch (width) {
-	case 8:
-		width = 0;
-		break;
-	case 16:
-		width = 1;
-		break;
-	case 24:
-		width = 2;
-		break;
-	case 32:
-		width = 3;
-		break;
-	default:
+	if (width & 7)
 		return SND_PCM_FORMAT_UNKNOWN;
-	}
-	return snd_int_to_enum(((int(*)[2][2])linear_formats)[width][!!unsignd][!!big_endian]);
+	width = (width / 8) - 1;
+	if (width < 0 || width >= 4)
+		return SND_PCM_FORMAT_UNKNOWN;
+	return linear_formats[width][!!unsignd][!!big_endian];
 }
 
 /**
diff -Nru a/sound/core/pcm_native.c b/sound/core/pcm_native.c
--- a/sound/core/pcm_native.c	2004-08-04 17:48:48 -07:00
+++ b/sound/core/pcm_native.c	2004-08-04 17:48:48 -07:00
@@ -21,6 +21,7 @@
 
 #include <sound/driver.h>
 #include <linux/mm.h>
+#include <linux/smp_lock.h>
 #include <linux/file.h>
 #include <linux/slab.h>
 #include <linux/time.h>
@@ -64,6 +65,7 @@
  */
 
 rwlock_t snd_pcm_link_rwlock = RW_LOCK_UNLOCKED;
+static DECLARE_RWSEM(snd_pcm_link_rwsem);
 
 
 static inline mm_segment_t snd_enter_user(void)
@@ -304,13 +306,25 @@
 
 static int snd_pcm_hw_refine_user(snd_pcm_substream_t * substream, snd_pcm_hw_params_t __user * _params)
 {
-	snd_pcm_hw_params_t params;
+	snd_pcm_hw_params_t *params;
 	int err;
-	if (copy_from_user(&params, _params, sizeof(params)))
-		return -EFAULT;
-	err = snd_pcm_hw_refine(substream, &params);
-	if (copy_to_user(_params, &params, sizeof(params)))
-		return -EFAULT;
+
+	params = kmalloc(sizeof(*params), GFP_KERNEL);
+	if (!params) {
+		err = -ENOMEM;
+		goto out;
+	}
+	if (copy_from_user(params, _params, sizeof(*params))) {
+		err = -EFAULT;
+		goto out;
+	}
+	err = snd_pcm_hw_refine(substream, params);
+	if (copy_to_user(_params, params, sizeof(*params))) {
+		if (!err)
+			err = -EFAULT;
+	}
+out:
+	kfree(params);
 	return err;
 }
 
@@ -408,13 +422,25 @@
 
 static int snd_pcm_hw_params_user(snd_pcm_substream_t * substream, snd_pcm_hw_params_t __user * _params)
 {
-	snd_pcm_hw_params_t params;
+	snd_pcm_hw_params_t *params;
 	int err;
-	if (copy_from_user(&params, _params, sizeof(params)))
-		return -EFAULT;
-	err = snd_pcm_hw_params(substream, &params);
-	if (copy_to_user(_params, &params, sizeof(params)))
-		return -EFAULT;
+
+	params = kmalloc(sizeof(*params), GFP_KERNEL);
+	if (!params) {
+		err = -ENOMEM;
+		goto out;
+	}
+	if (copy_from_user(params, _params, sizeof(*params))) {
+		err = -EFAULT;
+		goto out;
+	}
+	err = snd_pcm_hw_params(substream, params);
+	if (copy_to_user(_params, params, sizeof(*params))) {
+		if (!err)
+			err = -EFAULT;
+	}
+out:
+	kfree(params);
 	return err;
 }
 
@@ -620,7 +646,7 @@
  */
 static int snd_pcm_action_group(struct action_ops *ops,
 				snd_pcm_substream_t *substream,
-				int state, int atomic_only)
+				int state, int do_lock)
 {
 	struct list_head *pos;
 	snd_pcm_substream_t *s = NULL;
@@ -628,9 +654,7 @@
 
 	snd_pcm_group_for_each(pos, substream) {
 		s = snd_pcm_group_substream_entry(pos);
-		if (atomic_only && (s->pcm->info_flags & SNDRV_PCM_INFO_NONATOMIC_OPS))
-			continue;
-		if (s != substream)
+		if (do_lock && s != substream)
 			spin_lock(&s->self_group.lock);
 		res = ops->pre_action(s, state);
 		if (res < 0)
@@ -639,8 +663,6 @@
 	if (res >= 0) {
 		snd_pcm_group_for_each(pos, substream) {
 			s = snd_pcm_group_substream_entry(pos);
-			if (atomic_only && (s->pcm->info_flags & SNDRV_PCM_INFO_NONATOMIC_OPS))
-				continue;
 			err = ops->do_action(s, state);
 			if (err < 0) {
 				if (res == 0)
@@ -648,17 +670,15 @@
 			} else {
 				ops->post_action(s, state);
 			}
-			if (s != substream)
+			if (do_lock && s != substream)
 				spin_unlock(&s->self_group.lock);
 		}
-	} else {
+	} else if (do_lock) {
 		snd_pcm_substream_t *s1;
 		/* unlock all streams */
 		snd_pcm_group_for_each(pos, substream) {
 			s1 = snd_pcm_group_substream_entry(pos);
-			if (atomic_only && (s1->pcm->info_flags & SNDRV_PCM_INFO_NONATOMIC_OPS))
-				;
-			else if (s1 != substream)
+			if (s1 != substream)
 				spin_unlock(&s1->self_group.lock);
 			if (s1 == s)	/* end */
 				break;
@@ -688,8 +708,6 @@
 
 /*
  *  Note: call with stream lock
- *
- * NB2: this won't handle the non-atomic callbacks
  */
 static int snd_pcm_action(struct action_ops *ops,
 			  snd_pcm_substream_t *substream,
@@ -703,7 +721,7 @@
 			spin_lock(&substream->group->lock);
 			spin_lock(&substream->self_group.lock);
 		}
-		res = snd_pcm_action_group(ops, substream, state, 0);
+		res = snd_pcm_action_group(ops, substream, state, 1);
 		spin_unlock(&substream->group->lock);
 	} else {
 		res = snd_pcm_action_single(ops, substream, state);
@@ -713,14 +731,10 @@
 
 /*
  *  Note: don't use any locks before
- *
- * NB2: this can handle the non-atomic callbacks if allow_nonatomic = 1
- *      when the pcm->info_flags has NONATOMIC_OPS bit, it's handled
- *      ouside the lock to allow sleep in the callback.
  */
 static int snd_pcm_action_lock_irq(struct action_ops *ops,
 				   snd_pcm_substream_t *substream,
-				   int state, int allow_nonatomic)
+				   int state)
 {
 	int res;
 
@@ -728,43 +742,10 @@
 	if (snd_pcm_stream_linked(substream)) {
 		spin_lock(&substream->group->lock);
 		spin_lock(&substream->self_group.lock);
-		res = snd_pcm_action_group(ops, substream, state, allow_nonatomic);
+		res = snd_pcm_action_group(ops, substream, state, 1);
 		spin_unlock(&substream->self_group.lock);
 		spin_unlock(&substream->group->lock);
-		if (res >= 0 && allow_nonatomic) {
-			/* now process the non-atomic substreams separately
-			 * outside the lock
-			 */
-#define MAX_LINKED_STREAMS	16	/* FIXME: should be variable */
-
-			struct list_head *pos;
-			int i, num_s = 0;
-			snd_pcm_substream_t *s;
-			snd_pcm_substream_t *subs[MAX_LINKED_STREAMS];
-			snd_pcm_group_for_each(pos, substream) {
-				if (num_s >= MAX_LINKED_STREAMS) {
-					res = -ENOMEM;
-					num_s = 0; /* don't proceed */
-					break;
-				}
-				s = snd_pcm_group_substream_entry(pos);
-				if (s->pcm->info_flags & SNDRV_PCM_INFO_NONATOMIC_OPS)
-					subs[num_s++] = s;
-			}
-			if (num_s > 0) {
-				read_unlock_irq(&snd_pcm_link_rwlock);
-				for (i = 0; i < num_s && res >= 0; i++)
-					res = snd_pcm_action_single(ops, subs[i], state);
-				return res;
-			}
-		}
 	} else {
-		if (allow_nonatomic &&
-		    (substream->pcm->info_flags & SNDRV_PCM_INFO_NONATOMIC_OPS)) {
-			read_unlock_irq(&snd_pcm_link_rwlock);
-			/* process outside the lock */
-			return snd_pcm_action_single(ops, substream, state);
-		}
 		spin_lock(&substream->self_group.lock);
 		res = snd_pcm_action_single(ops, substream, state);
 		spin_unlock(&substream->self_group.lock);
@@ -773,6 +754,23 @@
 	return res;
 }
 
+/*
+ */
+static int snd_pcm_action_nonatomic(struct action_ops *ops,
+				    snd_pcm_substream_t *substream,
+				    int state)
+{
+	int res;
+
+	down_read(&snd_pcm_link_rwsem);
+	if (snd_pcm_stream_linked(substream))
+		res = snd_pcm_action_group(ops, substream, state, 0);
+	else
+		res = snd_pcm_action_single(ops, substream, state);
+	up_read(&snd_pcm_link_rwsem);
+	return res;
+}
+
 static int snd_pcm_pre_start(snd_pcm_substream_t *substream, int state)
 {
 	snd_pcm_runtime_t *runtime = substream->runtime;
@@ -1038,7 +1036,7 @@
 
 	snd_power_lock(card);
 	if ((res = snd_power_wait(card, SNDRV_CTL_POWER_D0, substream->ffile)) >= 0)
-		res = snd_pcm_action_lock_irq(&snd_pcm_action_resume, substream, 0, 0);
+		res = snd_pcm_action_lock_irq(&snd_pcm_action_resume, substream, 0);
 	snd_power_unlock(card);
 	return res;
 }
@@ -1128,7 +1126,7 @@
 
 static int snd_pcm_reset(snd_pcm_substream_t *substream)
 {
-	return snd_pcm_action_lock_irq(&snd_pcm_action_reset, substream, 0, 0);
+	return snd_pcm_action_nonatomic(&snd_pcm_action_reset, substream, 0);
 }
 
 static int snd_pcm_pre_prepare(snd_pcm_substream_t * substream, int state)
@@ -1176,7 +1174,7 @@
 
 	snd_power_lock(card);
 	if ((res = snd_power_wait(card, SNDRV_CTL_POWER_D0, substream->ffile)) >= 0)
-		res = snd_pcm_action_lock_irq(&snd_pcm_action_prepare, substream, 0, 1); /* allow sleep if specified */
+		res = snd_pcm_action_nonatomic(&snd_pcm_action_prepare, substream, 0);
 	snd_power_unlock(card);
 	return res;
 }
@@ -1503,8 +1501,9 @@
 	file = snd_pcm_file_fd(fd);
 	if (!file)
 		return -EBADFD;
-	pcm_file = snd_magic_cast(snd_pcm_file_t, file->private_data, return -ENXIO);
+	pcm_file = file->private_data;
 	substream1 = pcm_file->substream;
+	down_write(&snd_pcm_link_rwsem);
 	write_lock_irq(&snd_pcm_link_rwlock);
 	if (substream->runtime->status->state != substream1->runtime->status->state) {
 		res = -EBADFD;
@@ -1528,6 +1527,7 @@
 	substream1->group = substream->group;
  _end:
 	write_unlock_irq(&snd_pcm_link_rwlock);
+	up_write(&snd_pcm_link_rwsem);
 	fput(file);
 	return res;
 }
@@ -1544,6 +1544,7 @@
 	struct list_head *pos;
 	int res = 0, count = 0;
 
+	down_write(&snd_pcm_link_rwsem);
 	write_lock_irq(&snd_pcm_link_rwlock);
 	if (!snd_pcm_stream_linked(substream)) {
 		res = -EALREADY;
@@ -1564,6 +1565,7 @@
 	relink_to_local(substream);
        _end:
 	write_unlock_irq(&snd_pcm_link_rwlock);
+	up_write(&snd_pcm_link_rwsem);
 	return res;
 }
 
@@ -1658,13 +1660,12 @@
 static unsigned int rates[] = { 5512, 8000, 11025, 16000, 22050, 32000, 44100,
                                  48000, 64000, 88200, 96000, 176400, 192000 };
 
-#define RATES (sizeof(rates) / sizeof(rates[0]))
-
 static int snd_pcm_hw_rule_rate(snd_pcm_hw_params_t *params,
 				snd_pcm_hw_rule_t *rule)
 {
 	snd_pcm_hardware_t *hw = rule->private;
-	return snd_interval_list(hw_param_interval(params, rule->var), RATES, rates, hw->rates);
+	return snd_interval_list(hw_param_interval(params, rule->var),
+				 ARRAY_SIZE(rates), rates, hw->rates);
 }		
 
 static int snd_pcm_hw_rule_buffer_bytes_max(snd_pcm_hw_params_t *params,
@@ -1923,7 +1924,7 @@
 	substream->ffile = NULL;
 	snd_pcm_remove_file(str, pcm_file);
 	snd_pcm_release_substream(substream);
-	snd_magic_kfree(pcm_file);
+	kfree(pcm_file);
 	return 0;
 }
 
@@ -1940,13 +1941,13 @@
 	snd_assert(rpcm_file != NULL, return -EINVAL);
 	*rpcm_file = NULL;
 
-	pcm_file = snd_magic_kcalloc(snd_pcm_file_t, 0, GFP_KERNEL);
+	pcm_file = kcalloc(1, sizeof(*pcm_file), GFP_KERNEL);
 	if (pcm_file == NULL) {
 		return -ENOMEM;
 	}
 
 	if ((err = snd_pcm_open_substream(pcm, stream, &substream)) < 0) {
-		snd_magic_kfree(pcm_file);
+		kfree(pcm_file);
 		return err;
 	}
 
@@ -2050,7 +2051,7 @@
 	snd_pcm_substream_t *substream;
 	snd_pcm_file_t *pcm_file;
 
-	pcm_file = snd_magic_cast(snd_pcm_file_t, file->private_data, return -ENXIO);
+	pcm_file = file->private_data;
 	substream = pcm_file->substream;
 	snd_assert(substream != NULL, return -ENXIO);
 	snd_assert(!atomic_read(&substream->runtime->mmap_count), );
@@ -2414,7 +2415,7 @@
 	case SNDRV_PCM_IOCTL_RESET:
 		return snd_pcm_reset(substream);
 	case SNDRV_PCM_IOCTL_START:
-		return snd_pcm_action_lock_irq(&snd_pcm_action_start, substream, 0, 0);
+		return snd_pcm_action_lock_irq(&snd_pcm_action_start, substream, 0);
 	case SNDRV_PCM_IOCTL_LINK:
 		return snd_pcm_link(substream, (int)(unsigned long) arg);
 	case SNDRV_PCM_IOCTL_UNLINK:
@@ -2616,26 +2617,36 @@
 				  unsigned int cmd, unsigned long arg)
 {
 	snd_pcm_file_t *pcm_file;
+	int err;
 
-	pcm_file = snd_magic_cast(snd_pcm_file_t, file->private_data, return -ENXIO);
+	pcm_file = file->private_data;
 
 	if (((cmd >> 8) & 0xff) != 'A')
 		return -ENOTTY;
 
-	return snd_pcm_playback_ioctl1(pcm_file->substream, cmd, (void __user *)arg);
+	/* FIXME: need to unlock BKL to allow preemption */
+	unlock_kernel();
+	err = snd_pcm_playback_ioctl1(pcm_file->substream, cmd, (void __user *)arg);
+	lock_kernel();
+	return err;
 }
 
 static int snd_pcm_capture_ioctl(struct inode *inode, struct file *file,
 				 unsigned int cmd, unsigned long arg)
 {
 	snd_pcm_file_t *pcm_file;
+	int err;
 
-	pcm_file = snd_magic_cast(snd_pcm_file_t, file->private_data, return -ENXIO);
+	pcm_file = file->private_data;
 
 	if (((cmd >> 8) & 0xff) != 'A')
 		return -ENOTTY;
 
-	return snd_pcm_capture_ioctl1(pcm_file->substream, cmd, (void __user *)arg);
+	/* FIXME: need to unlock BKL to allow preemption */
+	unlock_kernel();
+	err = snd_pcm_capture_ioctl1(pcm_file->substream, cmd, (void __user *)arg);
+	lock_kernel();
+	return err;
 }
 
 int snd_pcm_kernel_playback_ioctl(snd_pcm_substream_t *substream,
@@ -2682,7 +2693,7 @@
 	snd_pcm_runtime_t *runtime;
 	snd_pcm_sframes_t result;
 
-	pcm_file = snd_magic_cast(snd_pcm_file_t, file->private_data, return -ENXIO);
+	pcm_file = file->private_data;
 	substream = pcm_file->substream;
 	snd_assert(substream != NULL, return -ENXIO);
 	runtime = substream->runtime;
@@ -2704,7 +2715,7 @@
 	snd_pcm_runtime_t *runtime;
 	snd_pcm_sframes_t result;
 
-	pcm_file = snd_magic_cast(snd_pcm_file_t, file->private_data, result = -ENXIO; goto end);
+	pcm_file = file->private_data;
 	substream = pcm_file->substream;
 	snd_assert(substream != NULL, result = -ENXIO; goto end);
 	runtime = substream->runtime;
@@ -2736,7 +2747,7 @@
 	void __user **bufs;
 	snd_pcm_uframes_t frames;
 
-	pcm_file = snd_magic_cast(snd_pcm_file_t, file->private_data, return -ENXIO);
+	pcm_file = file->private_data;
 	substream = pcm_file->substream;
 	snd_assert(substream != NULL, return -ENXIO);
 	runtime = substream->runtime;
@@ -2770,7 +2781,7 @@
 	void __user **bufs;
 	snd_pcm_uframes_t frames;
 
-	pcm_file = snd_magic_cast(snd_pcm_file_t, file->private_data, result = -ENXIO; goto end);
+	pcm_file = file->private_data;
 	substream = pcm_file->substream;
 	snd_assert(substream != NULL, result = -ENXIO; goto end);
 	runtime = substream->runtime;
@@ -2805,7 +2816,7 @@
         unsigned int mask;
 	snd_pcm_uframes_t avail;
 
-	pcm_file = snd_magic_cast(snd_pcm_file_t, file->private_data, return 0);
+	pcm_file = file->private_data;
 
 	substream = pcm_file->substream;
 	snd_assert(substream != NULL, return -ENXIO);
@@ -2843,7 +2854,7 @@
         unsigned int mask;
 	snd_pcm_uframes_t avail;
 
-	pcm_file = snd_magic_cast(snd_pcm_file_t, file->private_data, return 0);
+	pcm_file = file->private_data;
 
 	substream = pcm_file->substream;
 	snd_assert(substream != NULL, return -ENXIO);
@@ -3009,6 +3020,12 @@
 	.nopage =	snd_pcm_mmap_data_nopage,
 };
 
+static struct vm_operations_struct snd_pcm_vm_ops_data_mmio =
+{
+	.open =		snd_pcm_mmap_data_open,
+	.close =	snd_pcm_mmap_data_close,
+};
+
 int snd_pcm_mmap_data(snd_pcm_substream_t *substream, struct file *file,
 		      struct vm_area_struct *area)
 {
@@ -3044,6 +3061,14 @@
 	area->vm_ops = &snd_pcm_vm_ops_data;
 	area->vm_private_data = substream;
 	area->vm_flags |= VM_RESERVED;
+	if (runtime->hw.info & SNDRV_PCM_INFO_MMAP_IOMEM) {
+		area->vm_ops = &snd_pcm_vm_ops_data_mmio;
+		area->vm_flags |= VM_IO;
+		if (io_remap_page_range(area, area->vm_start,
+					runtime->dma_addr + offset,
+					size, area->vm_page_prot))
+			return -EAGAIN;
+	}
 	atomic_inc(&runtime->mmap_count);
 	return 0;
 }
@@ -3054,7 +3079,7 @@
 	snd_pcm_substream_t *substream;	
 	unsigned long offset;
 	
-	pcm_file = snd_magic_cast(snd_pcm_file_t, file->private_data, return -ENXIO);
+	pcm_file = file->private_data;
 	substream = pcm_file->substream;
 	snd_assert(substream != NULL, return -ENXIO);
 
@@ -3077,7 +3102,7 @@
 	snd_pcm_runtime_t *runtime;
 	int err;
 
-	pcm_file = snd_magic_cast(snd_pcm_file_t, file->private_data, return -ENXIO);
+	pcm_file = file->private_data;
 	substream = pcm_file->substream;
 	snd_assert(substream != NULL, return -ENXIO);
 	runtime = substream->runtime;
@@ -3101,7 +3126,7 @@
 
 	memset(params, 0, sizeof(*params));
 	params->flags = oparams->flags;
-	for (i = 0; i < sizeof(oparams->masks) / sizeof(unsigned int); i++)
+	for (i = 0; i < ARRAY_SIZE(oparams->masks); i++)
 		params->masks[i].bits[0] = oparams->masks[i];
 	memcpy(params->intervals, oparams->intervals, sizeof(oparams->intervals));
 	params->rmask = __OLD_TO_NEW_MASK(oparams->rmask);
@@ -3119,7 +3144,7 @@
 
 	memset(oparams, 0, sizeof(*oparams));
 	oparams->flags = params->flags;
-	for (i = 0; i < sizeof(oparams->masks) / sizeof(unsigned int); i++)
+	for (i = 0; i < ARRAY_SIZE(oparams->masks); i++)
 		oparams->masks[i] = params->masks[i].bits[0];
 	memcpy(oparams->intervals, params->intervals, sizeof(oparams->intervals));
 	oparams->rmask = __NEW_TO_OLD_MASK(params->rmask);
@@ -3133,31 +3158,68 @@
 
 static int snd_pcm_hw_refine_old_user(snd_pcm_substream_t * substream, struct sndrv_pcm_hw_params_old __user * _oparams)
 {
-	snd_pcm_hw_params_t params;
-	struct sndrv_pcm_hw_params_old oparams;
+	snd_pcm_hw_params_t *params;
+	struct sndrv_pcm_hw_params_old *oparams = NULL;
 	int err;
-	if (copy_from_user(&oparams, _oparams, sizeof(oparams)))
-		return -EFAULT;
-	snd_pcm_hw_convert_from_old_params(&params, &oparams);
-	err = snd_pcm_hw_refine(substream, &params);
-	snd_pcm_hw_convert_to_old_params(&oparams, &params);
-	if (copy_to_user(_oparams, &oparams, sizeof(oparams)))
-		return -EFAULT;
+
+	params = kmalloc(sizeof(*params), GFP_KERNEL);
+	if (!params) {
+		err = -ENOMEM;
+		goto out;
+	}
+	oparams = kmalloc(sizeof(*oparams), GFP_KERNEL);
+	if (!oparams) {
+		err = -ENOMEM;
+		goto out;
+	}
+
+	if (copy_from_user(oparams, _oparams, sizeof(*oparams))) {
+		err = -EFAULT;
+		goto out;
+	}
+	snd_pcm_hw_convert_from_old_params(params, oparams);
+	err = snd_pcm_hw_refine(substream, params);
+	snd_pcm_hw_convert_to_old_params(oparams, params);
+	if (copy_to_user(_oparams, oparams, sizeof(*oparams))) {
+		if (!err)
+			err = -EFAULT;
+	}
+out:
+	kfree(params);
+	kfree(oparams);
 	return err;
 }
 
 static int snd_pcm_hw_params_old_user(snd_pcm_substream_t * substream, struct sndrv_pcm_hw_params_old __user * _oparams)
 {
-	snd_pcm_hw_params_t params;
-	struct sndrv_pcm_hw_params_old oparams;
+	snd_pcm_hw_params_t *params;
+	struct sndrv_pcm_hw_params_old *oparams = NULL;
 	int err;
-	if (copy_from_user(&oparams, _oparams, sizeof(oparams)))
-		return -EFAULT;
-	snd_pcm_hw_convert_from_old_params(&params, &oparams);
-	err = snd_pcm_hw_params(substream, &params);
-	snd_pcm_hw_convert_to_old_params(&oparams, &params);
-	if (copy_to_user(_oparams, &oparams, sizeof(oparams)))
-		return -EFAULT;
+
+	params = kmalloc(sizeof(*params), GFP_KERNEL);
+	if (!params) {
+		err = -ENOMEM;
+		goto out;
+	}
+	oparams = kmalloc(sizeof(*oparams), GFP_KERNEL);
+	if (!oparams) {
+		err = -ENOMEM;
+		goto out;
+	}
+	if (copy_from_user(oparams, _oparams, sizeof(*oparams))) {
+		err = -EFAULT;
+		goto out;
+	}
+	snd_pcm_hw_convert_from_old_params(params, oparams);
+	err = snd_pcm_hw_params(substream, params);
+	snd_pcm_hw_convert_to_old_params(oparams, params);
+	if (copy_to_user(_oparams, oparams, sizeof(*oparams))) {
+		if (!err)
+			err = -EFAULT;
+	}
+out:
+	kfree(params);
+	kfree(oparams);
 	return err;
 }
 
diff -Nru a/sound/core/pcm_timer.c b/sound/core/pcm_timer.c
--- a/sound/core/pcm_timer.c	2004-08-04 17:48:49 -07:00
+++ b/sound/core/pcm_timer.c	2004-08-04 17:48:49 -07:00
@@ -25,8 +25,6 @@
 #include <sound/pcm.h>
 #include <sound/timer.h>
 
-#define chip_t snd_pcm_substream_t
-
 /*
  *  Timer functions
  */
@@ -49,7 +47,7 @@
 
 void snd_pcm_timer_resolution_change(snd_pcm_substream_t *substream)
 {
-	unsigned long rate, mult, fsize, l;
+	unsigned long rate, mult, fsize, l, post;
 	snd_pcm_runtime_t *runtime = substream->runtime;
 	
         mult = 1000000000;
@@ -63,23 +61,24 @@
 	l = gcd(rate, fsize);
 	rate /= l;
 	fsize /= l;
+	post = 1;
 	while ((mult * fsize) / fsize != mult) {
 		mult /= 2;
-		rate /= 2;
+		post *= 2;
 	}
 	if (rate == 0) {
 		snd_printk(KERN_ERR "pcm timer resolution out of range (rate = %u, period_size = %lu)\n", runtime->rate, runtime->period_size);
 		runtime->timer_resolution = -1;
 		return;
 	}
-	runtime->timer_resolution = mult * fsize / rate;
+	runtime->timer_resolution = (mult * fsize / rate) * post;
 }
 
 static unsigned long snd_pcm_timer_resolution(snd_timer_t * timer)
 {
 	snd_pcm_substream_t * substream;
 	
-	substream = snd_magic_cast(snd_pcm_substream_t, timer->private_data, return -ENXIO);
+	substream = timer->private_data;
 	return substream->runtime ? substream->runtime->timer_resolution : 0;
 }
 
@@ -123,7 +122,7 @@
 
 static void snd_pcm_timer_free(snd_timer_t *timer)
 {
-	snd_pcm_substream_t *substream = snd_magic_cast(snd_pcm_substream_t, timer->private_data, return);
+	snd_pcm_substream_t *substream = timer->private_data;
 	substream->timer = NULL;
 }
 
diff -Nru a/sound/core/rawmidi.c b/sound/core/rawmidi.c
--- a/sound/core/rawmidi.c	2004-08-04 17:48:48 -07:00
+++ b/sound/core/rawmidi.c	2004-08-04 17:48:48 -07:00
@@ -23,6 +23,7 @@
 #include <sound/core.h>
 #include <linux/major.h>
 #include <linux/init.h>
+#include <linux/smp_lock.h>
 #include <linux/sched.h>
 #include <linux/slab.h>
 #include <linux/time.h>
@@ -44,10 +45,8 @@
 static int boot_devs;
 module_param_array(midi_map, int, boot_devs, 0444);
 MODULE_PARM_DESC(midi_map, "Raw MIDI device number assigned to 1st OSS device.");
-MODULE_PARM_SYNTAX(midi_map, "default:0,skill:advanced");
 module_param_array(amidi_map, int, boot_devs, 0444);
 MODULE_PARM_DESC(amidi_map, "Raw MIDI device number assigned to 2nd OSS device.");
-MODULE_PARM_SYNTAX(amidi_map, "default:1,skill:advanced");
 #endif /* CONFIG_SND_OSSEMUL */
 
 static int snd_rawmidi_free(snd_rawmidi_t *rawmidi);
@@ -269,7 +268,7 @@
 		list2 = list2->next;
 	}
 	if (mode & SNDRV_RAWMIDI_LFLG_INPUT) {
-		input = snd_kcalloc(sizeof(snd_rawmidi_runtime_t), GFP_KERNEL);
+		input = kcalloc(1, sizeof(*input), GFP_KERNEL);
 		if (input == NULL) {
 			err = -ENOMEM;
 			goto __error;
@@ -291,7 +290,7 @@
 	if (mode & SNDRV_RAWMIDI_LFLG_OUTPUT) {
 		if (soutput->opened)
 			goto __skip_output;
-		output = snd_kcalloc(sizeof(snd_rawmidi_runtime_t), GFP_KERNEL);
+		output = kcalloc(1, sizeof(*output), GFP_KERNEL);
 		if (output == NULL) {
 			err = -ENOMEM;
 			goto __error;
@@ -398,7 +397,7 @@
 	if ((file->f_flags & O_APPEND) || maj != CONFIG_SND_MAJOR) /* OSS emul? */
 		fflags |= SNDRV_RAWMIDI_LFLG_APPEND;
 	fflags |= SNDRV_RAWMIDI_LFLG_NOOPENLOCK;
-	rawmidi_file = snd_magic_kmalloc(snd_rawmidi_file_t, 0, GFP_KERNEL);
+	rawmidi_file = kmalloc(sizeof(*rawmidi_file), GFP_KERNEL);
 	if (rawmidi_file == NULL) {
 		snd_card_file_remove(card, file);
 		return -ENOMEM;
@@ -447,7 +446,7 @@
 		file->private_data = rawmidi_file;
 	} else {
 		snd_card_file_remove(card, file);
-		snd_magic_kfree(rawmidi_file);
+		kfree(rawmidi_file);
 	}
 	up(&rmidi->open_mutex);
 	return err;
@@ -512,11 +511,11 @@
 	snd_rawmidi_t *rmidi;
 	int err;
 
-	rfile = snd_magic_cast(snd_rawmidi_file_t, file->private_data, return -ENXIO);
+	rfile = file->private_data;
 	err = snd_rawmidi_kernel_release(rfile);
 	rmidi = rfile->rmidi;
 	wake_up(&rmidi->open_wait);
-	snd_magic_kfree(rfile);
+	kfree(rfile);
 	snd_card_file_remove(rmidi->card, file);
 	return err;
 }
@@ -675,13 +674,13 @@
 	return 0;
 }
 
-static int snd_rawmidi_ioctl(struct inode *inode, struct file *file,
-			     unsigned int cmd, unsigned long arg)
+static inline int _snd_rawmidi_ioctl(struct inode *inode, struct file *file,
+				     unsigned int cmd, unsigned long arg)
 {
 	snd_rawmidi_file_t *rfile;
 	void __user *argp = (void __user *)arg;
 
-	rfile = snd_magic_cast(snd_rawmidi_file_t, file->private_data, return -ENXIO);
+	rfile = file->private_data;
 	if (((cmd >> 8) & 0xff) != 'W')
 		return -ENOTTY;
 	switch (cmd) {
@@ -786,6 +785,17 @@
 	return -ENOTTY;
 }
 
+/* FIXME: need to unlock BKL to allow preemption */
+static int snd_rawmidi_ioctl(struct inode *inode, struct file *file,
+			     unsigned int cmd, unsigned long arg)
+{
+	int err;
+	unlock_kernel();
+	err = _snd_rawmidi_ioctl(inode, file, cmd, arg);
+	lock_kernel();
+	return err;
+}
+
 int snd_rawmidi_control_ioctl(snd_card_t * card, snd_ctl_file_t * control,
 			      unsigned int cmd, unsigned long arg)
 {
@@ -944,7 +954,7 @@
 	snd_rawmidi_substream_t *substream;
 	snd_rawmidi_runtime_t *runtime;
 
-	rfile = snd_magic_cast(snd_rawmidi_file_t, file->private_data, return -ENXIO);
+	rfile = file->private_data;
 	substream = rfile->input;
 	if (substream == NULL)
 		return -EIO;
@@ -1176,7 +1186,7 @@
 	snd_rawmidi_runtime_t *runtime;
 	snd_rawmidi_substream_t *substream;
 
-	rfile = snd_magic_cast(snd_rawmidi_file_t, file->private_data, return -ENXIO);
+	rfile = file->private_data;
 	substream = rfile->output;
 	runtime = substream->runtime;
 	/* we cannot put an atomic message to our buffer */
@@ -1241,7 +1251,7 @@
 	snd_rawmidi_runtime_t *runtime;
 	unsigned int mask;
 
-	rfile = snd_magic_cast(snd_rawmidi_file_t, file->private_data, return 0);
+	rfile = file->private_data;
 	if (rfile->input != NULL) {
 		runtime = rfile->input->runtime;
 		runtime->trigger = 1;
@@ -1276,7 +1286,7 @@
 	snd_rawmidi_runtime_t *runtime;
 	struct list_head *list;
 
-	rmidi = snd_magic_cast(snd_rawmidi_t, entry->private_data, return);
+	rmidi = entry->private_data;
 	snd_iprintf(buffer, "%s\n\n", rmidi->name);
 	down(&rmidi->open_mutex);
 	if (rmidi->info_flags & SNDRV_RAWMIDI_INFO_OUTPUT) {
@@ -1353,7 +1363,7 @@
 
 	INIT_LIST_HEAD(&stream->substreams);
 	for (idx = 0; idx < count; idx++) {
-		substream = snd_kcalloc(sizeof(snd_rawmidi_substream_t), GFP_KERNEL);
+		substream = kcalloc(1, sizeof(*substream), GFP_KERNEL);
 		if (substream == NULL)
 			return -ENOMEM;
 		substream->stream = direction;
@@ -1396,7 +1406,7 @@
 	snd_assert(rrawmidi != NULL, return -EINVAL);
 	*rrawmidi = NULL;
 	snd_assert(card != NULL, return -ENXIO);
-	rmidi = snd_magic_kcalloc(snd_rawmidi_t, 0, GFP_KERNEL);
+	rmidi = kcalloc(1, sizeof(*rmidi), GFP_KERNEL);
 	if (rmidi == NULL)
 		return -ENOMEM;
 	rmidi->card = card;
@@ -1439,20 +1449,20 @@
 	snd_rawmidi_free_substreams(&rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT]);
 	if (rmidi->private_free)
 		rmidi->private_free(rmidi);
-	snd_magic_kfree(rmidi);
+	kfree(rmidi);
 	return 0;
 }
 
 static int snd_rawmidi_dev_free(snd_device_t *device)
 {
-	snd_rawmidi_t *rmidi = snd_magic_cast(snd_rawmidi_t, device->device_data, return -ENXIO);
+	snd_rawmidi_t *rmidi = device->device_data;
 	return snd_rawmidi_free(rmidi);
 }
 
 #if defined(CONFIG_SND_SEQUENCER) || (defined(MODULE) && defined(CONFIG_SND_SEQUENCER_MODULE))
 static void snd_rawmidi_dev_seq_free(snd_seq_device_t *device)
 {
-	snd_rawmidi_t *rmidi = snd_magic_cast(snd_rawmidi_t, device->private_data, return);
+	snd_rawmidi_t *rmidi = device->private_data;
 	rmidi->seq_dev = NULL;
 }
 #endif
@@ -1462,7 +1472,7 @@
 	int idx, err;
 	snd_info_entry_t *entry;
 	char name[16];
-	snd_rawmidi_t *rmidi = snd_magic_cast(snd_rawmidi_t, device->device_data, return -ENXIO);
+	snd_rawmidi_t *rmidi = device->device_data;
 
 	if (rmidi->device >= SNDRV_RAWMIDI_DEVICES)
 		return -ENOMEM;
@@ -1539,7 +1549,7 @@
 
 static int snd_rawmidi_dev_disconnect(snd_device_t *device)
 {
-	snd_rawmidi_t *rmidi = snd_magic_cast(snd_rawmidi_t, device->device_data, return -ENXIO);
+	snd_rawmidi_t *rmidi = device->device_data;
 	int idx;
 
 	down(&register_mutex);
@@ -1552,7 +1562,7 @@
 static int snd_rawmidi_dev_unregister(snd_device_t *device)
 {
 	int idx;
-	snd_rawmidi_t *rmidi = snd_magic_cast(snd_rawmidi_t, device->device_data, return -ENXIO);
+	snd_rawmidi_t *rmidi = device->device_data;
 
 	snd_assert(rmidi != NULL, return -ENXIO);
 	down(&register_mutex);
diff -Nru a/sound/core/seq/Makefile b/sound/core/seq/Makefile
--- a/sound/core/seq/Makefile	2004-08-04 17:48:49 -07:00
+++ b/sound/core/seq/Makefile	2004-08-04 17:48:49 -07:00
@@ -19,9 +19,6 @@
 snd-seq-dummy-objs := seq_dummy.o
 snd-seq-virmidi-objs := seq_virmidi.o
 
-RAWMIDI_OBJS = snd-seq-midi.o snd-seq-midi-event.o
-OPL3_OBJS = snd-seq-midi-event.o snd-seq-midi-emul.o snd-seq-instr.o
-
 #
 # this function returns:
 #   "m" - CONFIG_SND_SEQUENCER is m
@@ -38,53 +35,8 @@
 
 # Toplevel Module Dependency
 obj-$(CONFIG_SND_VIRMIDI) += snd-seq-virmidi.o snd-seq-midi-event.o
-obj-$(call sequencer,$(CONFIG_SND_SERIAL_U16550)) += $(RAWMIDI_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_MTPAV)) += $(RAWMIDI_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_MPU401)) += $(RAWMIDI_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_ALS100)) += $(RAWMIDI_OBJS) $(OPL3_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_AZT2320)) += $(RAWMIDI_OBJS) $(OPL3_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_AZT3328)) += $(RAWMIDI_OBJS) $(OPL3_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_DT019X)) += $(RAWMIDI_OBJS) $(OPL3_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_ES18XX)) += $(RAWMIDI_OBJS) $(OPL3_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_OPL3SA2)) += $(RAWMIDI_OBJS) $(OPL3_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_AD1816A)) += $(RAWMIDI_OBJS) $(OPL3_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_CS4231)) += $(RAWMIDI_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_CS4232)) += $(RAWMIDI_OBJS) $(OPL3_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_CS4236)) += $(RAWMIDI_OBJS) $(OPL3_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_ES1688)) += $(RAWMIDI_OBJS) $(OPL3_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_GUSCLASSIC)) += $(RAWMIDI_OBJS) $(OPL3_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_GUSMAX)) += $(RAWMIDI_OBJS) $(OPL3_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_GUSEXTREME)) += $(RAWMIDI_OBJS) $(OPL3_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_INTERWAVE)) += $(RAWMIDI_OBJS) $(OPL3_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_INTERWAVE_STB)) += $(RAWMIDI_OBJS) $(OPL3_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_OPTI92X_AD1848)) += $(RAWMIDI_OBJS) $(OPL3_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_OPTI92X_CS4231)) += $(RAWMIDI_OBJS) $(OPL3_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_OPTI93X)) += $(RAWMIDI_OBJS) $(OPL3_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_SB8)) += $(RAWMIDI_OBJS) $(OPL3_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_SB16)) += $(RAWMIDI_OBJS) $(OPL3_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_SBAWE)) += $(RAWMIDI_OBJS) $(OPL3_OBJS) snd-seq-virmidi.o
-obj-$(call sequencer,$(CONFIG_SND_ES968)) += $(RAWMIDI_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_WAVEFRONT)) += $(RAWMIDI_OBJS) $(OPL3_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_SSCAPE)) += $(RAWMIDI_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_ALS4000)) += $(RAWMIDI_OBJS) $(OPL3_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_CMIPCI)) += $(RAWMIDI_OBJS) $(OPL3_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_CS4281)) += $(RAWMIDI_OBJS) $(OPL3_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_ENS1370)) += $(RAWMIDI_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_ENS1371)) += $(RAWMIDI_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_ES1938)) += $(RAWMIDI_OBJS) $(OPL3_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_ES1968)) += $(RAWMIDI_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_FM801)) += $(RAWMIDI_OBJS) $(OPL3_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_ICE1712)) += $(RAWMIDI_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_ICE1724)) += $(RAWMIDI_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_INTEL8X0)) += $(RAWMIDI_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_SONICVIBES)) += $(RAWMIDI_OBJS) $(OPL3_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_VIA82XX)) += $(RAWMIDI_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_ALI5451)) += $(RAWMIDI_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_CS46XX)) += $(RAWMIDI_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_EMU10K1)) += $(RAWMIDI_OBJS) snd-seq-midi-emul.o snd-seq-virmidi.o
-obj-$(call sequencer,$(CONFIG_SND_TRIDENT)) += $(RAWMIDI_OBJS) snd-seq-midi-emul.o snd-seq-instr.o
-obj-$(call sequencer,$(CONFIG_SND_YMFPCI)) += $(RAWMIDI_OBJS) $(OPL3_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_USB_AUDIO)) += $(RAWMIDI_OBJS)
-obj-$(call sequencer,$(CONFIG_SND_HDSP)) += $(RAWMIDI_OBJS)
-
-obj-m := $(sort $(obj-m))
+obj-$(call sequencer,$(CONFIG_SND_RAWMIDI)) += snd-seq-midi.o snd-seq-midi-event.o
+obj-$(call sequencer,$(CONFIG_SND_OPL3_LIB)) += snd-seq-midi-event.o snd-seq-midi-emul.o snd-seq-instr.o
+obj-$(call sequencer,$(CONFIG_SND_SBAWE)) += snd-seq-midi-emul.o snd-seq-virmidi.o
+obj-$(call sequencer,$(CONFIG_SND_EMU10K1)) += snd-seq-midi-emul.o snd-seq-virmidi.o
+obj-$(call sequencer,$(CONFIG_SND_TRIDENT)) += snd-seq-midi-emul.o snd-seq-instr.o
diff -Nru a/sound/core/seq/instr/Makefile b/sound/core/seq/instr/Makefile
--- a/sound/core/seq/instr/Makefile	2004-08-04 17:48:49 -07:00
+++ b/sound/core/seq/instr/Makefile	2004-08-04 17:48:49 -07:00
@@ -17,35 +17,7 @@
 sequencer = $(if $(subst y,,$(CONFIG_SND_SEQUENCER)),$(if $(1),m),$(if $(CONFIG_SND_SEQUENCER),$(1)))
 
 # Toplevel Module Dependency
-obj-$(call sequencer,$(CONFIG_SND_ALS100)) += snd-ainstr-fm.o
-obj-$(call sequencer,$(CONFIG_SND_AZT2320)) += snd-ainstr-fm.o
-obj-$(call sequencer,$(CONFIG_SND_AZT3328)) += snd-ainstr-fm.o
-obj-$(call sequencer,$(CONFIG_SND_DT019X)) += snd-ainstr-fm.o
-obj-$(call sequencer,$(CONFIG_SND_ES18XX)) += snd-ainstr-fm.o
-obj-$(call sequencer,$(CONFIG_SND_OPL3SA2)) += snd-ainstr-fm.o
-obj-$(call sequencer,$(CONFIG_SND_AD1816A)) += snd-ainstr-fm.o
-obj-$(call sequencer,$(CONFIG_SND_CS4232)) += snd-ainstr-fm.o
-obj-$(call sequencer,$(CONFIG_SND_CS4236)) += snd-ainstr-fm.o
-obj-$(call sequencer,$(CONFIG_SND_ES1688)) += snd-ainstr-fm.o
-obj-$(call sequencer,$(CONFIG_SND_GUSCLASSIC)) += snd-ainstr-iw.o snd-ainstr-gf1.o snd-ainstr-simple.o
-obj-$(call sequencer,$(CONFIG_SND_GUSMAX)) += snd-ainstr-iw.o snd-ainstr-gf1.o snd-ainstr-simple.o
-obj-$(call sequencer,$(CONFIG_SND_GUSEXTREME)) += snd-ainstr-iw.o snd-ainstr-gf1.o snd-ainstr-simple.o snd-ainstr-fm.o
-obj-$(call sequencer,$(CONFIG_SND_INTERWAVE)) += snd-ainstr-iw.o snd-ainstr-gf1.o snd-ainstr-simple.o
-obj-$(call sequencer,$(CONFIG_SND_INTERWAVE_STB)) += snd-ainstr-iw.o snd-ainstr-gf1.o snd-ainstr-simple.o
-obj-$(call sequencer,$(CONFIG_SND_OPTI92X_AD1848)) += snd-ainstr-fm.o
-obj-$(call sequencer,$(CONFIG_SND_OPTI92X_CS4231)) += snd-ainstr-fm.o
-obj-$(call sequencer,$(CONFIG_SND_OPTI93X)) += snd-ainstr-fm.o
-obj-$(call sequencer,$(CONFIG_SND_SB8)) += snd-ainstr-fm.o
-obj-$(call sequencer,$(CONFIG_SND_SB16)) += snd-ainstr-fm.o
-obj-$(call sequencer,$(CONFIG_SND_SBAWE)) += snd-ainstr-fm.o
-obj-$(call sequencer,$(CONFIG_SND_WAVEFRONT)) += snd-ainstr-fm.o
-obj-$(call sequencer,$(CONFIG_SND_ALS4000)) += snd-ainstr-fm.o
-obj-$(call sequencer,$(CONFIG_SND_CMIPCI)) += snd-ainstr-fm.o
-obj-$(call sequencer,$(CONFIG_SND_CS4281)) += snd-ainstr-fm.o
-obj-$(call sequencer,$(CONFIG_SND_ES1938)) += snd-ainstr-fm.o
-obj-$(call sequencer,$(CONFIG_SND_FM801)) += snd-ainstr-fm.o
-obj-$(call sequencer,$(CONFIG_SND_SONICVIBES)) += snd-ainstr-fm.o
+obj-$(call sequencer,$(CONFIG_SND_OPL3_LIB)) += snd-ainstr-fm.o
+obj-$(call sequencer,$(CONFIG_SND_OPL4_LIB)) += snd-ainstr-fm.o
+obj-$(call sequencer,$(CONFIG_SND_GUS_SYNTH)) += snd-ainstr-gf1.o snd-ainstr-simple.o snd-ainstr-iw.o
 obj-$(call sequencer,$(CONFIG_SND_TRIDENT)) += snd-ainstr-simple.o
-obj-$(call sequencer,$(CONFIG_SND_YMFPCI)) += snd-ainstr-fm.o
-
-obj-m := $(sort $(obj-m))
diff -Nru a/sound/core/seq/instr/ainstr_fm.c b/sound/core/seq/instr/ainstr_fm.c
--- a/sound/core/seq/instr/ainstr_fm.c	2004-08-04 17:48:49 -07:00
+++ b/sound/core/seq/instr/ainstr_fm.c	2004-08-04 17:48:49 -07:00
@@ -29,8 +29,6 @@
 MODULE_AUTHOR("Uros Bizjak <uros@kss-loka.si>");
 MODULE_DESCRIPTION("Advanced Linux Sound Architecture FM Instrument support.");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_SUPPORTED_DEVICE("sound");
 
 char *snd_seq_fm_id = SNDRV_SEQ_INSTR_ID_OPL2_3;
 
diff -Nru a/sound/core/seq/instr/ainstr_gf1.c b/sound/core/seq/instr/ainstr_gf1.c
--- a/sound/core/seq/instr/ainstr_gf1.c	2004-08-04 17:48:49 -07:00
+++ b/sound/core/seq/instr/ainstr_gf1.c	2004-08-04 17:48:49 -07:00
@@ -30,8 +30,6 @@
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("Advanced Linux Sound Architecture GF1 (GUS) Patch support.");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_SUPPORTED_DEVICE("sound");
 
 char *snd_seq_gf1_id = SNDRV_SEQ_INSTR_ID_GUS_PATCH;
 
@@ -64,7 +62,7 @@
 		return -EFAULT;
 	*data += sizeof(xp);
 	*len -= sizeof(xp);
-	wp = (gf1_wave_t *)snd_kcalloc(sizeof(*wp), gfp_mask);
+	wp = kcalloc(1, sizeof(*wp), gfp_mask);
 	if (wp == NULL)
 		return -ENOMEM;
 	wp->share_id[0] = le32_to_cpu(xp.share_id[0]);
diff -Nru a/sound/core/seq/instr/ainstr_iw.c b/sound/core/seq/instr/ainstr_iw.c
--- a/sound/core/seq/instr/ainstr_iw.c	2004-08-04 17:48:49 -07:00
+++ b/sound/core/seq/instr/ainstr_iw.c	2004-08-04 17:48:49 -07:00
@@ -30,8 +30,6 @@
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("Advanced Linux Sound Architecture IWFFFF support.");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_SUPPORTED_DEVICE("sound");
 
 char *snd_seq_iwffff_id = SNDRV_SEQ_INSTR_ID_INTERWAVE;
 
@@ -96,7 +94,7 @@
 		points_size = (le16_to_cpu(rx.nattack) + le16_to_cpu(rx.nrelease)) * 2 * sizeof(__u16);
 		if (points_size > *len)
 			return -EINVAL;
-		rp = (iwffff_env_record_t *)snd_kcalloc(sizeof(*rp) + points_size, gfp_mask);
+		rp = kcalloc(1, sizeof(*rp) + points_size, gfp_mask);
 		if (rp == NULL)
 			return -ENOMEM;
 		rp->nattack = le16_to_cpu(rx.nattack);
@@ -142,7 +140,7 @@
 		return -EFAULT;
 	*data += sizeof(xp);
 	*len -= sizeof(xp);
-	wp = (iwffff_wave_t *)snd_kcalloc(sizeof(*wp), gfp_mask);
+	wp = kcalloc(1, sizeof(*wp), gfp_mask);
 	if (wp == NULL)
 		return -ENOMEM;
 	wp->share_id[0] = le32_to_cpu(xp.share_id[0]);
@@ -275,7 +273,7 @@
 			snd_seq_iwffff_instr_free(ops, ip, atomic);
 			return -EINVAL;
 		}
-		lp = (iwffff_layer_t *)snd_kcalloc(sizeof(*lp), gfp_mask);
+		lp = kcalloc(1, sizeof(*lp), gfp_mask);
 		if (lp == NULL) {
 			snd_seq_iwffff_instr_free(ops, ip, atomic);
 			return -ENOMEM;
diff -Nru a/sound/core/seq/instr/ainstr_simple.c b/sound/core/seq/instr/ainstr_simple.c
--- a/sound/core/seq/instr/ainstr_simple.c	2004-08-04 17:48:49 -07:00
+++ b/sound/core/seq/instr/ainstr_simple.c	2004-08-04 17:48:49 -07:00
@@ -30,8 +30,6 @@
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("Advanced Linux Sound Architecture Simple Instrument support.");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_SUPPORTED_DEVICE("sound");
 
 char *snd_seq_simple_id = SNDRV_SEQ_INSTR_ID_SIMPLE;
 
diff -Nru a/sound/core/seq/oss/seq_oss.c b/sound/core/seq/oss/seq_oss.c
--- a/sound/core/seq/oss/seq_oss.c	2004-08-04 17:48:49 -07:00
+++ b/sound/core/seq/oss/seq_oss.c	2004-08-04 17:48:49 -07:00
@@ -22,6 +22,7 @@
 
 #include <sound/driver.h>
 #include <linux/init.h>
+#include <linux/smp_lock.h>
 #include <linux/moduleparam.h>
 #include <sound/core.h>
 #include <sound/minors.h>
@@ -35,7 +36,6 @@
 MODULE_AUTHOR("Takashi Iwai <tiwai@suse.de>");
 MODULE_DESCRIPTION("OSS-compatible sequencer module");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
 /* Takashi says this is really only for sound-service-0-, but this is OK. */
 MODULE_ALIAS_SNDRV_MINOR(SNDRV_MINOR_OSS_SEQUENCER);
 MODULE_ALIAS_SNDRV_MINOR(SNDRV_MINOR_OSS_MUSIC);
@@ -177,9 +177,14 @@
 odev_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
 {
 	seq_oss_devinfo_t *dp;
+	int err;
 	dp = file->private_data;
 	snd_assert(dp != NULL, return -EIO);
-	return snd_seq_oss_ioctl(dp, cmd, arg);
+	/* FIXME: need to unlock BKL to allow preemption */
+	unlock_kernel();
+	err = snd_seq_oss_ioctl(dp, cmd, arg);
+	lock_kernel();
+	return err;
 }
 
 
diff -Nru a/sound/core/seq/oss/seq_oss_init.c b/sound/core/seq/oss/seq_oss_init.c
--- a/sound/core/seq/oss/seq_oss_init.c	2004-08-04 17:48:48 -07:00
+++ b/sound/core/seq/oss/seq_oss_init.c	2004-08-04 17:48:48 -07:00
@@ -183,7 +183,7 @@
 	int i, rc;
 	seq_oss_devinfo_t *dp;
 
-	if ((dp = snd_kcalloc(sizeof(*dp), GFP_KERNEL)) == NULL) {
+	if ((dp = kcalloc(1, sizeof(*dp), GFP_KERNEL)) == NULL) {
 		snd_printk(KERN_ERR "can't malloc device info\n");
 		return -ENOMEM;
 	}
@@ -211,7 +211,7 @@
 	snd_seq_oss_midi_setup(dp);
 
 	if (dp->synth_opened == 0 && dp->max_mididev == 0) {
-		snd_printk(KERN_ERR "no device found\n");
+		/* snd_printk(KERN_ERR "no device found\n"); */
 		rc = -ENODEV;
 		goto _error;
 	}
diff -Nru a/sound/core/seq/oss/seq_oss_ioctl.c b/sound/core/seq/oss/seq_oss_ioctl.c
--- a/sound/core/seq/oss/seq_oss_ioctl.c	2004-08-04 17:48:48 -07:00
+++ b/sound/core/seq/oss/seq_oss_ioctl.c	2004-08-04 17:48:48 -07:00
@@ -28,16 +28,54 @@
 #include "seq_oss_midi.h"
 #include "seq_oss_event.h"
 
+static int snd_seq_oss_synth_info_user(seq_oss_devinfo_t *dp, void __user *arg)
+{
+	struct synth_info info;
+
+	if (copy_from_user(&info, arg, sizeof(info)))
+		return -EFAULT;
+	if (snd_seq_oss_synth_make_info(dp, info.device, &info) < 0)
+		return -EINVAL;
+	if (copy_to_user(arg, &info, sizeof(info)))
+		return -EFAULT;
+	return 0;
+}
+
+static int snd_seq_oss_midi_info_user(seq_oss_devinfo_t *dp, void __user *arg)
+{
+	struct midi_info info;
+
+	if (copy_from_user(&info, arg, sizeof(info)))
+		return -EFAULT;
+	if (snd_seq_oss_midi_make_info(dp, info.device, &info) < 0)
+		return -EINVAL;
+	if (copy_to_user(arg, &info, sizeof(info)))
+		return -EFAULT;
+	return 0;
+}
+
+static int snd_seq_oss_oob_user(seq_oss_devinfo_t *dp, void __user *arg)
+{
+	unsigned char ev[8];
+	snd_seq_event_t tmpev;
+
+	if (copy_from_user(ev, arg, 8))
+		return -EFAULT;
+	memset(&tmpev, 0, sizeof(tmpev));
+	snd_seq_oss_fill_addr(dp, &tmpev, dp->addr.port, dp->addr.client);
+	tmpev.time.tick = 0;
+	if (! snd_seq_oss_process_event(dp, (evrec_t*)ev, &tmpev)) {
+		snd_seq_oss_dispatch(dp, &tmpev, 0, 0);
+	}
+	return 0;
+}
+
 int
 snd_seq_oss_ioctl(seq_oss_devinfo_t *dp, unsigned int cmd, unsigned long carg)
 {
 	int dev, val;
-	struct synth_info inf;
-	struct midi_info minf;
-	unsigned char ev[8];
 	void __user *arg = (void __user *)carg;
 	int __user *p = arg;
-	snd_seq_event_t tmpev;
 
 	switch (cmd) {
 	case SNDCTL_TMR_TIMEBASE:
@@ -124,35 +162,15 @@
 	case SNDCTL_SYNTH_INFO:
 	case SNDCTL_SYNTH_ID:
 		debug_printk(("synth info\n"));
-		if (copy_from_user(&inf, arg, sizeof(inf)))
-			return -EFAULT;
-		if (snd_seq_oss_synth_make_info(dp, inf.device, &inf) < 0)
-			return -EINVAL;
-		if (copy_to_user(arg, &inf, sizeof(inf)))
-			return -EFAULT;
-		return 0;
+		return snd_seq_oss_synth_info_user(dp, arg);
 
 	case SNDCTL_SEQ_OUTOFBAND:
-		debug_printk(("out of bound\n"));
-		if (copy_from_user(ev, arg, 8))
-			return -EFAULT;
-		memset(&tmpev, 0, sizeof(tmpev));
-		snd_seq_oss_fill_addr(dp, &tmpev, dp->addr.port, dp->addr.client);
-		tmpev.time.tick = 0;
-		if (! snd_seq_oss_process_event(dp, (evrec_t*)ev, &tmpev)) {
-			snd_seq_oss_dispatch(dp, &tmpev, 0, 0);
-		}
-		return 0;
+		debug_printk(("out of band\n"));
+		return snd_seq_oss_oob_user(dp, arg);
 
 	case SNDCTL_MIDI_INFO:
 		debug_printk(("midi info\n"));
-		if (copy_from_user(&minf, arg, sizeof(minf)))
-			return -EFAULT;
-		if (snd_seq_oss_midi_make_info(dp, minf.device, &minf) < 0)
-			return -EINVAL;
-		if (copy_to_user(arg, &minf, sizeof(minf)))
-			return -EFAULT;
-		return 0;
+		return snd_seq_oss_midi_info_user(dp, arg);
 
 	case SNDCTL_SEQ_THRESHOLD:
 		debug_printk(("threshold\n"));
diff -Nru a/sound/core/seq/oss/seq_oss_midi.c b/sound/core/seq/oss/seq_oss_midi.c
--- a/sound/core/seq/oss/seq_oss_midi.c	2004-08-04 17:48:48 -07:00
+++ b/sound/core/seq/oss/seq_oss_midi.c	2004-08-04 17:48:48 -07:00
@@ -171,7 +171,7 @@
 	/*
 	 * allocate midi info record
 	 */
-	if ((mdev = snd_kcalloc(sizeof(*mdev), GFP_KERNEL)) == NULL) {
+	if ((mdev = kcalloc(1, sizeof(*mdev), GFP_KERNEL)) == NULL) {
 		snd_printk(KERN_ERR "can't malloc midi info\n");
 		return -ENOMEM;
 	}
diff -Nru a/sound/core/seq/oss/seq_oss_readq.c b/sound/core/seq/oss/seq_oss_readq.c
--- a/sound/core/seq/oss/seq_oss_readq.c	2004-08-04 17:48:48 -07:00
+++ b/sound/core/seq/oss/seq_oss_readq.c	2004-08-04 17:48:48 -07:00
@@ -45,12 +45,12 @@
 {
 	seq_oss_readq_t *q;
 
-	if ((q = snd_kcalloc(sizeof(*q), GFP_KERNEL)) == NULL) {
+	if ((q = kcalloc(1, sizeof(*q), GFP_KERNEL)) == NULL) {
 		snd_printk(KERN_ERR "can't malloc read queue\n");
 		return NULL;
 	}
 
-	if ((q->q = snd_kcalloc(sizeof(evrec_t) * maxlen, GFP_KERNEL)) == NULL) {
+	if ((q->q = kcalloc(maxlen, sizeof(evrec_t), GFP_KERNEL)) == NULL) {
 		snd_printk(KERN_ERR "can't malloc read queue buffer\n");
 		kfree(q);
 		return NULL;
diff -Nru a/sound/core/seq/oss/seq_oss_synth.c b/sound/core/seq/oss/seq_oss_synth.c
--- a/sound/core/seq/oss/seq_oss_synth.c	2004-08-04 17:48:48 -07:00
+++ b/sound/core/seq/oss/seq_oss_synth.c	2004-08-04 17:48:48 -07:00
@@ -103,7 +103,7 @@
 	snd_seq_oss_reg_t *reg = SNDRV_SEQ_DEVICE_ARGPTR(dev);
 	unsigned long flags;
 
-	if ((rec = snd_kcalloc(sizeof(*rec), GFP_KERNEL)) == NULL) {
+	if ((rec = kcalloc(1, sizeof(*rec), GFP_KERNEL)) == NULL) {
 		snd_printk(KERN_ERR "can't malloc synth info\n");
 		return -ENOMEM;
 	}
@@ -244,7 +244,9 @@
 		}
 		info->nr_voices = rec->nr_voices;
 		if (info->nr_voices > 0) {
-			info->ch = snd_kcalloc(sizeof(seq_oss_chinfo_t) * info->nr_voices, GFP_KERNEL);
+			info->ch = kcalloc(info->nr_voices, sizeof(seq_oss_chinfo_t), GFP_KERNEL);
+			if (!info->ch)
+				BUG();
 			reset_channels(info);
 		}
 		debug_printk(("synth %d assigned\n", i));
@@ -505,7 +507,7 @@
 
 	sysex = dp->synths[dev].sysex;
 	if (sysex == NULL) {
-		sysex = snd_kcalloc(sizeof(*sysex), GFP_KERNEL);
+		sysex = kcalloc(1, sizeof(*sysex), GFP_KERNEL);
 		if (sysex == NULL)
 			return -ENOMEM;
 		dp->synths[dev].sysex = sysex;
diff -Nru a/sound/core/seq/oss/seq_oss_timer.c b/sound/core/seq/oss/seq_oss_timer.c
--- a/sound/core/seq/oss/seq_oss_timer.c	2004-08-04 17:48:48 -07:00
+++ b/sound/core/seq/oss/seq_oss_timer.c	2004-08-04 17:48:48 -07:00
@@ -46,7 +46,7 @@
 {
 	seq_oss_timer_t *rec;
 
-	rec = snd_kcalloc(sizeof(*rec), GFP_KERNEL);
+	rec = kcalloc(1, sizeof(*rec), GFP_KERNEL);
 	if (rec == NULL)
 		return NULL;
 
@@ -168,7 +168,7 @@
 	tmprec.queue = dp->queue;
 	tmprec.ppq = timer->ppq;
 	tmprec.tempo = timer->tempo;
-	snd_seq_kernel_client_ctl(dp->cseq, SNDRV_SEQ_IOCTL_SET_QUEUE_TEMPO, &tmprec);
+	snd_seq_set_queue_tempo(dp->cseq, &tmprec);
 
 	send_timer_event(dp, SNDRV_SEQ_EVENT_START, 0);
 	timer->running = 1;
diff -Nru a/sound/core/seq/oss/seq_oss_writeq.c b/sound/core/seq/oss/seq_oss_writeq.c
--- a/sound/core/seq/oss/seq_oss_writeq.c	2004-08-04 17:48:49 -07:00
+++ b/sound/core/seq/oss/seq_oss_writeq.c	2004-08-04 17:48:49 -07:00
@@ -37,7 +37,7 @@
 	seq_oss_writeq_t *q;
 	snd_seq_client_pool_t pool;
 
-	if ((q = snd_kcalloc(sizeof(*q), GFP_KERNEL)) == NULL)
+	if ((q = kcalloc(1, sizeof(*q), GFP_KERNEL)) == NULL)
 		return NULL;
 	q->dp = dp;
 	q->maxlen = maxlen;
diff -Nru a/sound/core/seq/seq.c b/sound/core/seq/seq.c
--- a/sound/core/seq/seq.c	2004-08-04 17:48:49 -07:00
+++ b/sound/core/seq/seq.c	2004-08-04 17:48:49 -07:00
@@ -50,8 +50,6 @@
 MODULE_AUTHOR("Frank van de Pol <fvdpol@coil.demon.nl>, Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("Advanced Linux Sound Architecture sequencer.");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_SUPPORTED_DEVICE("sound");
 
 static int boot_devs;
 module_param_array(seq_client_load, int, boot_devs, 0444);
@@ -133,6 +131,7 @@
 EXPORT_SYMBOL(snd_seq_kernel_client_dispatch);
 EXPORT_SYMBOL(snd_seq_kernel_client_ctl);
 EXPORT_SYMBOL(snd_seq_kernel_client_write_poll);
+EXPORT_SYMBOL(snd_seq_set_queue_tempo);
   /* seq_memory.c */
 EXPORT_SYMBOL(snd_seq_expand_var_event);
 EXPORT_SYMBOL(snd_seq_dump_var_event);
diff -Nru a/sound/core/seq/seq_clientmgr.c b/sound/core/seq/seq_clientmgr.c
--- a/sound/core/seq/seq_clientmgr.c	2004-08-04 17:48:48 -07:00
+++ b/sound/core/seq/seq_clientmgr.c	2004-08-04 17:48:48 -07:00
@@ -23,6 +23,7 @@
 
 #include <sound/driver.h>
 #include <linux/init.h>
+#include <linux/smp_lock.h>
 #include <linux/slab.h>
 #include <sound/core.h>
 #include <sound/minors.h>
@@ -202,7 +203,7 @@
 	client_t *client;
 
 	/* init client data */
-	client = snd_kcalloc(sizeof(client_t), GFP_KERNEL);
+	client = kcalloc(1, sizeof(*client), GFP_KERNEL);
 	if (client == NULL)
 		return NULL;
 	client->pool = snd_seq_pool_new(poolsize);
@@ -1694,6 +1695,13 @@
 
 
 /* SET_QUEUE_TEMPO ioctl() */
+int snd_seq_set_queue_tempo(int client, snd_seq_queue_tempo_t *tempo)
+{
+	if (!snd_seq_queue_check_access(tempo->queue, client))
+		return -EPERM;
+	return snd_seq_queue_timer_set_tempo(tempo->queue, client, tempo);
+}
+
 static int snd_seq_ioctl_set_queue_tempo(client_t * client, void __user *arg)
 {
 	int result;
@@ -1702,15 +1710,8 @@
 	if (copy_from_user(&tempo, arg, sizeof(tempo)))
 		return -EFAULT;
 
-	if (snd_seq_queue_check_access(tempo.queue, client->number)) {
-		result = snd_seq_queue_timer_set_tempo(tempo.queue, client->number, &tempo);
-		if (result < 0)
-			return result;
-	} else {
-		return -EPERM;
-	}	
-
-	return 0;
+	result = snd_seq_set_queue_tempo(client->number, &tempo);
+	return result < 0 ? result : 0;
 }
 
 
@@ -2176,10 +2177,15 @@
 			 unsigned int cmd, unsigned long arg)
 {
 	client_t *client = (client_t *) file->private_data;
+	int err;
 
 	snd_assert(client != NULL, return -ENXIO);
 		
-	return snd_seq_do_ioctl(client, cmd, (void __user *) arg);
+	/* FIXME: need to unlock BKL to allow preemption */
+	unlock_kernel();
+	err = snd_seq_do_ioctl(client, cmd, (void __user *) arg);
+	lock_kernel();
+	return err;
 }
 
 
diff -Nru a/sound/core/seq/seq_device.c b/sound/core/seq/seq_device.c
--- a/sound/core/seq/seq_device.c	2004-08-04 17:48:48 -07:00
+++ b/sound/core/seq/seq_device.c	2004-08-04 17:48:48 -07:00
@@ -48,8 +48,6 @@
 MODULE_AUTHOR("Takashi Iwai <tiwai@suse.de>");
 MODULE_DESCRIPTION("ALSA sequencer device management");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_SUPPORTED_DEVICE("sound");
 
 /*
  * driver list
@@ -181,7 +179,7 @@
 	if (ops == NULL)
 		return -ENOMEM;
 
-	dev = snd_magic_kcalloc(snd_seq_device_t, sizeof(*dev) + argsize, GFP_KERNEL);
+	dev = kcalloc(1, sizeof(*dev)*2 + argsize, GFP_KERNEL);
 	if (dev == NULL) {
 		unlock_driver(ops);
 		return -ENOMEM;
@@ -235,7 +233,7 @@
 	free_device(dev, ops);
 	if (dev->private_free)
 		dev->private_free(dev);
-	snd_magic_kfree(dev);
+	kfree(dev);
 
 	unlock_driver(ops);
 
@@ -244,7 +242,7 @@
 
 static int snd_seq_device_dev_free(snd_device_t *device)
 {
-	snd_seq_device_t *dev = snd_magic_cast(snd_seq_device_t, device->device_data, return -ENXIO);
+	snd_seq_device_t *dev = device->device_data;
 	return snd_seq_device_free(dev);
 }
 
@@ -253,7 +251,7 @@
  */
 static int snd_seq_device_dev_register(snd_device_t *device)
 {
-	snd_seq_device_t *dev = snd_magic_cast(snd_seq_device_t, device->device_data, return -ENXIO);
+	snd_seq_device_t *dev = device->device_data;
 	ops_list_t *ops;
 
 	ops = find_driver(dev->id, 0);
@@ -275,7 +273,7 @@
  */
 static int snd_seq_device_dev_disconnect(snd_device_t *device)
 {
-	snd_seq_device_t *dev = snd_magic_cast(snd_seq_device_t, device->device_data, return -ENXIO);
+	snd_seq_device_t *dev = device->device_data;
 	ops_list_t *ops;
 
 	ops = find_driver(dev->id, 0);
@@ -293,7 +291,7 @@
  */
 static int snd_seq_device_dev_unregister(snd_device_t *device)
 {
-	snd_seq_device_t *dev = snd_magic_cast(snd_seq_device_t, device->device_data, return -ENXIO);
+	snd_seq_device_t *dev = device->device_data;
 	return snd_seq_device_free(dev);
 }
 
diff -Nru a/sound/core/seq/seq_dummy.c b/sound/core/seq/seq_dummy.c
--- a/sound/core/seq/seq_dummy.c	2004-08-04 17:48:49 -07:00
+++ b/sound/core/seq/seq_dummy.c	2004-08-04 17:48:49 -07:00
@@ -63,8 +63,6 @@
 MODULE_AUTHOR("Takashi Iwai <tiwai@suse.de>");
 MODULE_DESCRIPTION("ALSA sequencer MIDI-through client");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_SUPPORTED_DEVICE("sound");
 
 static int ports = 1;
 static int duplex = 0;
@@ -95,7 +93,7 @@
 	int i;
 	snd_seq_event_t ev;
 
-	p = snd_magic_cast(snd_seq_dummy_port_t, private_data, return -EINVAL);
+	p = private_data;
 	memset(&ev, 0, sizeof(ev));
 	if (p->duplex)
 		ev.source.port = p->connect;
@@ -122,7 +120,7 @@
 	snd_seq_dummy_port_t *p;
 	snd_seq_event_t tmpev;
 
-	p = snd_magic_cast(snd_seq_dummy_port_t, private_data, return -EINVAL);
+	p = private_data;
 	if (ev->source.client == SNDRV_SEQ_CLIENT_SYSTEM ||
 	    ev->type == SNDRV_SEQ_EVENT_KERNEL_ERROR)
 		return 0; /* ignore system messages */
@@ -150,8 +148,8 @@
 {
 	snd_seq_dummy_port_t *p;
 
-	p = snd_magic_cast(snd_seq_dummy_port_t, private_data, return);
-	snd_magic_kfree(p);
+	p = private_data;
+	kfree(p);
 }
 
 /*
@@ -164,7 +162,7 @@
 	snd_seq_port_callback_t pcb;
 	snd_seq_dummy_port_t *rec;
 
-	if ((rec = snd_magic_kcalloc(snd_seq_dummy_port_t, 0, GFP_KERNEL)) == NULL)
+	if ((rec = kcalloc(1, sizeof(*rec), GFP_KERNEL)) == NULL)
 		return NULL;
 
 	rec->client = my_client;
@@ -190,7 +188,7 @@
 	pcb.private_data = rec;
 	pinfo.kernel = &pcb;
 	if (snd_seq_kernel_client_ctl(my_client, SNDRV_SEQ_IOCTL_CREATE_PORT, &pinfo) < 0) {
-		snd_magic_kfree(rec);
+		kfree(rec);
 		return NULL;
 	}
 	rec->port = pinfo.addr.port;
diff -Nru a/sound/core/seq/seq_fifo.c b/sound/core/seq/seq_fifo.c
--- a/sound/core/seq/seq_fifo.c	2004-08-04 17:48:49 -07:00
+++ b/sound/core/seq/seq_fifo.c	2004-08-04 17:48:49 -07:00
@@ -33,7 +33,7 @@
 {
 	fifo_t *f;
 
-	f = snd_kcalloc(sizeof(fifo_t), GFP_KERNEL);
+	f = kcalloc(1, sizeof(*f), GFP_KERNEL);
 	if (f == NULL) {
 		snd_printd("malloc failed for snd_seq_fifo_new() \n");
 		return NULL;
diff -Nru a/sound/core/seq/seq_instr.c b/sound/core/seq/seq_instr.c
--- a/sound/core/seq/seq_instr.c	2004-08-04 17:48:48 -07:00
+++ b/sound/core/seq/seq_instr.c	2004-08-04 17:48:48 -07:00
@@ -29,8 +29,6 @@
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("Advanced Linux Sound Architecture sequencer instrument library.");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_SUPPORTED_DEVICE("sound");
 
 
 static void snd_instr_lock_ops(snd_seq_kinstr_list_t *list)
@@ -53,10 +51,7 @@
 
 snd_seq_kcluster_t *snd_seq_cluster_new(int atomic)
 {
-	snd_seq_kcluster_t *cluster;
-	
-	cluster = (snd_seq_kcluster_t *) snd_kcalloc(sizeof(snd_seq_kcluster_t), atomic ? GFP_ATOMIC : GFP_KERNEL);
-	return cluster;
+	return kcalloc(1, sizeof(snd_seq_kcluster_t), atomic ? GFP_ATOMIC : GFP_KERNEL);
 }
 
 void snd_seq_cluster_free(snd_seq_kcluster_t *cluster, int atomic)
@@ -70,7 +65,7 @@
 {
 	snd_seq_kinstr_t *instr;
 	
-	instr = (snd_seq_kinstr_t *) snd_kcalloc(sizeof(snd_seq_kinstr_t) + add_len, atomic ? GFP_ATOMIC : GFP_KERNEL);
+	instr = kcalloc(1, sizeof(snd_seq_kinstr_t) + add_len, atomic ? GFP_ATOMIC : GFP_KERNEL);
 	if (instr == NULL)
 		return NULL;
 	instr->add_len = add_len;
@@ -94,7 +89,7 @@
 {
 	snd_seq_kinstr_list_t *list;
 
-	list = (snd_seq_kinstr_list_t *) snd_kcalloc(sizeof(snd_seq_kinstr_list_t), GFP_KERNEL);
+	list = kcalloc(1, sizeof(snd_seq_kinstr_list_t), GFP_KERNEL);
 	if (list == NULL)
 		return NULL;
 	spin_lock_init(&list->lock);
diff -Nru a/sound/core/seq/seq_memory.c b/sound/core/seq/seq_memory.c
--- a/sound/core/seq/seq_memory.c	2004-08-04 17:48:48 -07:00
+++ b/sound/core/seq/seq_memory.c	2004-08-04 17:48:48 -07:00
@@ -95,7 +95,7 @@
 			int size = sizeof(buf);
 			if (len < size)
 				size = len;
-			if (copy_from_user(buf, curptr, size) < 0)
+			if (copy_from_user(buf, curptr, size))
 				return -EFAULT;
 			err = func(private_data, buf, size);
 			if (err < 0)
@@ -158,7 +158,7 @@
 	if (event->data.ext.len & SNDRV_SEQ_EXT_USRPTR) {
 		if (! in_kernel)
 			return -EINVAL;
-		if (copy_from_user(buf, event->data.ext.ptr, len) < 0)
+		if (copy_from_user(buf, event->data.ext.ptr, len))
 			return -EFAULT;
 		return newlen;
 	}
@@ -453,7 +453,7 @@
 	pool_t *pool;
 
 	/* create pool block */
-	pool = snd_kcalloc(sizeof(pool_t), GFP_KERNEL);
+	pool = kcalloc(1, sizeof(*pool), GFP_KERNEL);
 	if (pool == NULL) {
 		snd_printd("seq: malloc failed for pool\n");
 		return NULL;
diff -Nru a/sound/core/seq/seq_midi.c b/sound/core/seq/seq_midi.c
--- a/sound/core/seq/seq_midi.c	2004-08-04 17:48:49 -07:00
+++ b/sound/core/seq/seq_midi.c	2004-08-04 17:48:49 -07:00
@@ -43,8 +43,6 @@
 MODULE_AUTHOR("Frank van de Pol <fvdpol@coil.demon.nl>, Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("Advanced Linux Sound Architecture sequencer MIDI synth.");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_SUPPORTED_DEVICE("sound");
 int output_buffer_size = PAGE_SIZE;
 module_param(output_buffer_size, int, 0644);
 MODULE_PARM_DESC(output_buffer_size, "Output buffer size in bytes.");
@@ -323,7 +321,7 @@
 	client = synths[card->number];
 	if (client == NULL) {
 		newclient = 1;
-		client = snd_kcalloc(sizeof(seq_midisynth_client_t), GFP_KERNEL);
+		client = kcalloc(1, sizeof(*client), GFP_KERNEL);
 		if (client == NULL) {
 			up(&register_mutex);
 			return -ENOMEM;
@@ -341,7 +339,7 @@
 	} else if (device == 0)
 		set_client_name(client, card, &info); /* use the first device's name */
 
-	msynth = snd_kcalloc(sizeof(seq_midisynth_t) * ports, GFP_KERNEL);
+	msynth = kcalloc(ports, sizeof(seq_midisynth_t), GFP_KERNEL);
 	if (msynth == NULL)
 		goto __nomem;
 
diff -Nru a/sound/core/seq/seq_midi_emul.c b/sound/core/seq/seq_midi_emul.c
--- a/sound/core/seq/seq_midi_emul.c	2004-08-04 17:48:49 -07:00
+++ b/sound/core/seq/seq_midi_emul.c	2004-08-04 17:48:49 -07:00
@@ -42,8 +42,6 @@
 MODULE_AUTHOR("Takashi Iwai / Steve Ratcliffe");
 MODULE_DESCRIPTION("Advanced Linux Sound Architecture sequencer MIDI emulation.");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_SUPPORTED_DEVICE("sound");
 
 /* Prototypes for static functions */
 static void note_off(snd_midi_op_t *ops, void *drv, snd_midi_channel_t *chan, int note, int vel);
diff -Nru a/sound/core/seq/seq_midi_event.c b/sound/core/seq/seq_midi_event.c
--- a/sound/core/seq/seq_midi_event.c	2004-08-04 17:48:48 -07:00
+++ b/sound/core/seq/seq_midi_event.c	2004-08-04 17:48:48 -07:00
@@ -118,7 +118,7 @@
 	snd_midi_event_t *dev;
 
 	*rdev = NULL;
-	dev = (snd_midi_event_t *)snd_kcalloc(sizeof(snd_midi_event_t), GFP_KERNEL);
+	dev = kcalloc(1, sizeof(*dev), GFP_KERNEL);
 	if (dev == NULL)
 		return -ENOMEM;
 	if (bufsize > 0) {
diff -Nru a/sound/core/seq/seq_ports.c b/sound/core/seq/seq_ports.c
--- a/sound/core/seq/seq_ports.c	2004-08-04 17:48:49 -07:00
+++ b/sound/core/seq/seq_ports.c	2004-08-04 17:48:49 -07:00
@@ -141,7 +141,7 @@
 	}
 
 	/* create a new port */
-	new_port = snd_kcalloc(sizeof(client_port_t), GFP_KERNEL);
+	new_port = kcalloc(1, sizeof(*new_port), GFP_KERNEL);
 	if (! new_port) {
 		snd_printd("malloc failed for registering client port\n");
 		return NULL;	/* failure, out of memory */
@@ -488,7 +488,7 @@
 	unsigned long flags;
 	int exclusive;
 
-	subs = snd_kcalloc(sizeof(*subs), GFP_KERNEL);
+	subs = kcalloc(1, sizeof(*subs), GFP_KERNEL);
 	if (! subs)
 		return -ENOMEM;
 
diff -Nru a/sound/core/seq/seq_prioq.c b/sound/core/seq/seq_prioq.c
--- a/sound/core/seq/seq_prioq.c	2004-08-04 17:48:48 -07:00
+++ b/sound/core/seq/seq_prioq.c	2004-08-04 17:48:48 -07:00
@@ -59,7 +59,7 @@
 {
 	prioq_t *f;
 
-	f = snd_kcalloc(sizeof(prioq_t), GFP_KERNEL);
+	f = kcalloc(1, sizeof(*f), GFP_KERNEL);
 	if (f == NULL) {
 		snd_printd("oops: malloc failed for snd_seq_prioq_new()\n");
 		return NULL;
diff -Nru a/sound/core/seq/seq_queue.c b/sound/core/seq/seq_queue.c
--- a/sound/core/seq/seq_queue.c	2004-08-04 17:48:49 -07:00
+++ b/sound/core/seq/seq_queue.c	2004-08-04 17:48:49 -07:00
@@ -111,7 +111,7 @@
 {
 	queue_t *q;
 
-	q = snd_kcalloc(sizeof(queue_t), GFP_KERNEL);
+	q = kcalloc(1, sizeof(*q), GFP_KERNEL);
 	if (q == NULL) {
 		snd_printd("malloc failed for snd_seq_queue_new()\n");
 		return NULL;
diff -Nru a/sound/core/seq/seq_timer.c b/sound/core/seq/seq_timer.c
--- a/sound/core/seq/seq_timer.c	2004-08-04 17:48:49 -07:00
+++ b/sound/core/seq/seq_timer.c	2004-08-04 17:48:49 -07:00
@@ -59,7 +59,7 @@
 {
 	seq_timer_t *tmr;
 	
-	tmr = snd_kcalloc(sizeof(seq_timer_t), GFP_KERNEL);
+	tmr = kcalloc(1, sizeof(*tmr), GFP_KERNEL);
 	if (tmr == NULL) {
 		snd_printd("malloc failed for snd_seq_timer_new() \n");
 		return NULL;
diff -Nru a/sound/core/seq/seq_virmidi.c b/sound/core/seq/seq_virmidi.c
--- a/sound/core/seq/seq_virmidi.c	2004-08-04 17:48:49 -07:00
+++ b/sound/core/seq/seq_virmidi.c	2004-08-04 17:48:49 -07:00
@@ -115,7 +115,7 @@
 {
 	snd_virmidi_dev_t *rdev;
 
-	rdev = snd_magic_cast(snd_virmidi_dev_t, rmidi->private_data, return -EINVAL);
+	rdev = rmidi->private_data;
 	return snd_virmidi_dev_receive_event(rdev, ev);
 }
 
@@ -127,7 +127,7 @@
 {
 	snd_virmidi_dev_t *rdev;
 
-	rdev = snd_magic_cast(snd_virmidi_dev_t, private_data, return -EINVAL);
+	rdev = private_data;
 	if (!(rdev->flags & SNDRV_VIRMIDI_USE))
 		return 0; /* ignored */
 	return snd_virmidi_dev_receive_event(rdev, ev);
@@ -138,7 +138,7 @@
  */
 static void snd_virmidi_input_trigger(snd_rawmidi_substream_t * substream, int up)
 {
-	snd_virmidi_t *vmidi = snd_magic_cast(snd_virmidi_t, substream->runtime->private_data, return);
+	snd_virmidi_t *vmidi = substream->runtime->private_data;
 
 	if (up) {
 		vmidi->trigger = 1;
@@ -152,7 +152,7 @@
  */
 static void snd_virmidi_output_trigger(snd_rawmidi_substream_t * substream, int up)
 {
-	snd_virmidi_t *vmidi = snd_magic_cast(snd_virmidi_t, substream->runtime->private_data, return);
+	snd_virmidi_t *vmidi = substream->runtime->private_data;
 	int count, res;
 	unsigned char buf[32], *pbuf;
 
@@ -199,17 +199,17 @@
  */
 static int snd_virmidi_input_open(snd_rawmidi_substream_t * substream)
 {
-	snd_virmidi_dev_t *rdev = snd_magic_cast(snd_virmidi_dev_t, substream->rmidi->private_data, return -EINVAL);
+	snd_virmidi_dev_t *rdev = substream->rmidi->private_data;
 	snd_rawmidi_runtime_t *runtime = substream->runtime;
 	snd_virmidi_t *vmidi;
 	unsigned long flags;
 
-	vmidi = snd_magic_kcalloc(snd_virmidi_t, 0, GFP_KERNEL);
+	vmidi = kcalloc(1, sizeof(*vmidi), GFP_KERNEL);
 	if (vmidi == NULL)
 		return -ENOMEM;
 	vmidi->substream = substream;
 	if (snd_midi_event_new(0, &vmidi->parser) < 0) {
-		snd_magic_kfree(vmidi);
+		kfree(vmidi);
 		return -ENOMEM;
 	}
 	vmidi->seq_mode = rdev->seq_mode;
@@ -228,16 +228,16 @@
  */
 static int snd_virmidi_output_open(snd_rawmidi_substream_t * substream)
 {
-	snd_virmidi_dev_t *rdev = snd_magic_cast(snd_virmidi_dev_t, substream->rmidi->private_data, return -EINVAL);
+	snd_virmidi_dev_t *rdev = substream->rmidi->private_data;
 	snd_rawmidi_runtime_t *runtime = substream->runtime;
 	snd_virmidi_t *vmidi;
 
-	vmidi = snd_magic_kcalloc(snd_virmidi_t, 0, GFP_KERNEL);
+	vmidi = kcalloc(1, sizeof(*vmidi), GFP_KERNEL);
 	if (vmidi == NULL)
 		return -ENOMEM;
 	vmidi->substream = substream;
 	if (snd_midi_event_new(MAX_MIDI_EVENT_BUF, &vmidi->parser) < 0) {
-		snd_magic_kfree(vmidi);
+		kfree(vmidi);
 		return -ENOMEM;
 	}
 	vmidi->seq_mode = rdev->seq_mode;
@@ -254,11 +254,11 @@
  */
 static int snd_virmidi_input_close(snd_rawmidi_substream_t * substream)
 {
-	snd_virmidi_t *vmidi = snd_magic_cast(snd_virmidi_t, substream->runtime->private_data, return -EINVAL);
+	snd_virmidi_t *vmidi = substream->runtime->private_data;
 	snd_midi_event_free(vmidi->parser);
 	list_del(&vmidi->list);
 	substream->runtime->private_data = NULL;
-	snd_magic_kfree(vmidi);
+	kfree(vmidi);
 	return 0;
 }
 
@@ -267,10 +267,10 @@
  */
 static int snd_virmidi_output_close(snd_rawmidi_substream_t * substream)
 {
-	snd_virmidi_t *vmidi = snd_magic_cast(snd_virmidi_t, substream->runtime->private_data, return -EINVAL);
+	snd_virmidi_t *vmidi = substream->runtime->private_data;
 	snd_midi_event_free(vmidi->parser);
 	substream->runtime->private_data = NULL;
-	snd_magic_kfree(vmidi);
+	kfree(vmidi);
 	return 0;
 }
 
@@ -281,7 +281,7 @@
 {
 	snd_virmidi_dev_t *rdev;
 
-	rdev = snd_magic_cast(snd_virmidi_dev_t, private_data, return -EINVAL);
+	rdev = private_data;
 	if (!try_module_get(rdev->card->module))
 		return -EFAULT;
 	rdev->flags |= SNDRV_VIRMIDI_SUBSCRIBE;
@@ -295,7 +295,7 @@
 {
 	snd_virmidi_dev_t *rdev;
 
-	rdev = snd_magic_cast(snd_virmidi_dev_t, private_data, return -EINVAL);
+	rdev = private_data;
 	rdev->flags &= ~SNDRV_VIRMIDI_SUBSCRIBE;
 	module_put(rdev->card->module);
 	return 0;
@@ -309,7 +309,7 @@
 {
 	snd_virmidi_dev_t *rdev;
 
-	rdev = snd_magic_cast(snd_virmidi_dev_t, private_data, return -EINVAL);
+	rdev = private_data;
 	if (!try_module_get(rdev->card->module))
 		return -EFAULT;
 	rdev->flags |= SNDRV_VIRMIDI_USE;
@@ -323,7 +323,7 @@
 {
 	snd_virmidi_dev_t *rdev;
 
-	rdev = snd_magic_cast(snd_virmidi_dev_t, private_data, return -EINVAL);
+	rdev = private_data;
 	rdev->flags &= ~SNDRV_VIRMIDI_USE;
 	module_put(rdev->card->module);
 	return 0;
@@ -424,7 +424,7 @@
  */
 static int snd_virmidi_dev_register(snd_rawmidi_t *rmidi)
 {
-	snd_virmidi_dev_t *rdev = snd_magic_cast(snd_virmidi_dev_t, rmidi->private_data, return -ENXIO);
+	snd_virmidi_dev_t *rdev = rmidi->private_data;
 	int err;
 
 	switch (rdev->seq_mode) {
@@ -451,7 +451,7 @@
  */
 static int snd_virmidi_dev_unregister(snd_rawmidi_t *rmidi)
 {
-	snd_virmidi_dev_t *rdev = snd_magic_cast(snd_virmidi_dev_t, rmidi->private_data, return -ENXIO);
+	snd_virmidi_dev_t *rdev = rmidi->private_data;
 
 	if (rdev->seq_mode == SNDRV_VIRMIDI_SEQ_DISPATCH)
 		snd_virmidi_dev_detach_seq(rdev);
@@ -471,8 +471,8 @@
  */
 static void snd_virmidi_free(snd_rawmidi_t *rmidi)
 {
-	snd_virmidi_dev_t *rdev = snd_magic_cast(snd_virmidi_dev_t, rmidi->private_data, return);
-	snd_magic_kfree(rdev);
+	snd_virmidi_dev_t *rdev = rmidi->private_data;
+	kfree(rdev);
 }
 
 /*
@@ -493,7 +493,7 @@
 				   &rmidi)) < 0)
 		return err;
 	strcpy(rmidi->name, rmidi->id);
-	rdev = snd_magic_kcalloc(snd_virmidi_dev_t, 0, GFP_KERNEL);
+	rdev = kcalloc(1, sizeof(*rdev), GFP_KERNEL);
 	if (rdev == NULL) {
 		snd_device_free(card, rmidi);
 		return -ENOMEM;
diff -Nru a/sound/core/sgbuf.c b/sound/core/sgbuf.c
--- a/sound/core/sgbuf.c	2004-08-04 17:48:49 -07:00
+++ b/sound/core/sgbuf.c	2004-08-04 17:48:49 -07:00
@@ -39,11 +39,13 @@
 	if (! sgbuf)
 		return -EINVAL;
 
+	tmpb.dev.type = SNDRV_DMA_TYPE_DEV;
+	tmpb.dev.dev = sgbuf->dev;
 	for (i = 0; i < sgbuf->pages; i++) {
 		tmpb.area = sgbuf->table[i].buf;
 		tmpb.addr = sgbuf->table[i].addr;
 		tmpb.bytes = PAGE_SIZE;
-		snd_dma_free_pages(&sgbuf->dev, &tmpb);
+		snd_dma_free_pages(&tmpb);
 	}
 	if (dmab->area)
 		vunmap(dmab->area);
@@ -59,7 +61,7 @@
 	return 0;
 }
 
-void *snd_malloc_sgbuf_pages(const struct snd_dma_device *dev,
+void *snd_malloc_sgbuf_pages(struct device *device,
 			     size_t size, struct snd_dma_buffer *dmab,
 			     size_t *res_size)
 {
@@ -73,8 +75,7 @@
 	if (! sgbuf)
 		return NULL;
 	memset(sgbuf, 0, sizeof(*sgbuf));
-	sgbuf->dev = *dev;
-	sgbuf->dev.type = SNDRV_DMA_TYPE_DEV;
+	sgbuf->dev = device;
 	pages = snd_sgbuf_aligned_pages(size);
 	sgbuf->tblsize = sgbuf_align_table(pages);
 	sgbuf->table = kmalloc(sizeof(*sgbuf->table) * sgbuf->tblsize, GFP_KERNEL);
@@ -88,7 +89,7 @@
 
 	/* allocate each page */
 	for (i = 0; i < pages; i++) {
-		if (snd_dma_alloc_pages(&sgbuf->dev, PAGE_SIZE, &tmpb) < 0) {
+		if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, device, PAGE_SIZE, &tmpb) < 0) {
 			if (res_size == NULL)
 				goto _failed;
 			*res_size = size = sgbuf->pages * PAGE_SIZE;
diff -Nru a/sound/core/sound.c b/sound/core/sound.c
--- a/sound/core/sound.c	2004-08-04 17:48:49 -07:00
+++ b/sound/core/sound.c	2004-08-04 17:48:49 -07:00
@@ -44,19 +44,14 @@
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("Advanced Linux Sound Architecture driver for soundcards.");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_SUPPORTED_DEVICE("sound");
 module_param(major, int, 0444);
 MODULE_PARM_DESC(major, "Major # for sound driver.");
-MODULE_PARM_SYNTAX(major, "default:116,skill:devel");
 module_param(cards_limit, int, 0444);
 MODULE_PARM_DESC(cards_limit, "Count of auto-loadable soundcards.");
-MODULE_PARM_SYNTAX(cards_limit, "default:8,skill:advanced");
 MODULE_ALIAS_CHARDEV_MAJOR(CONFIG_SND_MAJOR);
 #ifdef CONFIG_DEVFS_FS
 module_param(device_mode, int, 0444);
 MODULE_PARM_DESC(device_mode, "Device file permission mask for devfs.");
-MODULE_PARM_SYNTAX(device_mode, "default:0666,base:8");
 #endif
 MODULE_ALIAS_CHARDEV_MAJOR(CONFIG_SND_MAJOR);
 
@@ -339,39 +334,29 @@
 static int __init alsa_sound_init(void)
 {
 	short controlnum;
-#ifdef CONFIG_SND_OSSEMUL
 	int err;
-#endif
 	int card;
 
 	snd_major = major;
 	snd_ecards_limit = cards_limit;
 	for (card = 0; card < SNDRV_CARDS; card++)
 		INIT_LIST_HEAD(&snd_minors_hash[card]);
-#ifdef CONFIG_SND_OSSEMUL
 	if ((err = snd_oss_init_module()) < 0)
 		return err;
-#endif
 	devfs_mk_dir("snd");
 	if (register_chrdev(major, "alsa", &snd_fops)) {
 		snd_printk(KERN_ERR "unable to register native major device number %d\n", major);
 		devfs_remove("snd");
 		return -EIO;
 	}
-#ifdef CONFIG_SND_DEBUG_MEMORY
 	snd_memory_init();
-#endif
 	if (snd_info_init() < 0) {
-#ifdef CONFIG_SND_DEBUG_MEMORY
 		snd_memory_done();
-#endif
 		unregister_chrdev(major, "alsa");
 		devfs_remove("snd");
 		return -ENOMEM;
 	}
-#ifdef CONFIG_SND_OSSEMUL
 	snd_info_minor_register();
-#endif
 	for (controlnum = 0; controlnum < cards_limit; controlnum++) {
 		devfs_mk_cdev(MKDEV(major, controlnum<<5), S_IFCHR | device_mode, "snd/controlC%d", controlnum);
 		class_simple_device_add(sound_class, MKDEV(major, controlnum<<5), NULL, "controlC%d", controlnum);
@@ -391,13 +376,9 @@
 		class_simple_device_remove(MKDEV(major, controlnum<<5));
 	}
 
-#ifdef CONFIG_SND_OSSEMUL
 	snd_info_minor_unregister();
-#endif
 	snd_info_done();
-#ifdef CONFIG_SND_DEBUG_MEMORY
 	snd_memory_done();
-#endif
 	if (unregister_chrdev(major, "alsa") != 0)
 		snd_printk(KERN_ERR "unable to unregister major device number %d\n", major);
 	devfs_remove("snd");
@@ -406,24 +387,6 @@
 module_init(alsa_sound_init)
 module_exit(alsa_sound_exit)
 
-#ifndef MODULE
-
-/* format is: snd=major,cards_limit[,device_mode] */
-
-static int __init alsa_sound_setup(char *str)
-{
-	(void)(get_option(&str,&major) == 2 &&
-	       get_option(&str,&cards_limit) == 2);
-#ifdef CONFIG_DEVFS_FS
-	(void)(get_option(&str,&device_mode) == 2);
-#endif
-	return 1;
-}
-
-__setup("snd=", alsa_sound_setup);
-
-#endif /* ifndef MODULE */
-
   /* sound.c */
 EXPORT_SYMBOL(snd_major);
 EXPORT_SYMBOL(snd_ecards_limit);
@@ -439,14 +402,11 @@
   /* memory.c */
 #ifdef CONFIG_SND_DEBUG_MEMORY
 EXPORT_SYMBOL(snd_hidden_kmalloc);
+EXPORT_SYMBOL(snd_hidden_kcalloc);
 EXPORT_SYMBOL(snd_hidden_kfree);
 EXPORT_SYMBOL(snd_hidden_vmalloc);
 EXPORT_SYMBOL(snd_hidden_vfree);
-EXPORT_SYMBOL(_snd_magic_kmalloc);
-EXPORT_SYMBOL(_snd_magic_kcalloc);
-EXPORT_SYMBOL(snd_magic_kfree);
 #endif
-EXPORT_SYMBOL(snd_kcalloc);
 EXPORT_SYMBOL(snd_kmalloc_strdup);
 EXPORT_SYMBOL(copy_to_user_fromio);
 EXPORT_SYMBOL(copy_from_user_toio);
diff -Nru a/sound/core/timer.c b/sound/core/timer.c
--- a/sound/core/timer.c	2004-08-04 17:48:49 -07:00
+++ b/sound/core/timer.c	2004-08-04 17:48:49 -07:00
@@ -22,6 +22,7 @@
 #include <sound/driver.h>
 #include <linux/delay.h>
 #include <linux/init.h>
+#include <linux/smp_lock.h>
 #include <linux/slab.h>
 #include <linux/time.h>
 #include <linux/moduleparam.h>
@@ -46,7 +47,6 @@
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>, Takashi Iwai <tiwai@suse.de>");
 MODULE_DESCRIPTION("ALSA timer interface");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
 module_param(timer_limit, int, 0444);
 MODULE_PARM_DESC(timer_limit, "Maximum global timers in system.");
 
@@ -94,7 +94,7 @@
 static snd_timer_instance_t *snd_timer_instance_new(char *owner, snd_timer_t *timer)
 {
 	snd_timer_instance_t *timeri;
-	timeri = snd_kcalloc(sizeof(snd_timer_instance_t), GFP_KERNEL);
+	timeri = kcalloc(1, sizeof(*timeri), GFP_KERNEL);
 	if (timeri == NULL)
 		return NULL;
 	timeri->owner = snd_kmalloc_strdup(owner, GFP_KERNEL);
@@ -761,7 +761,7 @@
 	snd_assert(tid != NULL, return -EINVAL);
 	snd_assert(rtimer != NULL, return -EINVAL);
 	*rtimer = NULL;
-	timer = snd_magic_kcalloc(snd_timer_t, 0, GFP_KERNEL);
+	timer = kcalloc(1, sizeof(*timer), GFP_KERNEL);
 	if (timer == NULL)
 		return -ENOMEM;
 	timer->tmr_class = tid->dev_class;
@@ -792,19 +792,19 @@
 	snd_assert(timer != NULL, return -ENXIO);
 	if (timer->private_free)
 		timer->private_free(timer);
-	snd_magic_kfree(timer);
+	kfree(timer);
 	return 0;
 }
 
 int snd_timer_dev_free(snd_device_t *device)
 {
-	snd_timer_t *timer = snd_magic_cast(snd_timer_t, device->device_data, return -ENXIO);
+	snd_timer_t *timer = device->device_data;
 	return snd_timer_free(timer);
 }
 
 int snd_timer_dev_register(snd_device_t *dev)
 {
-	snd_timer_t *timer = snd_magic_cast(snd_timer_t, dev->device_data, return -ENXIO);
+	snd_timer_t *timer = dev->device_data;
 	snd_timer_t *timer1;
 	struct list_head *p;
 
@@ -865,7 +865,7 @@
 
 static int snd_timer_dev_unregister(snd_device_t *device)
 {
-	snd_timer_t *timer = snd_magic_cast(snd_timer_t, device->device_data, return -ENXIO);
+	snd_timer_t *timer = device->device_data;
 	return snd_timer_unregister(timer);
 }
 
@@ -1018,7 +1018,7 @@
 		return err;
 	strcpy(timer->name, "system timer");
 	timer->hw = snd_timer_system;
-	priv = (struct snd_timer_system_private *) snd_kcalloc(sizeof(struct snd_timer_system_private), GFP_KERNEL);
+	priv = kcalloc(1, sizeof(*priv), GFP_KERNEL);
 	if (priv == NULL) {
 		snd_timer_free(timer);
 		return -ENOMEM;
@@ -1086,7 +1086,7 @@
 				     unsigned long resolution,
 				     unsigned long ticks)
 {
-	snd_timer_user_t *tu = snd_magic_cast(snd_timer_user_t, timeri->callback_data, return);
+	snd_timer_user_t *tu = timeri->callback_data;
 	snd_timer_read_t *r;
 	int prev;
 	
@@ -1129,7 +1129,7 @@
 				     struct timespec *tstamp,
 				     unsigned long resolution)
 {
-	snd_timer_user_t *tu = snd_magic_cast(snd_timer_user_t, timeri->callback_data, return);
+	snd_timer_user_t *tu = timeri->callback_data;
 	snd_timer_tread_t r1;
 
 	if (event >= SNDRV_TIMER_EVENT_START && event <= SNDRV_TIMER_EVENT_PAUSE)
@@ -1148,7 +1148,7 @@
 				      unsigned long resolution,
 				      unsigned long ticks)
 {
-	snd_timer_user_t *tu = snd_magic_cast(snd_timer_user_t, timeri->callback_data, return);
+	snd_timer_user_t *tu = timeri->callback_data;
 	snd_timer_tread_t *r, r1;
 	struct timespec tstamp;
 	int prev, append = 0;
@@ -1200,7 +1200,7 @@
 {
 	snd_timer_user_t *tu;
 	
-	tu = snd_magic_kcalloc(snd_timer_user_t, 0, GFP_KERNEL);
+	tu = kcalloc(1, sizeof(*tu), GFP_KERNEL);
 	if (tu == NULL)
 		return -ENOMEM;
 	spin_lock_init(&tu->qlock);
@@ -1209,7 +1209,7 @@
 	tu->queue_size = 128;
 	tu->queue = (snd_timer_read_t *)kmalloc(tu->queue_size * sizeof(snd_timer_read_t), GFP_KERNEL);
 	if (tu->queue == NULL) {
-		snd_magic_kfree(tu);
+		kfree(tu);
 		return -ENOMEM;
 	}
 	file->private_data = tu;
@@ -1221,7 +1221,7 @@
 	snd_timer_user_t *tu;
 
 	if (file->private_data) {
-		tu = snd_magic_cast(snd_timer_user_t, file->private_data, return -ENXIO);
+		tu = file->private_data;
 		file->private_data = NULL;
 		fasync_helper(-1, file, 0, &tu->fasync);
 		if (tu->timeri)
@@ -1230,7 +1230,7 @@
 			kfree(tu->queue);
 		if (tu->tqueue)
 			kfree(tu->tqueue);
-		snd_magic_kfree(tu);
+		kfree(tu);
 	}
 	return 0;
 }
@@ -1449,7 +1449,7 @@
 	char str[32];
 	int err;
 	
-	tu = snd_magic_cast(snd_timer_user_t, file->private_data, return -ENXIO);
+	tu = file->private_data;
 	if (tu->timeri)
 		snd_timer_close(tu->timeri);
 	if (copy_from_user(&tselect, _tselect, sizeof(tselect)))
@@ -1495,7 +1495,7 @@
 	snd_timer_info_t info;
 	snd_timer_t *t;
 
-	tu = snd_magic_cast(snd_timer_user_t, file->private_data, return -ENXIO);
+	tu = file->private_data;
 	snd_assert(tu->timeri != NULL, return -ENXIO);
 	t = tu->timeri->timer;
 	snd_assert(t != NULL, return -ENXIO);
@@ -1520,7 +1520,7 @@
 	snd_timer_tread_t *ttr;
 	int err;
 	
-	tu = snd_magic_cast(snd_timer_user_t, file->private_data, return -ENXIO);
+	tu = file->private_data;
 	snd_assert(tu->timeri != NULL, return -ENXIO);
 	t = tu->timeri->timer;
 	snd_assert(t != NULL, return -ENXIO);
@@ -1608,7 +1608,7 @@
 	snd_timer_user_t *tu;
 	snd_timer_status_t status;
 	
-	tu = snd_magic_cast(snd_timer_user_t, file->private_data, return -ENXIO);
+	tu = file->private_data;
 	snd_assert(tu->timeri != NULL, return -ENXIO);
 	memset(&status, 0, sizeof(status));
 	status.tstamp = tu->tstamp;
@@ -1628,7 +1628,7 @@
 	int err;
 	snd_timer_user_t *tu;
 		
-	tu = snd_magic_cast(snd_timer_user_t, file->private_data, return -ENXIO);
+	tu = file->private_data;
 	snd_assert(tu->timeri != NULL, return -ENXIO);
 	snd_timer_stop(tu->timeri);
 	tu->timeri->lost = 0;
@@ -1641,7 +1641,7 @@
 	int err;
 	snd_timer_user_t *tu;
 		
-	tu = snd_magic_cast(snd_timer_user_t, file->private_data, return -ENXIO);
+	tu = file->private_data;
 	snd_assert(tu->timeri != NULL, return -ENXIO);
 	return (err = snd_timer_stop(tu->timeri)) < 0 ? err : 0;
 }
@@ -1651,20 +1651,20 @@
 	int err;
 	snd_timer_user_t *tu;
 		
-	tu = snd_magic_cast(snd_timer_user_t, file->private_data, return -ENXIO);
+	tu = file->private_data;
 	snd_assert(tu->timeri != NULL, return -ENXIO);
 	tu->timeri->lost = 0;
 	return (err = snd_timer_continue(tu->timeri)) < 0 ? err : 0;
 }
 
-static int snd_timer_user_ioctl(struct inode *inode, struct file *file,
-				unsigned int cmd, unsigned long arg)
+static inline int _snd_timer_user_ioctl(struct inode *inode, struct file *file,
+					unsigned int cmd, unsigned long arg)
 {
 	snd_timer_user_t *tu;
 	void __user *argp = (void __user *)arg;
 	int __user *p = argp;
 	
-	tu = snd_magic_cast(snd_timer_user_t, file->private_data, return -ENXIO);
+	tu = file->private_data;
 	switch (cmd) {
 	case SNDRV_TIMER_IOCTL_PVERSION:
 		return put_user(SNDRV_TIMER_VERSION, p) ? -EFAULT : 0;
@@ -1705,12 +1705,23 @@
 	return -ENOTTY;
 }
 
+/* FIXME: need to unlock BKL to allow preemption */
+static int snd_timer_user_ioctl(struct inode *inode, struct file * file,
+				unsigned int cmd, unsigned long arg)
+{
+	int err;
+	unlock_kernel();
+	err = _snd_timer_user_ioctl(inode, file, cmd, arg);
+	lock_kernel();
+	return err;
+}
+
 static int snd_timer_user_fasync(int fd, struct file * file, int on)
 {
 	snd_timer_user_t *tu;
 	int err;
 	
-	tu = snd_magic_cast(snd_timer_user_t, file->private_data, return -ENXIO);
+	tu = file->private_data;
 	err = fasync_helper(fd, file, on, &tu->fasync);
         if (err < 0)
 		return err;
@@ -1723,7 +1734,7 @@
 	long result = 0, unit;
 	int err = 0;
 	
-	tu = snd_magic_cast(snd_timer_user_t, file->private_data, return -ENXIO);
+	tu = file->private_data;
 	unit = tu->tread ? sizeof(snd_timer_tread_t) : sizeof(snd_timer_read_t);
 	spin_lock_irq(&tu->qlock);
 	while ((long)count - result >= unit) {
@@ -1785,7 +1796,7 @@
         unsigned int mask;
         snd_timer_user_t *tu;
 
-        tu = snd_magic_cast(snd_timer_user_t, file->private_data, return 0);
+        tu = file->private_data;
 
         poll_wait(file, &tu->qchange_sleep, wait);
 	
diff -Nru a/sound/drivers/dummy.c b/sound/drivers/dummy.c
--- a/sound/drivers/dummy.c	2004-08-04 17:48:49 -07:00
+++ b/sound/drivers/dummy.c	2004-08-04 17:48:49 -07:00
@@ -34,8 +34,7 @@
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("Dummy soundcard (/dev/null)");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{ALSA,Dummy soundcard}}");
+MODULE_SUPPORTED_DEVICE("{{ALSA,Dummy soundcard}}");
 
 #define MAX_PCM_DEVICES		4
 #define MAX_PCM_SUBSTREAMS	16
@@ -133,22 +132,16 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for dummy soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for dummy soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable this dummy soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(pcm_devs, int, boot_devs, 0444);
 MODULE_PARM_DESC(pcm_devs, "PCM devices # (0-4) for dummy driver.");
-MODULE_PARM_SYNTAX(pcm_devs, SNDRV_ENABLED ",allows:{{0,4}},default:1,dialog:list");
 module_param_array(pcm_substreams, int, boot_devs, 0444);
 MODULE_PARM_DESC(pcm_substreams, "PCM substreams # (1-16) for dummy driver.");
-MODULE_PARM_SYNTAX(pcm_substreams, SNDRV_ENABLED ",allows:{{1,16}},default:8,dialog:list");
 //module_param_array(midi_devs, int, boot_devs, 0444);
 //MODULE_PARM_DESC(midi_devs, "MIDI devices # (0-2) for dummy driver.");
-//MODULE_PARM_SYNTAX(midi_devs, SNDRV_ENABLED ",allows:{{0,2}},default:8,dialog:list");
 
 #define MIXER_ADDR_MASTER	0
 #define MIXER_ADDR_LINE		1
@@ -180,24 +173,10 @@
 static snd_card_t *snd_dummy_cards[SNDRV_CARDS] = SNDRV_DEFAULT_PTR;
 
 
-static int snd_card_dummy_playback_ioctl(snd_pcm_substream_t * substream,
-				         unsigned int cmd,
-				         void *arg)
-{
-	return snd_pcm_lib_ioctl(substream, cmd, arg);
-}
-
-static int snd_card_dummy_capture_ioctl(snd_pcm_substream_t * substream,
-					unsigned int cmd,
-					void *arg)
-{
-	return snd_pcm_lib_ioctl(substream, cmd, arg);
-}
-
 static void snd_card_dummy_pcm_timer_start(snd_pcm_substream_t * substream)
 {
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	snd_card_dummy_pcm_t *dpcm = snd_magic_cast(snd_card_dummy_pcm_t, runtime->private_data, return);
+	snd_card_dummy_pcm_t *dpcm = runtime->private_data;
 
 	dpcm->timer.expires = 1 + jiffies;
 	add_timer(&dpcm->timer);
@@ -206,7 +185,7 @@
 static void snd_card_dummy_pcm_timer_stop(snd_pcm_substream_t * substream)
 {
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	snd_card_dummy_pcm_t *dpcm = snd_magic_cast(snd_card_dummy_pcm_t, runtime->private_data, return);
+	snd_card_dummy_pcm_t *dpcm = runtime->private_data;
 
 	del_timer(&dpcm->timer);
 }
@@ -240,7 +219,7 @@
 static int snd_card_dummy_pcm_prepare(snd_pcm_substream_t * substream)
 {
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	snd_card_dummy_pcm_t *dpcm = snd_magic_cast(snd_card_dummy_pcm_t, runtime->private_data, return -ENXIO);
+	snd_card_dummy_pcm_t *dpcm = runtime->private_data;
 	unsigned int bps;
 
 	bps = runtime->rate * runtime->channels;
@@ -269,7 +248,7 @@
 
 static void snd_card_dummy_pcm_timer_function(unsigned long data)
 {
-	snd_card_dummy_pcm_t *dpcm = snd_magic_cast(snd_card_dummy_pcm_t, (void *)data, return);
+	snd_card_dummy_pcm_t *dpcm = (snd_card_dummy_pcm_t *)data;
 	
 	dpcm->timer.expires = 1 + jiffies;
 	add_timer(&dpcm->timer);
@@ -287,7 +266,7 @@
 static snd_pcm_uframes_t snd_card_dummy_playback_pointer(snd_pcm_substream_t * substream)
 {
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	snd_card_dummy_pcm_t *dpcm = snd_magic_cast(snd_card_dummy_pcm_t, runtime->private_data, return -ENXIO);
+	snd_card_dummy_pcm_t *dpcm = runtime->private_data;
 
 	return bytes_to_frames(runtime, dpcm->pcm_buf_pos);
 }
@@ -295,7 +274,7 @@
 static snd_pcm_uframes_t snd_card_dummy_capture_pointer(snd_pcm_substream_t * substream)
 {
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	snd_card_dummy_pcm_t *dpcm = snd_magic_cast(snd_card_dummy_pcm_t, runtime->private_data, return -ENXIO);
+	snd_card_dummy_pcm_t *dpcm = runtime->private_data;
 
 	return bytes_to_frames(runtime, dpcm->pcm_buf_pos);
 }
@@ -338,8 +317,19 @@
 
 static void snd_card_dummy_runtime_free(snd_pcm_runtime_t *runtime)
 {
-	snd_card_dummy_pcm_t *dpcm = snd_magic_cast(snd_card_dummy_pcm_t, runtime->private_data, return);
-	snd_magic_kfree(dpcm);
+	snd_card_dummy_pcm_t *dpcm = runtime->private_data;
+	kfree(dpcm);
+}
+
+static int snd_card_dummy_hw_params(snd_pcm_substream_t * substream,
+				    snd_pcm_hw_params_t * hw_params)
+{
+	return snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
+}
+
+static int snd_card_dummy_hw_free(snd_pcm_substream_t * substream)
+{
+	return snd_pcm_lib_free_pages(substream);
 }
 
 static int snd_card_dummy_playback_open(snd_pcm_substream_t * substream)
@@ -348,13 +338,9 @@
 	snd_card_dummy_pcm_t *dpcm;
 	int err;
 
-	dpcm = snd_magic_kcalloc(snd_card_dummy_pcm_t, 0, GFP_KERNEL);
+	dpcm = kcalloc(1, sizeof(*dpcm), GFP_KERNEL);
 	if (dpcm == NULL)
 		return -ENOMEM;
-	if ((runtime->dma_area = snd_malloc_pages_fallback(MAX_BUFFER_SIZE, GFP_KERNEL, &runtime->dma_bytes)) == NULL) {
-		snd_magic_kfree(dpcm);
-		return -ENOMEM;
-	}
 	init_timer(&dpcm->timer);
 	dpcm->timer.data = (unsigned long) dpcm;
 	dpcm->timer.function = snd_card_dummy_pcm_timer_function;
@@ -370,7 +356,7 @@
 	if (substream->pcm->device & 2)
 		runtime->hw.info &= ~(SNDRV_PCM_INFO_MMAP|SNDRV_PCM_INFO_MMAP_VALID);
 	if ((err = add_playback_constraints(runtime)) < 0) {
-		snd_magic_kfree(dpcm);
+		kfree(dpcm);
 		return err;
 	}
 
@@ -383,14 +369,9 @@
 	snd_card_dummy_pcm_t *dpcm;
 	int err;
 
-	dpcm = snd_magic_kcalloc(snd_card_dummy_pcm_t, 0, GFP_KERNEL);
+	dpcm = kcalloc(1, sizeof(*dpcm), GFP_KERNEL);
 	if (dpcm == NULL)
 		return -ENOMEM;
-	if ((runtime->dma_area = snd_malloc_pages_fallback(MAX_BUFFER_SIZE, GFP_KERNEL, &runtime->dma_bytes)) == NULL) {
-		snd_magic_kfree(dpcm);
-		return -ENOMEM;
-	}
-	memset(runtime->dma_area, 0, runtime->dma_bytes);
 	init_timer(&dpcm->timer);
 	dpcm->timer.data = (unsigned long) dpcm;
 	dpcm->timer.function = snd_card_dummy_pcm_timer_function;
@@ -406,7 +387,7 @@
 	if (substream->pcm->device & 2)
 		runtime->hw.info &= ~(SNDRV_PCM_INFO_MMAP|SNDRV_PCM_INFO_MMAP_VALID);
 	if ((err = add_capture_constraints(runtime)) < 0) {
-		snd_magic_kfree(dpcm);
+		kfree(dpcm);
 		return err;
 	}
 
@@ -415,24 +396,20 @@
 
 static int snd_card_dummy_playback_close(snd_pcm_substream_t * substream)
 {
-	snd_pcm_runtime_t *runtime = substream->runtime;
-
-	snd_free_pages(runtime->dma_area, runtime->dma_bytes);
 	return 0;
 }
 
 static int snd_card_dummy_capture_close(snd_pcm_substream_t * substream)
 {
-	snd_pcm_runtime_t *runtime = substream->runtime;
-
-	snd_free_pages(runtime->dma_area, runtime->dma_bytes);
 	return 0;
 }
 
 static snd_pcm_ops_t snd_card_dummy_playback_ops = {
 	.open =			snd_card_dummy_playback_open,
 	.close =		snd_card_dummy_playback_close,
-	.ioctl =		snd_card_dummy_playback_ioctl,
+	.ioctl =		snd_pcm_lib_ioctl,
+	.hw_params =		snd_card_dummy_hw_params,
+	.hw_free =		snd_card_dummy_hw_free,
 	.prepare =		snd_card_dummy_playback_prepare,
 	.trigger =		snd_card_dummy_playback_trigger,
 	.pointer =		snd_card_dummy_playback_pointer,
@@ -441,7 +418,9 @@
 static snd_pcm_ops_t snd_card_dummy_capture_ops = {
 	.open =			snd_card_dummy_capture_open,
 	.close =		snd_card_dummy_capture_close,
-	.ioctl =		snd_card_dummy_capture_ioctl,
+	.ioctl =		snd_pcm_lib_ioctl,
+	.hw_params =		snd_card_dummy_hw_params,
+	.hw_free =		snd_card_dummy_hw_free,
 	.prepare =		snd_card_dummy_capture_prepare,
 	.trigger =		snd_card_dummy_capture_trigger,
 	.pointer =		snd_card_dummy_capture_pointer,
@@ -459,6 +438,9 @@
 	pcm->private_data = dummy;
 	pcm->info_flags = 0;
 	strcpy(pcm->name, "Dummy PCM");
+	snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_CONTINUOUS,
+					      snd_dma_continuous_data(GFP_KERNEL),
+					      0, 64*1024);
 	return 0;
 }
 
@@ -479,7 +461,7 @@
  
 static int snd_dummy_volume_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	snd_card_dummy_t *dummy = _snd_kcontrol_chip(kcontrol);
+	snd_card_dummy_t *dummy = snd_kcontrol_chip(kcontrol);
 	unsigned long flags;
 	int addr = kcontrol->private_value;
 
@@ -488,11 +470,11 @@
 	ucontrol->value.integer.value[1] = dummy->mixer_volume[addr][1];
 	spin_unlock_irqrestore(&dummy->mixer_lock, flags);
 	return 0;
-}                                                                                                                                                                                                                                                                                                            
+}
 
 static int snd_dummy_volume_put(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	snd_card_dummy_t *dummy = _snd_kcontrol_chip(kcontrol);
+	snd_card_dummy_t *dummy = snd_kcontrol_chip(kcontrol);
 	unsigned long flags;
 	int change, addr = kcontrol->private_value;
 	int left, right;
@@ -514,7 +496,7 @@
 	dummy->mixer_volume[addr][1] = right;
 	spin_unlock_irqrestore(&dummy->mixer_lock, flags);
 	return change;
-}                                                                                                                                                                                                                                                                                                            
+}
 
 #define DUMMY_CAPSRC(xname, xindex, addr) \
 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .index = xindex, \
@@ -533,7 +515,7 @@
  
 static int snd_dummy_capsrc_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	snd_card_dummy_t *dummy = _snd_kcontrol_chip(kcontrol);
+	snd_card_dummy_t *dummy = snd_kcontrol_chip(kcontrol);
 	unsigned long flags;
 	int addr = kcontrol->private_value;
 
@@ -546,7 +528,7 @@
 
 static int snd_dummy_capsrc_put(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	snd_card_dummy_t *dummy = _snd_kcontrol_chip(kcontrol);
+	snd_card_dummy_t *dummy = snd_kcontrol_chip(kcontrol);
 	unsigned long flags;
 	int change, addr = kcontrol->private_value;
 	int left, right;
@@ -560,9 +542,7 @@
 	dummy->capture_source[addr][1] = right;
 	spin_unlock_irqrestore(&dummy->mixer_lock, flags);
 	return change;
-}                                                                                                                                                                                                                                                                                                            
-
-#define DUMMY_CONTROLS (sizeof(snd_dummy_controls)/sizeof(snd_kcontrol_new_t))
+}
 
 static snd_kcontrol_new_t snd_dummy_controls[] = {
 DUMMY_VOLUME("Master Volume", 0, MIXER_ADDR_MASTER),
@@ -587,7 +567,7 @@
 	spin_lock_init(&dummy->mixer_lock);
 	strcpy(card->mixername, "Dummy Mixer");
 
-	for (idx = 0; idx < DUMMY_CONTROLS; idx++) {
+	for (idx = 0; idx < ARRAY_SIZE(snd_dummy_controls); idx++) {
 		if ((err = snd_ctl_add(card, snd_ctl_new1(&snd_dummy_controls[idx], dummy))) < 0)
 			return err;
 	}
diff -Nru a/sound/drivers/mpu401/mpu401.c b/sound/drivers/mpu401/mpu401.c
--- a/sound/drivers/mpu401/mpu401.c	2004-08-04 17:48:49 -07:00
+++ b/sound/drivers/mpu401/mpu401.c	2004-08-04 17:48:49 -07:00
@@ -42,7 +42,6 @@
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("MPU-401 UART");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
 
 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;	/* Index 0-MAX */
 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;	/* ID for this card */
@@ -56,24 +55,18 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for MPU-401 device.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for MPU-401 device.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable MPU-401 device.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 #ifdef USE_ACPI_PNP
 module_param_array(acpipnp, bool, boot_devs, 0444);
 MODULE_PARM_DESC(acpipnp, "ACPI PnP detection for MPU-401 device.");
-MODULE_PARM_SYNTAX(acpipnp, SNDRV_ENABLED "," SNDRV_BOOLEAN_TRUE_DESC);
 #endif
 module_param_array(port, long, boot_devs, 0444);
 MODULE_PARM_DESC(port, "Port # for MPU-401 device.");
-MODULE_PARM_SYNTAX(port, SNDRV_PORT12_DESC);
 module_param_array(irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(irq, "IRQ # for MPU-401 device.");
-MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC);
 
 #ifndef CONFIG_ACPI_BUS
 struct acpi_device;
diff -Nru a/sound/drivers/mpu401/mpu401_uart.c b/sound/drivers/mpu401/mpu401_uart.c
--- a/sound/drivers/mpu401/mpu401_uart.c	2004-08-04 17:48:48 -07:00
+++ b/sound/drivers/mpu401/mpu401_uart.c	2004-08-04 17:48:48 -07:00
@@ -123,7 +123,7 @@
  */
 irqreturn_t snd_mpu401_uart_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	mpu401_t *mpu = snd_magic_cast(mpu401_t, dev_id, return IRQ_NONE);
+	mpu401_t *mpu = dev_id;
 	
 	if (mpu == NULL)
 		return IRQ_NONE;
@@ -137,7 +137,7 @@
  */
 static void snd_mpu401_uart_timer(unsigned long data)
 {
-	mpu401_t *mpu = snd_magic_cast(mpu401_t, (void *)data, return);
+	mpu401_t *mpu = (mpu401_t *)data;
 
 	spin_lock(&mpu->timer_lock);
 	/*mpu->mode |= MPU401_MODE_TIMER;*/
@@ -235,7 +235,7 @@
 	mpu401_t *mpu;
 	int err;
 
-	mpu = snd_magic_cast(mpu401_t, substream->rmidi->private_data, return -ENXIO);
+	mpu = substream->rmidi->private_data;
 	if (mpu->open_input && (err = mpu->open_input(mpu)) < 0)
 		return err;
 	if (! test_bit(MPU401_MODE_BIT_OUTPUT, &mpu->mode)) {
@@ -253,7 +253,7 @@
 	mpu401_t *mpu;
 	int err;
 
-	mpu = snd_magic_cast(mpu401_t, substream->rmidi->private_data, return -ENXIO);
+	mpu = substream->rmidi->private_data;
 	if (mpu->open_output && (err = mpu->open_output(mpu)) < 0)
 		return err;
 	if (! test_bit(MPU401_MODE_BIT_INPUT, &mpu->mode)) {
@@ -270,7 +270,7 @@
 {
 	mpu401_t *mpu;
 
-	mpu = snd_magic_cast(mpu401_t, substream->rmidi->private_data, return -ENXIO);
+	mpu = substream->rmidi->private_data;
 	clear_bit(MPU401_MODE_BIT_INPUT, &mpu->mode);
 	mpu->substream_input = NULL;
 	if (! test_bit(MPU401_MODE_BIT_OUTPUT, &mpu->mode))
@@ -284,7 +284,7 @@
 {
 	mpu401_t *mpu;
 
-	mpu = snd_magic_cast(mpu401_t, substream->rmidi->private_data, return -ENXIO);
+	mpu = substream->rmidi->private_data;
 	clear_bit(MPU401_MODE_BIT_OUTPUT, &mpu->mode);
 	mpu->substream_output = NULL;
 	if (! test_bit(MPU401_MODE_BIT_INPUT, &mpu->mode))
@@ -303,7 +303,7 @@
 	mpu401_t *mpu;
 	int max = 64;
 
-	mpu = snd_magic_cast(mpu401_t, substream->rmidi->private_data, return);
+	mpu = substream->rmidi->private_data;
 	if (up) {
 		if (! test_and_set_bit(MPU401_MODE_BIT_INPUT_TRIGGER, &mpu->mode)) {
 			/* first time - flush FIFO */
@@ -394,7 +394,7 @@
 	unsigned long flags;
 	mpu401_t *mpu;
 
-	mpu = snd_magic_cast(mpu401_t, substream->rmidi->private_data, return);
+	mpu = substream->rmidi->private_data;
 	if (up) {
 		set_bit(MPU401_MODE_BIT_OUTPUT_TRIGGER, &mpu->mode);
 
@@ -441,14 +441,14 @@
 
 static void snd_mpu401_uart_free(snd_rawmidi_t *rmidi)
 {
-	mpu401_t *mpu = snd_magic_cast(mpu401_t, rmidi->private_data, return);
+	mpu401_t *mpu = rmidi->private_data;
 	if (mpu->irq_flags && mpu->irq >= 0)
 		free_irq(mpu->irq, (void *) mpu);
 	if (mpu->res) {
 		release_resource(mpu->res);
 		kfree_nocheck(mpu->res);
 	}
-	snd_magic_kfree(mpu);
+	kfree(mpu);
 }
 
 /**
@@ -484,7 +484,7 @@
 		*rrawmidi = NULL;
 	if ((err = snd_rawmidi_new(card, "MPU-401U", device, 1, 1, &rmidi)) < 0)
 		return err;
-	mpu = snd_magic_kcalloc(mpu401_t, 0, GFP_KERNEL);
+	mpu = kcalloc(1, sizeof(*mpu), GFP_KERNEL);
 	if (mpu == NULL) {
 		snd_device_free(card, rmidi);
 		return -ENOMEM;
diff -Nru a/sound/drivers/mtpav.c b/sound/drivers/mtpav.c
--- a/sound/drivers/mtpav.c	2004-08-04 17:48:49 -07:00
+++ b/sound/drivers/mtpav.c	2004-08-04 17:48:49 -07:00
@@ -69,8 +69,7 @@
 MODULE_AUTHOR("Michael T. Mayers");
 MODULE_DESCRIPTION("MOTU MidiTimePiece AV multiport MIDI");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{MOTU,MidiTimePiece AV multiport MIDI}}");
+MODULE_SUPPORTED_DEVICE("{{MOTU,MidiTimePiece AV multiport MIDI}}");
 
 // io resources
 #define MTPAV_IOBASE		0x378
@@ -85,19 +84,14 @@
 
 module_param(index, int, 0444);
 MODULE_PARM_DESC(index, "Index value for MotuMTPAV MIDI.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param(id, charp, 0444);
 MODULE_PARM_DESC(id, "ID string for MotuMTPAV MIDI.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param(port, long, 0444);
 MODULE_PARM_DESC(port, "Parallel port # for MotuMTPAV MIDI.");
-MODULE_PARM_SYNTAX(port, SNDRV_ENABLED ",allows:{{0x378},{0x278}},dialog:list");
 module_param(irq, int, 0444);
 MODULE_PARM_DESC(irq, "Parallel IRQ # for MotuMTPAV MIDI.");
-MODULE_PARM_SYNTAX(irq,  SNDRV_ENABLED ",allows:{{7},{5}},dialog:list");
 module_param(hwports, int, 0444);
 MODULE_PARM_DESC(hwports, "Hardware ports # for MotuMTPAV MIDI.");
-MODULE_PARM_SYNTAX(hwports, SNDRV_ENABLED ",allows:{{1,8}},dialog:list");
 
 /*
  *      defines
@@ -419,7 +413,7 @@
 
 static void snd_mtpav_output_timer(unsigned long data)
 {
-	mtpav_t *chip = snd_magic_cast(mtpav_t, (void *)data, return);
+	mtpav_t *chip = (mtpav_t *)data;
 	int p;
 
 	spin_lock(&chip->spinlock);
@@ -587,7 +581,7 @@
 
 static irqreturn_t snd_mtpav_irqh(int irq, void *dev_id, struct pt_regs *regs)
 {
-	mtpav_t *mcard = snd_magic_cast(mtpav_t, dev_id, return IRQ_NONE);
+	mtpav_t *mcard = dev_id;
 
 	//printk("irqh()\n");
 	spin_lock(&mcard->spinlock);
@@ -695,7 +689,7 @@
 
 static mtpav_t *new_mtpav(void)
 {
-	mtpav_t *ncrd = (mtpav_t *) snd_magic_kcalloc(mtpav_t, 0, GFP_KERNEL);
+	mtpav_t *ncrd = kcalloc(1, sizeof(*ncrd), GFP_KERNEL);
 	if (ncrd != NULL) {
 		spin_lock_init(&ncrd->spinlock);
 
@@ -728,7 +722,7 @@
 		release_resource(crd->res_port);
 		kfree_nocheck(crd->res_port);
 	}
-	snd_magic_kfree(crd);
+	kfree(crd);
 }
 
 /*
diff -Nru a/sound/drivers/opl3/opl3_lib.c b/sound/drivers/opl3/opl3_lib.c
--- a/sound/drivers/opl3/opl3_lib.c	2004-08-04 17:48:48 -07:00
+++ b/sound/drivers/opl3/opl3_lib.c	2004-08-04 17:48:48 -07:00
@@ -35,8 +35,6 @@
 MODULE_DESCRIPTION("Routines for control of AdLib FM cards (OPL2/OPL3/OPL4 chips)");
 MODULE_LICENSE("GPL");
 
-#define chip_t opl3_t
-
 extern char snd_opl3_regmap[MAX_OPL2_VOICES][4];
 
 void snd_opl2_command(opl3_t * opl3, unsigned short cmd, unsigned char val)
@@ -322,7 +320,7 @@
 	if (hw == NULL)
 		return;
 
-	opl3 = snd_magic_cast(opl3_t, hw->private_data, return);
+	opl3 = hw->private_data;
 	status = inb(opl3->l_port);
 #if 0
 	snd_printk("AdLib IRQ status = 0x%x\n", status);
@@ -354,13 +352,13 @@
 		release_resource(opl3->res_r_port);
 		kfree_nocheck(opl3->res_r_port);
 	}
-	snd_magic_kfree(opl3);
+	kfree(opl3);
 	return 0;
 }
 
 static int snd_opl3_dev_free(snd_device_t *device)
 {
-	opl3_t *opl3 = snd_magic_cast(opl3_t, device->device_data, return -ENXIO);
+	opl3_t *opl3 = device->device_data;
 	return snd_opl3_free(opl3);
 }
 
@@ -379,7 +377,7 @@
 
 	*ropl3 = NULL;
 
-	opl3 = snd_magic_kcalloc(opl3_t, 0, GFP_KERNEL);
+	opl3 = kcalloc(1, sizeof(*opl3), GFP_KERNEL);
 	if (opl3 == NULL)
 		return -ENOMEM;
 
diff -Nru a/sound/drivers/opl3/opl3_midi.c b/sound/drivers/opl3/opl3_midi.c
--- a/sound/drivers/opl3/opl3_midi.c	2004-08-04 17:48:49 -07:00
+++ b/sound/drivers/opl3/opl3_midi.c	2004-08-04 17:48:49 -07:00
@@ -313,7 +313,7 @@
 	fm_instrument_t *fm;
 	unsigned long flags;
 
-	opl3 = snd_magic_cast(opl3_t, p, return);
+	opl3 = p;
 
 #ifdef DEBUG_MIDI
 	snd_printk("Note on, ch %i, inst %i, note %i, vel %i\n",
@@ -672,7 +672,7 @@
 
 	unsigned long flags;
 
-	opl3 = snd_magic_cast(opl3_t, p, return);
+	opl3 = p;
 
 #ifdef DEBUG_MIDI
 	snd_printk("Note off, ch %i, inst %i, note %i\n",
@@ -712,7 +712,7 @@
 {
   	opl3_t *opl3;
 
-	opl3 = snd_magic_cast(opl3_t, p, return);
+	opl3 = p;
 #ifdef DEBUG_MIDI
 	snd_printk("Key pressure, ch#: %i, inst#: %i\n",
 		   chan->number, chan->midi_program);
@@ -726,7 +726,7 @@
 {
   	opl3_t *opl3;
 
-	opl3 = snd_magic_cast(opl3_t, p, return);
+	opl3 = p;
 #ifdef DEBUG_MIDI
 	snd_printk("Terminate note, ch#: %i, inst#: %i\n",
 		   chan->number, chan->midi_program);
@@ -814,7 +814,7 @@
 {
   	opl3_t *opl3;
 
-	opl3 = snd_magic_cast(opl3_t, p, return);
+	opl3 = p;
 #ifdef DEBUG_MIDI
 	snd_printk("Controller, TYPE = %i, ch#: %i, inst#: %i\n",
 		   type, chan->number, chan->midi_program);
@@ -851,7 +851,7 @@
 {
   	opl3_t *opl3;
 
-	opl3 = snd_magic_cast(opl3_t, p, return);
+	opl3 = p;
 #ifdef DEBUG_MIDI
 	snd_printk("NRPN, ch#: %i, inst#: %i\n",
 		   chan->number, chan->midi_program);
@@ -866,7 +866,7 @@
 {
   	opl3_t *opl3;
 
-	opl3 = snd_magic_cast(opl3_t, p, return);
+	opl3 = p;
 #ifdef DEBUG_MIDI
 	snd_printk("SYSEX\n");
 #endif
diff -Nru a/sound/drivers/opl3/opl3_oss.c b/sound/drivers/opl3/opl3_oss.c
--- a/sound/drivers/opl3/opl3_oss.c	2004-08-04 17:48:48 -07:00
+++ b/sound/drivers/opl3/opl3_oss.c	2004-08-04 17:48:48 -07:00
@@ -57,7 +57,7 @@
 static int snd_opl3_oss_event_input(snd_seq_event_t *ev, int direct,
 				    void *private_data, int atomic, int hop)
 {
-	opl3_t *opl3 = snd_magic_cast(opl3_t, private_data, return -EINVAL);
+	opl3_t *opl3 = private_data;
 
 	if (ev->type != SNDRV_SEQ_EVENT_OSS)
 		snd_midi_process_event(&opl3_ops, ev, opl3->oss_chset);
@@ -68,7 +68,7 @@
 
 static void snd_opl3_oss_free_port(void *private_data)
 {
-	opl3_t *opl3 = snd_magic_cast(opl3_t, private_data, return);
+	opl3_t *opl3 = private_data;
 
 	snd_midi_channel_free_set(opl3->oss_chset);
 }
@@ -156,7 +156,7 @@
 /* open OSS sequencer */
 static int snd_opl3_open_seq_oss(snd_seq_oss_arg_t *arg, void *closure)
 {
-	opl3_t *opl3 = snd_magic_cast(opl3_t, closure, return -EINVAL);
+	opl3_t *opl3 = closure;
 	int err;
 
 	snd_assert(arg != NULL, return -ENXIO);
@@ -182,7 +182,7 @@
 	opl3_t *opl3;
 
 	snd_assert(arg != NULL, return -ENXIO);
-	opl3 = snd_magic_cast(opl3_t, arg->private_data, return -EINVAL);
+	opl3 = arg->private_data;
 
 	snd_opl3_synth_cleanup(opl3);
 
@@ -213,7 +213,7 @@
 	int err = -EINVAL;
 
 	snd_assert(arg != NULL, return -ENXIO);
-	opl3 = snd_magic_cast(opl3_t, arg->private_data, return -EINVAL);
+	opl3 = arg->private_data;
 
 	if ((format == FM_PATCH) || (format == OPL3_PATCH)) {
 		struct sbi_instrument sbi;
@@ -241,7 +241,7 @@
 		}
 
 		size = sizeof(*put) + sizeof(fm_xinstrument_t);
-		put = (snd_seq_instr_header_t *)snd_kcalloc(size, GFP_KERNEL);
+		put = kcalloc(1, size, GFP_KERNEL);
 		if (put == NULL)
 			return -ENOMEM;
 		/* build header */
@@ -325,7 +325,7 @@
 	opl3_t *opl3;
 
 	snd_assert(arg != NULL, return -ENXIO);
-	opl3 = snd_magic_cast(opl3_t, arg->private_data, return -EINVAL);
+	opl3 = arg->private_data;
 	switch (cmd) {
 		case SNDCTL_FM_LOAD_INSTR:
 			snd_printk("OPL3: Obsolete ioctl(SNDCTL_FM_LOAD_INSTR) used. Fix the program.\n");
@@ -350,7 +350,7 @@
 	opl3_t *opl3;
 
 	snd_assert(arg != NULL, return -ENXIO);
-	opl3 = snd_magic_cast(opl3_t, arg->private_data, return -EINVAL);
+	opl3 = arg->private_data;
 
 	return 0;
 }
diff -Nru a/sound/drivers/opl3/opl3_seq.c b/sound/drivers/opl3/opl3_seq.c
--- a/sound/drivers/opl3/opl3_seq.c	2004-08-04 17:48:49 -07:00
+++ b/sound/drivers/opl3/opl3_seq.c	2004-08-04 17:48:49 -07:00
@@ -30,7 +30,6 @@
 MODULE_AUTHOR("Uros Bizjak <uros@kss-loka.si>");
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("ALSA driver for OPL3 FM synth");
-MODULE_CLASSES("{sound}");
 
 int use_internal_drums = 0;
 module_param(use_internal_drums, bool, 0444);
@@ -99,7 +98,7 @@
 
 int snd_opl3_synth_use(void *private_data, snd_seq_port_subscribe_t * info)
 {
-	opl3_t *opl3 = snd_magic_cast(opl3_t, private_data, return -ENXIO);
+	opl3_t *opl3 = private_data;
 	int err;
 
 	if ((err = snd_opl3_synth_setup(opl3)) < 0)
@@ -126,7 +125,7 @@
 
 int snd_opl3_synth_unuse(void *private_data, snd_seq_port_subscribe_t * info)
 {
-	opl3_t *opl3 = snd_magic_cast(opl3_t, private_data, return -ENXIO);
+	opl3_t *opl3 = private_data;
 
 	snd_opl3_synth_cleanup(opl3);
 
@@ -151,7 +150,7 @@
 static int snd_opl3_synth_event_input(snd_seq_event_t * ev, int direct,
 				      void *private_data, int atomic, int hop)
 {
-	opl3_t *opl3 = snd_magic_cast(opl3_t, private_data, return -EINVAL);
+	opl3_t *opl3 = private_data;
 
 	if (ev->type >= SNDRV_SEQ_EVENT_INSTR_BEGIN &&
 	    ev->type <= SNDRV_SEQ_EVENT_INSTR_CHANGE) {
@@ -169,7 +168,7 @@
 
 static void snd_opl3_synth_free_port(void *private_data)
 {
-	opl3_t *opl3 = snd_magic_cast(opl3_t, private_data, return);
+	opl3_t *opl3 = private_data;
 
 	snd_midi_channel_free_set(opl3->chset);
 }
diff -Nru a/sound/drivers/opl3/opl3_synth.c b/sound/drivers/opl3/opl3_synth.c
--- a/sound/drivers/opl3/opl3_synth.c	2004-08-04 17:48:49 -07:00
+++ b/sound/drivers/opl3/opl3_synth.c	2004-08-04 17:48:49 -07:00
@@ -74,7 +74,7 @@
  */
 int snd_opl3_open(snd_hwdep_t * hw, struct file *file)
 {
-	opl3_t *opl3 = snd_magic_cast(opl3_t, hw->private_data, return -ENXIO);
+	opl3_t *opl3 = hw->private_data;
 
 	down(&opl3->access_mutex);
 	if (opl3->used) {
@@ -93,7 +93,7 @@
 int snd_opl3_ioctl(snd_hwdep_t * hw, struct file *file,
 		   unsigned int cmd, unsigned long arg)
 {
-	opl3_t *opl3 = snd_magic_cast(opl3_t, hw->private_data, return -ENXIO);
+	opl3_t *opl3 = hw->private_data;
 	void __user *argp = (void __user *)arg;
 
 	snd_assert(opl3 != NULL, return -EINVAL);
@@ -176,7 +176,7 @@
  */
 int snd_opl3_release(snd_hwdep_t * hw, struct file *file)
 {
-	opl3_t *opl3 = snd_magic_cast(opl3_t, hw->private_data, return -ENXIO);
+	opl3_t *opl3 = hw->private_data;
 
 	snd_opl3_reset(opl3);
 	down(&opl3->access_mutex);
diff -Nru a/sound/drivers/opl4/Makefile b/sound/drivers/opl4/Makefile
--- a/sound/drivers/opl4/Makefile	2004-08-04 17:48:49 -07:00
+++ b/sound/drivers/opl4/Makefile	2004-08-04 17:48:49 -07:00
@@ -15,4 +15,4 @@
 sequencer = $(if $(subst y,,$(CONFIG_SND_SEQUENCER)),$(if $(1),m),$(if $(CONFIG_SND_SEQUENCER),$(1)))
 
 obj-$(CONFIG_SND_OPL4_LIB) += snd-opl4-lib.o
-obj-$(call sequencer,$(CONFIG_SND_OPL4_LIB)) += snd-opl4-synth.o
\ No newline at end of file
+obj-$(call sequencer,$(CONFIG_SND_OPL4_LIB)) += snd-opl4-synth.o
diff -Nru a/sound/drivers/opl4/opl4_lib.c b/sound/drivers/opl4/opl4_lib.c
--- a/sound/drivers/opl4/opl4_lib.c	2004-08-04 17:48:49 -07:00
+++ b/sound/drivers/opl4/opl4_lib.c	2004-08-04 17:48:49 -07:00
@@ -26,7 +26,6 @@
 MODULE_AUTHOR("Clemens Ladisch <clemens@ladisch.de>");
 MODULE_DESCRIPTION("OPL4 driver");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
 
 static void inline snd_opl4_wait(opl4_t *opl4)
 {
@@ -37,62 +36,68 @@
 
 void snd_opl4_write(opl4_t *opl4, u8 reg, u8 value)
 {
-	unsigned long flags;
-
-	spin_lock_irqsave(&opl4->reg_lock, flags);
-
 	snd_opl4_wait(opl4);
 	outb(reg, opl4->pcm_port);
 
 	snd_opl4_wait(opl4);
 	outb(value, opl4->pcm_port + 1);
-
-	spin_unlock_irqrestore(&opl4->reg_lock, flags);
 }
 
 u8 snd_opl4_read(opl4_t *opl4, u8 reg)
 {
-	unsigned long flags;
-	u8 value;
-
-	spin_lock_irqsave(&opl4->reg_lock, flags);
-
 	snd_opl4_wait(opl4);
 	outb(reg, opl4->pcm_port);
 
 	snd_opl4_wait(opl4);
-	value = inb(opl4->pcm_port + 1);
-
-	spin_unlock_irqrestore(&opl4->reg_lock, flags);
-	return value;
+	return inb(opl4->pcm_port + 1);
 }
 
 void snd_opl4_read_memory(opl4_t *opl4, char *buf, int offset, int size)
 {
-	u8 memcfg = snd_opl4_read(opl4, OPL4_REG_MEMORY_CONFIGURATION);
+	unsigned long flags;
+	u8 memcfg;
+
+	spin_lock_irqsave(&opl4->reg_lock, flags);
+
+	memcfg = snd_opl4_read(opl4, OPL4_REG_MEMORY_CONFIGURATION);
 	snd_opl4_write(opl4, OPL4_REG_MEMORY_CONFIGURATION, memcfg | OPL4_MODE_BIT);
 
 	snd_opl4_write(opl4, OPL4_REG_MEMORY_ADDRESS_HIGH, offset >> 16);
 	snd_opl4_write(opl4, OPL4_REG_MEMORY_ADDRESS_MID, offset >> 8);
 	snd_opl4_write(opl4, OPL4_REG_MEMORY_ADDRESS_LOW, offset);
-	for (; size > 0; size--)
-		*buf++ = snd_opl4_read(opl4, OPL4_REG_MEMORY_DATA);
+
+	snd_opl4_wait(opl4);
+	outb(OPL4_REG_MEMORY_DATA, opl4->pcm_port);
+	snd_opl4_wait(opl4);
+	insb(opl4->pcm_port + 1, buf, size);
 
 	snd_opl4_write(opl4, OPL4_REG_MEMORY_CONFIGURATION, memcfg);
+
+	spin_unlock_irqrestore(&opl4->reg_lock, flags);
 }
 
 void snd_opl4_write_memory(opl4_t *opl4, const char *buf, int offset, int size)
 {
-	u8 memcfg = snd_opl4_read(opl4, OPL4_REG_MEMORY_CONFIGURATION);
+	unsigned long flags;
+	u8 memcfg;
+
+	spin_lock_irqsave(&opl4->reg_lock, flags);
+
+	memcfg = snd_opl4_read(opl4, OPL4_REG_MEMORY_CONFIGURATION);
 	snd_opl4_write(opl4, OPL4_REG_MEMORY_CONFIGURATION, memcfg | OPL4_MODE_BIT);
 
 	snd_opl4_write(opl4, OPL4_REG_MEMORY_ADDRESS_HIGH, offset >> 16);
 	snd_opl4_write(opl4, OPL4_REG_MEMORY_ADDRESS_MID, offset >> 8);
 	snd_opl4_write(opl4, OPL4_REG_MEMORY_ADDRESS_LOW, offset);
-	for (; size > 0; size--)
-		snd_opl4_write(opl4, OPL4_REG_MEMORY_DATA, *buf++);
+
+	snd_opl4_wait(opl4);
+	outb(OPL4_REG_MEMORY_DATA, opl4->pcm_port);
+	snd_opl4_wait(opl4);
+	outsb(opl4->pcm_port + 1, buf, size);
 
 	snd_opl4_write(opl4, OPL4_REG_MEMORY_CONFIGURATION, memcfg);
+
+	spin_unlock_irqrestore(&opl4->reg_lock, flags);
 }
 
 static void snd_opl4_enable_opl4(opl4_t *opl4)
@@ -141,7 +146,7 @@
 #if defined(CONFIG_SND_SEQUENCER) || (defined(MODULE) && defined(CONFIG_SND_SEQUENCER_MODULE))
 static void snd_opl4_seq_dev_free(snd_seq_device_t *seq_dev)
 {
-	opl4_t *opl4 = snd_magic_cast(opl4_t, seq_dev->private_data, return);
+	opl4_t *opl4 = seq_dev->private_data;
 	opl4->seq_dev = NULL;
 }
 
@@ -172,12 +177,12 @@
 		release_resource(opl4->res_pcm_port);
 		kfree_nocheck(opl4->res_pcm_port);
 	}
-	snd_magic_kfree(opl4);
+	kfree(opl4);
 }
 
 static int snd_opl4_dev_free(snd_device_t *device)
 {
-	opl4_t *opl4 = snd_magic_cast(opl4_t, device->device_data, return -ENXIO);
+	opl4_t *opl4 = device->device_data;
 	snd_opl4_free(opl4);
 	return 0;
 }
@@ -199,7 +204,7 @@
 	if (ropl4)
 		*ropl4 = NULL;
 
-	opl4 = snd_magic_kcalloc(opl4_t, 0, GFP_KERNEL);
+	opl4 = kcalloc(1, sizeof(*opl4), GFP_KERNEL);
 	if (!opl4)
 		return -ENOMEM;
 
@@ -231,7 +236,7 @@
 	}
 
 	/* opl3 initialization disabled opl4, so reenable */
-	snd_opl4_enable_opl4(opl4); 
+	snd_opl4_enable_opl4(opl4);
 
 	err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, opl4, &ops);
 	if (err < 0) {
diff -Nru a/sound/drivers/opl4/opl4_local.h b/sound/drivers/opl4/opl4_local.h
--- a/sound/drivers/opl4/opl4_local.h	2004-08-04 17:48:49 -07:00
+++ b/sound/drivers/opl4/opl4_local.h	2004-08-04 17:48:49 -07:00
@@ -195,7 +195,6 @@
 	opl4_voice_t voices[OPL4_MAX_VOICES];
 	struct list_head off_voices;
 	struct list_head on_voices;
-	spinlock_t voices_lock;
 #endif
 };
 
diff -Nru a/sound/drivers/opl4/opl4_mixer.c b/sound/drivers/opl4/opl4_mixer.c
--- a/sound/drivers/opl4/opl4_mixer.c	2004-08-04 17:48:48 -07:00
+++ b/sound/drivers/opl4/opl4_mixer.c	2004-08-04 17:48:48 -07:00
@@ -20,8 +20,6 @@
 #include "opl4_local.h"
 #include <sound/control.h>
 
-#define chip_t opl4_t
-
 static int snd_opl4_ctl_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo)
 {
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
@@ -34,10 +32,13 @@
 static int snd_opl4_ctl_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
 {
 	opl4_t *opl4 = snd_kcontrol_chip(kcontrol);
+	unsigned long flags;
 	u8 reg = kcontrol->private_value;
 	u8 value;
 
+	spin_lock_irqsave(&opl4->reg_lock, flags);
 	value = snd_opl4_read(opl4, reg);
+	spin_unlock_irqrestore(&opl4->reg_lock, flags);
 	ucontrol->value.integer.value[0] = 7 - (value & 7);
 	ucontrol->value.integer.value[1] = 7 - ((value >> 3) & 7);
 	return 0;
@@ -46,13 +47,16 @@
 static int snd_opl4_ctl_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
 {
 	opl4_t *opl4 = snd_kcontrol_chip(kcontrol);
+	unsigned long flags;
 	u8 reg = kcontrol->private_value;
 	u8 value, old_value;
 
 	value = (7 - (ucontrol->value.integer.value[0] & 7)) |
 		((7 - (ucontrol->value.integer.value[1] & 7)) << 3);
+	spin_lock_irqsave(&opl4->reg_lock, flags);
 	old_value = snd_opl4_read(opl4, reg);
 	snd_opl4_write(opl4, reg, value);
+	spin_unlock_irqrestore(&opl4->reg_lock, flags);
 	return value != old_value;
 }
 
@@ -80,9 +84,7 @@
 	snd_card_t *card = opl4->card;
 	int i, err;
 
-#if 0	/* already set by the codec driver */
-	strcpy(card->mixername, "OPL4 Mixer");
-#endif
+	strcat(card->mixername, ",OPL4");
 
 	for (i = 0; i < 2; ++i) {
 		err = snd_ctl_add(card, snd_ctl_new1(&snd_opl4_controls[i], opl4));
diff -Nru a/sound/drivers/opl4/opl4_proc.c b/sound/drivers/opl4/opl4_proc.c
--- a/sound/drivers/opl4/opl4_proc.c	2004-08-04 17:48:49 -07:00
+++ b/sound/drivers/opl4/opl4_proc.c	2004-08-04 17:48:49 -07:00
@@ -26,7 +26,7 @@
 static int snd_opl4_mem_proc_open(snd_info_entry_t *entry,
 				  unsigned short mode, void **file_private_data)
 {
-	opl4_t *opl4 = snd_magic_cast(opl4_t, entry->private_data, return -ENXIO);
+	opl4_t *opl4 = entry->private_data;
 
 	down(&opl4->access_mutex);
 	if (opl4->memory_access) {
@@ -41,7 +41,7 @@
 static int snd_opl4_mem_proc_release(snd_info_entry_t *entry,
 				     unsigned short mode, void *file_private_data)
 {
-	opl4_t *opl4 = snd_magic_cast(opl4_t, entry->private_data, return -ENXIO);
+	opl4_t *opl4 = entry->private_data;
 
 	down(&opl4->access_mutex);
 	opl4->memory_access--;
@@ -52,7 +52,7 @@
 static long snd_opl4_mem_proc_read(snd_info_entry_t *entry, void *file_private_data,
 				   struct file *file, char __user *_buf, long count)
 {
-	opl4_t *opl4 = snd_magic_cast(opl4_t, entry->private_data, return -ENXIO);
+	opl4_t *opl4 = entry->private_data;
 	long size;
 	char* buf;
 
@@ -78,7 +78,7 @@
 static long snd_opl4_mem_proc_write(snd_info_entry_t *entry, void *file_private_data,
 				    struct file *file, const char __user *_buf, long count)
 {
-	opl4_t *opl4 = snd_magic_cast(opl4_t, entry->private_data, return -ENXIO);
+	opl4_t *opl4 = entry->private_data;
 	long size;
 	char *buf;
 
diff -Nru a/sound/drivers/opl4/opl4_seq.c b/sound/drivers/opl4/opl4_seq.c
--- a/sound/drivers/opl4/opl4_seq.c	2004-08-04 17:48:49 -07:00
+++ b/sound/drivers/opl4/opl4_seq.c	2004-08-04 17:48:49 -07:00
@@ -39,13 +39,11 @@
 MODULE_AUTHOR("Clemens Ladisch <clemens@ladisch.de>");
 MODULE_DESCRIPTION("OPL4 wavetable synth driver");
 MODULE_LICENSE("Dual BSD/GPL");
-MODULE_CLASSES("{sound}");
 
 int volume_boost = 8;
 
 module_param(volume_boost, int, 0644);
 MODULE_PARM_DESC(volume_boost, "Additional volume for OPL4 wavetable sounds.");
-MODULE_PARM_SYNTAX(volume_boost, "default:8");
 
 static int snd_opl4_seq_use_inc(opl4_t *opl4)
 {
@@ -61,7 +59,7 @@
 
 static int snd_opl4_seq_use(void *private_data, snd_seq_port_subscribe_t *info)
 {
-	opl4_t *opl4 = snd_magic_cast(opl4_t, private_data, return -ENXIO);
+	opl4_t *opl4 = private_data;
 	int err;
 
 	down(&opl4->access_mutex);
@@ -88,7 +86,7 @@
 
 static int snd_opl4_seq_unuse(void *private_data, snd_seq_port_subscribe_t *info)
 {
-	opl4_t *opl4 = snd_magic_cast(opl4_t, private_data, return -ENXIO);
+	opl4_t *opl4 = private_data;
 
 	snd_opl4_synth_shutdown(opl4);
 
@@ -112,7 +110,7 @@
 static int snd_opl4_seq_event_input(snd_seq_event_t *ev, int direct,
 				    void *private_data, int atomic, int hop)
 {
-	opl4_t *opl4 = snd_magic_cast(opl4_t, private_data, return -ENXIO);
+	opl4_t *opl4 = private_data;
 
 	snd_midi_process_event(&opl4_ops, ev, opl4->chset);
 	return 0;
@@ -120,7 +118,7 @@
 
 static void snd_opl4_seq_free_port(void *private_data)
 {
-	opl4_t *opl4 = snd_magic_cast(opl4_t, private_data, return);
+	opl4_t *opl4 = private_data;
 
 	snd_midi_channel_free_set(opl4->chset);
 }
diff -Nru a/sound/drivers/opl4/opl4_synth.c b/sound/drivers/opl4/opl4_synth.c
--- a/sound/drivers/opl4/opl4_synth.c	2004-08-04 17:48:49 -07:00
+++ b/sound/drivers/opl4/opl4_synth.c	2004-08-04 17:48:49 -07:00
@@ -272,12 +272,14 @@
  */
 void snd_opl4_synth_reset(opl4_t *opl4)
 {
+	unsigned long flags;
 	int i;
 
+	spin_lock_irqsave(&opl4->reg_lock, flags);
 	for (i = 0; i < OPL4_MAX_VOICES; i++)
 		snd_opl4_write(opl4, OPL4_REG_MISC + i, OPL4_DAMP_BIT);
+	spin_unlock_irqrestore(&opl4->reg_lock, flags);
 
-	spin_lock_init(&opl4->voices_lock);
 	INIT_LIST_HEAD(&opl4->off_voices);
 	INIT_LIST_HEAD(&opl4->on_voices);
 	memset(opl4->voices, 0, sizeof(opl4->voices));
@@ -294,11 +296,14 @@
  */
 void snd_opl4_synth_shutdown(opl4_t *opl4)
 {
+	unsigned long flags;
 	int i;
 
+	spin_lock_irqsave(&opl4->reg_lock, flags);
 	for (i = 0; i < OPL4_MAX_VOICES; i++)
 		snd_opl4_write(opl4, OPL4_REG_MISC + i,
 			       opl4->voices[i].reg_misc & ~OPL4_KEY_ON_BIT);
+	spin_unlock_irqrestore(&opl4->reg_lock, flags);
 }
 
 /*
@@ -311,14 +316,14 @@
 	unsigned long flags;
 	opl4_voice_t *voice;
 
-	spin_lock_irqsave(&opl4->voices_lock, flags);
+	spin_lock_irqsave(&opl4->reg_lock, flags);
 	for (i = 0; i < OPL4_MAX_VOICES; i++) {
 		voice = &opl4->voices[i];
 		if (voice->chan == chan && voice->note == note) {
 			func(opl4, voice);
 		}
 	}
-	spin_unlock_irqrestore(&opl4->voices_lock, flags);
+	spin_unlock_irqrestore(&opl4->reg_lock, flags);
 }
 
 /*
@@ -331,14 +336,14 @@
 	unsigned long flags;
 	opl4_voice_t *voice;
 
-	spin_lock_irqsave(&opl4->voices_lock, flags);
+	spin_lock_irqsave(&opl4->reg_lock, flags);
 	for (i = 0; i < OPL4_MAX_VOICES; i++) {
 		voice = &opl4->voices[i];
 		if (voice->chan == chan) {
 			func(opl4, voice);
 		}
 	}
-	spin_unlock_irqrestore(&opl4->voices_lock, flags);
+	spin_unlock_irqrestore(&opl4->reg_lock, flags);
 }
 
 /*
@@ -351,13 +356,13 @@
 	unsigned long flags;
 	opl4_voice_t *voice;
 
-	spin_lock_irqsave(&opl4->voices_lock, flags);
+	spin_lock_irqsave(&opl4->reg_lock, flags);
 	for (i = 0; i < OPL4_MAX_VOICES; i++) {
 		voice = &opl4->voices[i];
 		if (voice->chan)
 			func(opl4, voice);
 	}
-	spin_unlock_irqrestore(&opl4->voices_lock, flags);
+	spin_unlock_irqrestore(&opl4->reg_lock, flags);
 }
 
 static void snd_opl4_update_volume(opl4_t *opl4, opl4_voice_t *voice)
@@ -472,7 +477,7 @@
 
 void snd_opl4_note_on(void *private_data, int note, int vel, snd_midi_channel_t *chan)
 {
-	opl4_t *opl4 = snd_magic_cast(opl4_t, private_data, return);
+	opl4_t *opl4 = private_data;
 	const opl4_region_ptr_t *regions;
 	opl4_voice_t *voice[2];
 	const opl4_sound_t *sound[2];
@@ -492,7 +497,7 @@
 	}
 
 	/* allocate and initialize the needed voices */
-	spin_lock_irqsave(&opl4->voices_lock, flags);
+	spin_lock_irqsave(&opl4->reg_lock, flags);
 	for (i = 0; i < voices; i++) {
 		voice[i] = snd_opl4_get_voice(opl4);
 		list_del(&voice[i]->list);
@@ -502,7 +507,6 @@
 		voice[i]->velocity = vel & 0x7f;
 		voice[i]->sound = sound[i];
 	}
-	spin_unlock_irqrestore(&opl4->voices_lock, flags);
 
 	/* set tone number (triggers header loading) */
 	for (i = 0; i < voices; i++) {
@@ -522,11 +526,13 @@
 		voice[i]->level_direct = OPL4_LEVEL_DIRECT_BIT;
 		snd_opl4_update_volume(opl4, voice[i]);
 	}
+	spin_unlock_irqrestore(&opl4->reg_lock, flags);
 
 	/* wait for completion of loading */
 	snd_opl4_wait_for_wave_headers(opl4);
 
 	/* set remaining parameters */
+	spin_lock_irqsave(&opl4->reg_lock, flags);
 	for (i = 0; i < voices; i++) {
 		snd_opl4_update_tone_parameters(opl4, voice[i]);
 		voice[i]->reg_lfo_vibrato = voice[i]->sound->reg_lfo_vibrato;
@@ -540,6 +546,7 @@
 		snd_opl4_write(opl4, OPL4_REG_MISC + voice[i]->number,
 			       voice[i]->reg_misc);
 	}
+	spin_unlock_irqrestore(&opl4->reg_lock, flags);
 }
 
 static void snd_opl4_voice_off(opl4_t *opl4, opl4_voice_t *voice)
@@ -553,7 +560,7 @@
 
 void snd_opl4_note_off(void *private_data, int note, int vel, snd_midi_channel_t *chan)
 {
-	opl4_t *opl4 = snd_magic_cast(opl4_t, private_data, return);
+	opl4_t *opl4 = private_data;
 
 	snd_opl4_do_for_note(opl4, note, chan, snd_opl4_voice_off);
 }
@@ -569,14 +576,14 @@
 
 void snd_opl4_terminate_note(void *private_data, int note, snd_midi_channel_t *chan)
 {
-	opl4_t *opl4 = snd_magic_cast(opl4_t, private_data, return);
+	opl4_t *opl4 = private_data;
 
 	snd_opl4_do_for_note(opl4, note, chan, snd_opl4_terminate_voice);
 }
 
 void snd_opl4_control(void *private_data, int type, snd_midi_channel_t *chan)
 {
-	opl4_t *opl4 = snd_magic_cast(opl4_t, private_data, return);
+	opl4_t *opl4 = private_data;
 
 	switch (type) {
 	case MIDI_CTL_MSB_MODWHEEL:
@@ -616,7 +623,7 @@
 void snd_opl4_sysex(void *private_data, unsigned char *buf, int len,
 		    int parsed, snd_midi_channel_set_t *chset)
 {
-	opl4_t *opl4 = snd_magic_cast(opl4_t, private_data, return);
+	opl4_t *opl4 = private_data;
 
 	if (parsed == SNDRV_MIDI_SYSEX_GS_MASTER_VOLUME)
 		snd_opl4_do_for_all(opl4, snd_opl4_update_volume);
diff -Nru a/sound/drivers/serial-u16550.c b/sound/drivers/serial-u16550.c
--- a/sound/drivers/serial-u16550.c	2004-08-04 17:48:48 -07:00
+++ b/sound/drivers/serial-u16550.c	2004-08-04 17:48:48 -07:00
@@ -46,8 +46,7 @@
 
 MODULE_DESCRIPTION("MIDI serial u16550");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{ALSA, MIDI serial u16550}}");
+MODULE_SUPPORTED_DEVICE("{{ALSA, MIDI serial u16550}}");
 
 #define SNDRV_SERIAL_SOUNDCANVAS 0 /* Roland Soundcanvas; F5 NN selects part */
 #define SNDRV_SERIAL_MS124T 1      /* Midiator MS-124T */
@@ -81,38 +80,27 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for Serial MIDI.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for Serial MIDI.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable UART16550A chip.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(port, long, boot_devs, 0444);
 MODULE_PARM_DESC(port, "Port # for UART16550A chip.");
-MODULE_PARM_SYNTAX(port, SNDRV_PORT12_DESC);
 module_param_array(irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(irq, "IRQ # for UART16550A chip.");
-MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC);
 module_param_array(speed, int, boot_devs, 0444);
 MODULE_PARM_DESC(speed, "Speed in bauds.");
-MODULE_PARM_SYNTAX(speed, SNDRV_ENABLED ",allows:{9600,19200,38400,57600,115200},dialog:list");
 module_param_array(base, int, boot_devs, 0444);
 MODULE_PARM_DESC(base, "Base for divisor in bauds.");
-MODULE_PARM_SYNTAX(base, SNDRV_ENABLED ",allows:{57600,115200,230400,460800},dialog:list");
 module_param_array(outs, int, boot_devs, 0444);
 MODULE_PARM_DESC(outs, "Number of MIDI outputs.");
 module_param_array(ins, int, boot_devs, 0444);
 MODULE_PARM_DESC(ins, "Number of MIDI inputs.");
 module_param_array(droponfull, bool, boot_devs, 0444);
 MODULE_PARM_DESC(droponfull, "Flag to enable drop-on-full buffer mode");
-MODULE_PARM_SYNTAX(droponfull, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC);
 
-MODULE_PARM_SYNTAX(outs, SNDRV_ENABLED ",allows:{{1,16}},dialog:list");
-MODULE_PARM_SYNTAX(ins, SNDRV_ENABLED ",allows:{{1,16}},dialog:list");
 module_param_array(adaptor, int, boot_devs, 0444);
 MODULE_PARM_DESC(adaptor, "Type of adaptor.");
-MODULE_PARM_SYNTAX(adaptor, SNDRV_ENABLED ",allows:{{0=Soundcanvas,1=MS-124T,2=MS-124W S/A,3=MS-124W M/B,4=Generic}},dialog:list");
 
 /*#define SNDRV_SERIAL_MS124W_MB_NOCOMBO 1*/  /* Address outs as 0-3 instead of bitmap */
 
@@ -524,7 +512,7 @@
 static int snd_uart16550_input_open(snd_rawmidi_substream_t * substream)
 {
 	unsigned long flags;
-	snd_uart16550_t *uart = snd_magic_cast(snd_uart16550_t, substream->rmidi->private_data, return -ENXIO);
+	snd_uart16550_t *uart = substream->rmidi->private_data;
 
 	spin_lock_irqsave(&uart->open_lock, flags);
 	if (uart->filemode == SERIAL_MODE_NOT_OPENED)
@@ -538,7 +526,7 @@
 static int snd_uart16550_input_close(snd_rawmidi_substream_t * substream)
 {
 	unsigned long flags;
-	snd_uart16550_t *uart = snd_magic_cast(snd_uart16550_t, substream->rmidi->private_data, return -ENXIO);
+	snd_uart16550_t *uart = substream->rmidi->private_data;
 
 	spin_lock_irqsave(&uart->open_lock, flags);
 	uart->filemode &= ~SERIAL_MODE_INPUT_OPEN;
@@ -552,7 +540,7 @@
 static void snd_uart16550_input_trigger(snd_rawmidi_substream_t * substream, int up)
 {
 	unsigned long flags;
-	snd_uart16550_t *uart = snd_magic_cast(snd_uart16550_t, substream->rmidi->private_data, return);
+	snd_uart16550_t *uart = substream->rmidi->private_data;
 
 	spin_lock_irqsave(&uart->open_lock, flags);
 	if (up) {
@@ -566,7 +554,7 @@
 static int snd_uart16550_output_open(snd_rawmidi_substream_t * substream)
 {
 	unsigned long flags;
-	snd_uart16550_t *uart = snd_magic_cast(snd_uart16550_t, substream->rmidi->private_data, return -ENXIO);
+	snd_uart16550_t *uart = substream->rmidi->private_data;
 
 	spin_lock_irqsave(&uart->open_lock, flags);
 	if (uart->filemode == SERIAL_MODE_NOT_OPENED)
@@ -580,7 +568,7 @@
 static int snd_uart16550_output_close(snd_rawmidi_substream_t * substream)
 {
 	unsigned long flags;
-	snd_uart16550_t *uart = snd_magic_cast(snd_uart16550_t, substream->rmidi->private_data, return -ENXIO);
+	snd_uart16550_t *uart = substream->rmidi->private_data;
 
 	spin_lock_irqsave(&uart->open_lock, flags);
 	uart->filemode &= ~SERIAL_MODE_OUTPUT_OPEN;
@@ -652,7 +640,7 @@
 {
 	unsigned long flags;
 	unsigned char midi_byte, addr_byte;
-	snd_uart16550_t *uart = snd_magic_cast(snd_uart16550_t, substream->rmidi->private_data, return);
+	snd_uart16550_t *uart = substream->rmidi->private_data;
 	char first;
 	static unsigned long lasttime=0;
 	
@@ -730,7 +718,7 @@
 static void snd_uart16550_output_trigger(snd_rawmidi_substream_t * substream, int up)
 {
 	unsigned long flags;
-	snd_uart16550_t *uart = snd_magic_cast(snd_uart16550_t, substream->rmidi->private_data, return);
+	snd_uart16550_t *uart = substream->rmidi->private_data;
 
 	spin_lock_irqsave(&uart->open_lock, flags);
 	if (up) {
@@ -765,13 +753,13 @@
 		release_resource(uart->res_base);
 		kfree_nocheck(uart->res_base);
 	}
-	snd_magic_kfree(uart);
+	kfree(uart);
 	return 0;
 };
 
 static int snd_uart16550_dev_free(snd_device_t *device)
 {
-	snd_uart16550_t *uart = snd_magic_cast(snd_uart16550_t, device->device_data, return -ENXIO);
+	snd_uart16550_t *uart = device->device_data;
 	return snd_uart16550_free(uart);
 }
 
@@ -791,7 +779,7 @@
 	int err;
 
 
-	if ((uart = snd_magic_kcalloc(snd_uart16550_t, 0, GFP_KERNEL)) == NULL)
+	if ((uart = kcalloc(1, sizeof(*uart), GFP_KERNEL)) == NULL)
 		return -ENOMEM;
 	uart->adaptor = adaptor;
 	uart->card = card;
diff -Nru a/sound/drivers/virmidi.c b/sound/drivers/virmidi.c
--- a/sound/drivers/virmidi.c	2004-08-04 17:48:48 -07:00
+++ b/sound/drivers/virmidi.c	2004-08-04 17:48:48 -07:00
@@ -57,8 +57,7 @@
 MODULE_AUTHOR("Takashi Iwai <tiwai@suse.de>");
 MODULE_DESCRIPTION("Dummy soundcard for virtual rawmidi devices");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{ALSA,Virtual rawmidi device}}");
+MODULE_SUPPORTED_DEVICE("{{ALSA,Virtual rawmidi device}}");
 
 #define MAX_MIDI_DEVICES	8
 
@@ -70,16 +69,12 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for virmidi soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for virmidi soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable this soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(midi_devs, int, boot_devs, 0444);
 MODULE_PARM_DESC(midi_devs, "MIDI devices # (1-8)");
-MODULE_PARM_SYNTAX(midi_devs, SNDRV_ENABLED ",allows:{{1,8}}");
 
 typedef struct snd_card_virmidi {
 	snd_card_t *card;
@@ -113,7 +108,7 @@
 		snd_virmidi_dev_t *rdev;
 		if ((err = snd_virmidi_new(card, idx, &rmidi)) < 0)
 			goto __nodev;
-		rdev = snd_magic_cast(snd_virmidi_dev_t, rmidi->private_data, continue);
+		rdev = rmidi->private_data;
 		vmidi->midi[idx] = rmidi;
 		strcpy(rmidi->name, "Virtual Raw MIDI");
 		rdev->seq_mode = SNDRV_VIRMIDI_SEQ_DISPATCH;
diff -Nru a/sound/drivers/vx/vx_core.c b/sound/drivers/vx/vx_core.c
--- a/sound/drivers/vx/vx_core.c	2004-08-04 17:48:49 -07:00
+++ b/sound/drivers/vx/vx_core.c	2004-08-04 17:48:49 -07:00
@@ -506,7 +506,7 @@
  */
 static void vx_interrupt(unsigned long private_data)
 {
-	vx_core_t *chip = snd_magic_cast(vx_core_t, (void*)private_data, return);
+	vx_core_t *chip = (vx_core_t *) private_data;
 	unsigned int events;
 		
 	if (chip->chip_status & VX_STAT_IS_STALE)
@@ -550,7 +550,7 @@
  */
 irqreturn_t snd_vx_irq_handler(int irq, void *dev, struct pt_regs *regs)
 {
-	vx_core_t *chip = snd_magic_cast(vx_core_t, dev, return IRQ_NONE);
+	vx_core_t *chip = dev;
 
 	if (! (chip->chip_status & VX_STAT_CHIP_INIT) ||
 	    (chip->chip_status & VX_STAT_IS_STALE))
@@ -572,6 +572,7 @@
 	if (cold_reset) {
 		chip->audio_source_target = chip->audio_source;
 		chip->clock_source = INTERNAL_QUARTZ;
+		chip->clock_mode = VX_CLOCK_MODE_AUTO;
 		chip->freq = 48000;
 		chip->uer_detected = VX_UER_MODE_NOT_PRESENT;
 		chip->uer_bits = SNDRV_PCM_DEFAULT_CON_SPDIF;
@@ -603,9 +604,10 @@
 
 static void vx_proc_read(snd_info_entry_t *entry, snd_info_buffer_t *buffer)
 {
-	vx_core_t *chip = snd_magic_cast(vx_core_t, entry->private_data, return);
+	vx_core_t *chip = entry->private_data;
 	static char *audio_src_vxp[] = { "Line", "Mic", "Digital" };
 	static char *audio_src_vx2[] = { "Analog", "Analog", "Digital" };
+	static char *clock_mode[] = { "Auto", "Internal", "External" };
 	static char *clock_src[] = { "Internal", "External" };
 	static char *uer_type[] = { "Consumer", "Professional", "Not Present" };
 	
@@ -629,6 +631,7 @@
 	snd_iprintf(buffer, "Input Source: %s\n", vx_is_pcmcia(chip) ?
 		    audio_src_vxp[chip->audio_source] :
 		    audio_src_vx2[chip->audio_source]);
+	snd_iprintf(buffer, "Clock Mode: %s\n", clock_mode[chip->clock_mode]);
 	snd_iprintf(buffer, "Clock Source: %s\n", clock_src[chip->clock_source]);
 	snd_iprintf(buffer, "Frequency: %d\n", chip->freq);
 	snd_iprintf(buffer, "Detected Frequency: %d\n", chip->freq_detected);
@@ -731,7 +734,7 @@
 
 	snd_assert(card && hw && ops, return NULL);
 
-	chip = snd_magic_kcalloc(vx_core_t, extra_size, GFP_KERNEL);
+	chip = kcalloc(1, sizeof(chip) + extra_size, GFP_KERNEL);
 	if (! chip) {
 		snd_printk(KERN_ERR "vx_core: no memory\n");
 		return NULL;
diff -Nru a/sound/drivers/vx/vx_hwdep.c b/sound/drivers/vx/vx_hwdep.c
--- a/sound/drivers/vx/vx_hwdep.c	2004-08-04 17:48:48 -07:00
+++ b/sound/drivers/vx/vx_hwdep.c	2004-08-04 17:48:48 -07:00
@@ -44,7 +44,7 @@
 		[VX_TYPE_VXPOCKET] = "vxpocket",
 		[VX_TYPE_VXP440] = "vxp440",
 	};
-	vx_core_t *vx = snd_magic_cast(vx_core_t, hw->private_data, return -ENXIO);
+	vx_core_t *vx = hw->private_data;
 
 	snd_assert(type_ids[vx->type], return -EINVAL);
 	strcpy(info->id, type_ids[vx->type]);
@@ -60,7 +60,7 @@
 
 static int vx_hwdep_dsp_load(snd_hwdep_t *hw, snd_hwdep_dsp_image_t *dsp)
 {
-	vx_core_t *vx = snd_magic_cast(vx_core_t, hw->private_data, return -ENXIO);
+	vx_core_t *vx = hw->private_data;
 	int index, err;
 
 	snd_assert(vx->ops->load_dsp, return -ENXIO);
diff -Nru a/sound/drivers/vx/vx_mixer.c b/sound/drivers/vx/vx_mixer.c
--- a/sound/drivers/vx/vx_mixer.c	2004-08-04 17:48:48 -07:00
+++ b/sound/drivers/vx/vx_mixer.c	2004-08-04 17:48:48 -07:00
@@ -26,8 +26,6 @@
 #include <sound/vx_core.h>
 #include "vx_cmd.h"
 
-#define chip_t vx_core_t
-
 
 /*
  * write a codec data (24bit)
@@ -524,6 +522,54 @@
 };
 
 /*
+ * clock mode selection
+ */
+static int vx_clock_mode_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo)
+{
+	static char *texts[3] = {
+		"Auto", "Internal", "External"
+	};
+
+	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
+	uinfo->count = 1;
+	uinfo->value.enumerated.items = 3;
+	if (uinfo->value.enumerated.item > 2)
+		uinfo->value.enumerated.item = 2;
+	strcpy(uinfo->value.enumerated.name,
+	       texts[uinfo->value.enumerated.item]);
+	return 0;
+}
+
+static int vx_clock_mode_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	vx_core_t *chip = snd_kcontrol_chip(kcontrol);
+	ucontrol->value.enumerated.item[0] = chip->clock_mode;
+	return 0;
+}
+
+static int vx_clock_mode_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	vx_core_t *chip = snd_kcontrol_chip(kcontrol);
+	down(&chip->mixer_mutex);
+	if (chip->clock_mode != ucontrol->value.enumerated.item[0]) {
+		chip->clock_mode = ucontrol->value.enumerated.item[0];
+		vx_set_clock(chip, chip->freq);
+		up(&chip->mixer_mutex);
+		return 1;
+	}
+	up(&chip->mixer_mutex);
+	return 0;
+}
+
+static snd_kcontrol_new_t vx_control_clock_mode = {
+	.iface =	SNDRV_CTL_ELEM_IFACE_MIXER,
+	.name =		"Clock Mode",
+	.info =		vx_clock_mode_info,
+	.get =		vx_clock_mode_get,
+	.put =		vx_clock_mode_put,
+};
+
+/*
  * Audio Gain
  */
 static int vx_audio_gain_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo)
@@ -912,6 +958,9 @@
 
 	/* Audio source */
 	if ((err = snd_ctl_add(card, snd_ctl_new1(&vx_control_audio_src, chip))) < 0)
+		return err;
+	/* clock mode */
+	if ((err = snd_ctl_add(card, snd_ctl_new1(&vx_control_clock_mode, chip))) < 0)
 		return err;
 	/* IEC958 controls */
 	if ((err = snd_ctl_add(card, snd_ctl_new1(&vx_control_iec958_mask, chip))) < 0)
diff -Nru a/sound/drivers/vx/vx_pcm.c b/sound/drivers/vx/vx_pcm.c
--- a/sound/drivers/vx/vx_pcm.c	2004-08-04 17:48:48 -07:00
+++ b/sound/drivers/vx/vx_pcm.c	2004-08-04 17:48:48 -07:00
@@ -48,14 +48,13 @@
 #include <sound/driver.h>
 #include <linux/slab.h>
 #include <linux/vmalloc.h>
+#include <linux/delay.h>
 #include <sound/core.h>
 #include <sound/asoundef.h>
 #include <sound/pcm.h>
 #include <sound/vx_core.h>
 #include "vx_cmd.h"
 
-#define chip_t	vx_core_t
-
 
 /*
  * we use a vmalloc'ed (sg-)buffer
@@ -381,7 +380,7 @@
  */
 static int vx_toggle_pipe(vx_core_t *chip, vx_pipe_t *pipe, int state)
 {
-	int err, i, cur_state, delay;
+	int err, i, cur_state;
 
 	/* Check the pipe is not already in the requested state */
 	if (vx_get_pipe_state(chip, pipe, &cur_state) < 0)
@@ -394,17 +393,14 @@
 	 * enough sound buffer for this pipe)
 	 */
 	if (state) {
-		int delay = CAN_START_DELAY;
 		for (i = 0 ; i < MAX_WAIT_FOR_DSP; i++) {
-			snd_vx_delay(chip, delay);
 			err = vx_pipe_can_start(chip, pipe);
 			if (err > 0)
 				break;
 			/* Wait for a few, before asking again
 			 * to avoid flooding the DSP with our requests
 			 */
-			if ((i % 4 ) == 0)
-				delay <<= 1;
+			mdelay(1);
 		}
 	}
     
@@ -418,15 +414,12 @@
 	 * reaching the expected state before returning
 	 * Check one pipe only (since they are synchronous)
 	 */
-	delay = WAIT_STATE_DELAY;
 	for (i = 0; i < MAX_WAIT_FOR_DSP; i++) {
-		snd_vx_delay(chip, delay);
 		err = vx_get_pipe_state(chip, pipe, &cur_state);
 		if (err < 0 || cur_state == state)
 			break;
 		err = -EIO;
-		if ((i % 4 ) == 0)
-			delay <<= 1;
+		mdelay(1);
 	}
 	return err < 0 ? -EIO : 0;
 }
@@ -480,7 +473,7 @@
 		return err;
 
 	/* initialize the pipe record */
-	pipe = snd_magic_kcalloc(vx_pipe_t, 0, GFP_KERNEL);
+	pipe = kcalloc(1, sizeof(*pipe), GFP_KERNEL);
 	if (! pipe) {
 		/* release the pipe */
 		vx_init_rmh(&rmh, CMD_FREE_PIPE);
@@ -514,7 +507,7 @@
 	vx_set_pipe_cmd_params(&rmh, pipe->is_capture, pipe->number, 0);
 	vx_send_msg(chip, &rmh);
 
-	snd_magic_kfree(pipe);
+	kfree(pipe);
 	return 0;
 }
 
@@ -629,7 +622,7 @@
 	if (! subs->runtime->private_data)
 		return -EINVAL;
 
-	pipe = snd_magic_cast(vx_pipe_t, subs->runtime->private_data, return -EINVAL);
+	pipe = subs->runtime->private_data;
 
 	if (--pipe->references == 0) {
 		chip->playback_pipes[pipe->number] = NULL;
@@ -778,8 +771,8 @@
 static void vx_pcm_delayed_start(unsigned long arg)
 {
 	snd_pcm_substream_t *subs = (snd_pcm_substream_t *)arg;
-	vx_core_t *chip = snd_magic_cast(vx_core_t, subs->pcm->private_data, return);
-	vx_pipe_t *pipe = snd_magic_cast(vx_pipe_t, subs->runtime->private_data, return);
+	vx_core_t *chip = subs->pcm->private_data;
+	vx_pipe_t *pipe = subs->runtime->private_data;
 	int err;
 
 	/*  printk( KERN_DEBUG "DDDD tasklet delayed start jiffies = %ld\n", jiffies);*/
@@ -801,7 +794,7 @@
 static int vx_pcm_trigger(snd_pcm_substream_t *subs, int cmd)
 {
 	vx_core_t *chip = snd_pcm_substream_chip(subs);
-	vx_pipe_t *pipe = snd_magic_cast(vx_pipe_t, subs->runtime->private_data, return -EINVAL);
+	vx_pipe_t *pipe = subs->runtime->private_data;
 	int err;
 
 	if (chip->chip_status & VX_STAT_IS_STALE)
@@ -846,7 +839,7 @@
 static snd_pcm_uframes_t vx_pcm_playback_pointer(snd_pcm_substream_t *subs)
 {
 	snd_pcm_runtime_t *runtime = subs->runtime;
-	vx_pipe_t *pipe = snd_magic_cast(vx_pipe_t, runtime->private_data, return -EINVAL);
+	vx_pipe_t *pipe = runtime->private_data;
 	return pipe->position;
 }
 
@@ -874,7 +867,7 @@
 {
 	vx_core_t *chip = snd_pcm_substream_chip(subs);
 	snd_pcm_runtime_t *runtime = subs->runtime;
-	vx_pipe_t *pipe = snd_magic_cast(vx_pipe_t, runtime->private_data, return -EINVAL);
+	vx_pipe_t *pipe = runtime->private_data;
 	int err, data_mode;
 	// int max_size, nchunks;
 
@@ -1037,7 +1030,7 @@
 	
 	if (! subs->runtime->private_data)
 		return -EINVAL;
-	pipe = snd_magic_cast(vx_pipe_t, subs->runtime->private_data, return -EINVAL);
+	pipe = subs->runtime->private_data;
 	chip->capture_pipes[pipe->number] = NULL;
 
 	pipe_out_monitoring = pipe->monitoring_pipe;
@@ -1141,7 +1134,7 @@
 static snd_pcm_uframes_t vx_pcm_capture_pointer(snd_pcm_substream_t *subs)
 {
 	snd_pcm_runtime_t *runtime = subs->runtime;
-	vx_pipe_t *pipe = snd_magic_cast(vx_pipe_t, runtime->private_data, return -EINVAL);
+	vx_pipe_t *pipe = runtime->private_data;
 	return bytes_to_frames(runtime, pipe->hw_ptr);
 }
 
@@ -1265,7 +1258,7 @@
  */
 static void snd_vx_pcm_free(snd_pcm_t *pcm)
 {
-	vx_core_t *chip = snd_magic_cast(vx_core_t, pcm->private_data, return);
+	vx_core_t *chip = pcm->private_data;
 	chip->pcm[pcm->device] = NULL;
 	if (chip->playback_pipes) {
 		kfree(chip->playback_pipes);
diff -Nru a/sound/drivers/vx/vx_uer.c b/sound/drivers/vx/vx_uer.c
--- a/sound/drivers/vx/vx_uer.c	2004-08-04 17:48:48 -07:00
+++ b/sound/drivers/vx/vx_uer.c	2004-08-04 17:48:48 -07:00
@@ -263,17 +263,17 @@
 	/* change the audio source if possible */
 	vx_sync_audio_source(chip);
 
-	switch (chip->audio_source) {
-	case VX_AUDIO_SRC_DIGITAL:
+	if (chip->clock_mode == VX_CLOCK_MODE_EXTERNAL ||
+	    (chip->clock_mode == VX_CLOCK_MODE_AUTO &&
+	     chip->audio_source == VX_AUDIO_SRC_DIGITAL)) {
 		if (chip->clock_source != UER_SYNC) {
 			vx_change_clock_source(chip, UER_SYNC);
 			mdelay(6);
 			src_changed = 1;
 		}
-		if (chip->freq == freq)
-			return 0;
-		break;
-	default:
+	} else if (chip->clock_mode == VX_CLOCK_MODE_INTERNAL ||
+		   (chip->clock_mode == VX_CLOCK_MODE_AUTO &&
+		    chip->audio_source != VX_AUDIO_SRC_DIGITAL)) {
 		if (chip->clock_source != INTERNAL_QUARTZ) {
 			vx_change_clock_source(chip, INTERNAL_QUARTZ);
 			src_changed = 1;
@@ -283,8 +283,9 @@
 		vx_set_internal_clock(chip, freq);
 		if (src_changed)
 			vx_modify_board_inputs(chip);
-		break;
 	}
+	if (chip->freq == freq)
+		return 0;
 	chip->freq = freq;
 	vx_modify_board_clock(chip, 1);
 	return 0;
diff -Nru a/sound/i2c/cs8427.c b/sound/i2c/cs8427.c
--- a/sound/i2c/cs8427.c	2004-08-04 17:48:48 -07:00
+++ b/sound/i2c/cs8427.c	2004-08-04 17:48:48 -07:00
@@ -34,8 +34,6 @@
 MODULE_DESCRIPTION("IEC958 (S/PDIF) receiver & transmitter by Cirrus Logic");
 MODULE_LICENSE("GPL");
 
-#define chip_t snd_i2c_device_t
-
 #define CS8427_ADDR			(0x20>>1) /* fixed address */
 
 typedef struct {
@@ -109,7 +107,7 @@
 
 static int snd_cs8427_select_corudata(snd_i2c_device_t *device, int udata)
 {
-	cs8427_t *chip = snd_magic_cast(cs8427_t, device->private_data, return -ENXIO);
+	cs8427_t *chip = device->private_data;
 	int err;
 
 	udata = udata ? CS8427_BSEL : 0;
@@ -128,7 +126,7 @@
 				    unsigned char *ndata,
 				    int count)
 {
-	cs8427_t *chip = snd_magic_cast(cs8427_t, device->private_data, return -ENXIO);
+	cs8427_t *chip = device->private_data;
 	char *hw_data = udata ? chip->playback.hw_udata : chip->playback.hw_status;
 	char data[32];
 	int err, idx;
@@ -159,7 +157,7 @@
 static void snd_cs8427_free(snd_i2c_device_t *device)
 {
 	if (device->private_data)
-		snd_magic_kfree(device->private_data);
+		kfree(device->private_data);
 }
 
 int snd_cs8427_create(snd_i2c_bus_t *bus,
@@ -211,7 +209,7 @@
 
 	if ((err = snd_i2c_device_create(bus, "CS8427", CS8427_ADDR | (addr & 7), &device)) < 0)
 		return err;
-	chip = device->private_data = snd_magic_kcalloc(cs8427_t, 0, GFP_KERNEL);
+	chip = device->private_data = kcalloc(1, sizeof(*chip), GFP_KERNEL);
 	if (chip == NULL) {
 	      	snd_i2c_device_free(device);
 		return -ENOMEM;
@@ -297,7 +295,7 @@
 	int data;
 
 	snd_assert(cs8427, return);
-	chip = snd_magic_cast(cs8427_t, cs8427->private_data, return);
+	chip = cs8427->private_data;
 	snd_i2c_lock(cs8427->bus);
 	chip->regmap[CS8427_REG_CLOCKSOURCE] &= ~(CS8427_RUN | CS8427_RXDMASK);
 	snd_cs8427_reg_write(cs8427, CS8427_REG_CLOCKSOURCE, chip->regmap[CS8427_REG_CLOCKSOURCE]);
@@ -389,7 +387,7 @@
 				snd_ctl_elem_value_t * ucontrol)
 {
 	snd_i2c_device_t *device = snd_kcontrol_chip(kcontrol);
-	cs8427_t *chip = snd_magic_cast(cs8427_t, device->private_data, return -ENXIO);
+	cs8427_t *chip = device->private_data;
 	
 	snd_i2c_lock(device->bus);
 	memcpy(ucontrol->value.iec958.status, chip->playback.def_status, 24);
@@ -401,7 +399,7 @@
 				snd_ctl_elem_value_t * ucontrol)
 {
 	snd_i2c_device_t *device = snd_kcontrol_chip(kcontrol);
-	cs8427_t *chip = snd_magic_cast(cs8427_t, device->private_data, return -ENXIO);
+	cs8427_t *chip = device->private_data;
 	unsigned char *status = kcontrol->private_value ? chip->playback.pcm_status : chip->playback.def_status;
 	snd_pcm_runtime_t *runtime = chip->playback.substream ? chip->playback.substream->runtime : NULL;
 	int err, change;
@@ -432,8 +430,6 @@
 	return 0;
 }
 
-#define CONTROLS (sizeof(snd_cs8427_iec958_controls)/sizeof(snd_kcontrol_new_t))
-
 static snd_kcontrol_new_t snd_cs8427_iec958_controls[] = {
 {
 	.iface =	SNDRV_CTL_ELEM_IFACE_PCM,
@@ -487,13 +483,13 @@
 			    snd_pcm_substream_t *play_substream,
 			    snd_pcm_substream_t *cap_substream)
 {
-	cs8427_t *chip = snd_magic_cast(cs8427_t, cs8427->private_data, return -ENXIO);
+	cs8427_t *chip = cs8427->private_data;
 	snd_kcontrol_t *kctl;
 	unsigned int idx;
 	int err;
 
 	snd_assert(play_substream && cap_substream, return -EINVAL);
-	for (idx = 0; idx < CONTROLS; idx++) {
+	for (idx = 0; idx < ARRAY_SIZE(snd_cs8427_iec958_controls); idx++) {
 		kctl = snd_ctl_new1(&snd_cs8427_iec958_controls[idx], cs8427);
 		if (kctl == NULL)
 			return -ENOMEM;
@@ -517,7 +513,7 @@
 	cs8427_t *chip;
 
 	snd_assert(cs8427, return -ENXIO);
-	chip = snd_magic_cast(cs8427_t, cs8427->private_data, return -ENXIO);
+	chip = cs8427->private_data;
 	if (active)
 		memcpy(chip->playback.pcm_status, chip->playback.def_status, 24);
 	chip->playback.pcm_ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE;
@@ -533,7 +529,7 @@
 	int err, reset;
 
 	snd_assert(cs8427, return -ENXIO);
-	chip = snd_magic_cast(cs8427_t, cs8427->private_data, return -ENXIO);
+	chip = cs8427->private_data;
 	status = chip->playback.pcm_status;
 	snd_i2c_lock(cs8427->bus);
 	if (status[0] & IEC958_AES0_PROFESSIONAL) {
diff -Nru a/sound/i2c/i2c.c b/sound/i2c/i2c.c
--- a/sound/i2c/i2c.c	2004-08-04 17:48:49 -07:00
+++ b/sound/i2c/i2c.c	2004-08-04 17:48:49 -07:00
@@ -62,13 +62,13 @@
 	}
 	if (bus->private_free)
 		bus->private_free(bus);
-	snd_magic_kfree(bus);
+	kfree(bus);
 	return 0;
 }
 
 static int snd_i2c_bus_dev_free(snd_device_t *device)
 {
-	snd_i2c_bus_t *bus = snd_magic_cast(snd_i2c_bus_t, device->device_data, return -ENXIO);
+	snd_i2c_bus_t *bus = device->device_data;
 	return snd_i2c_bus_free(bus);
 }
 
@@ -81,7 +81,7 @@
 	};
 
 	*ri2c = NULL;
-	bus = (snd_i2c_bus_t *)snd_magic_kcalloc(snd_i2c_bus_t, 0, GFP_KERNEL);
+	bus = kcalloc(1, sizeof(*bus), GFP_KERNEL);
 	if (bus == NULL)
 		return -ENOMEM;
 	init_MUTEX(&bus->lock_mutex);
@@ -108,7 +108,7 @@
 
 	*rdevice = NULL;
 	snd_assert(bus != NULL, return -EINVAL);
-	device = (snd_i2c_device_t *)snd_magic_kcalloc(snd_i2c_device_t, 0, GFP_KERNEL);
+	device = kcalloc(1, sizeof(*device), GFP_KERNEL);
 	if (device == NULL)
 		return -ENOMEM;
 	device->addr = addr;
@@ -125,7 +125,7 @@
 		list_del(&device->list);
 	if (device->private_free)
 		device->private_free(device);
-	snd_magic_kfree(device);
+	kfree(device);
 	return 0;
 }
 
diff -Nru a/sound/i2c/l3/uda1341.c b/sound/i2c/l3/uda1341.c
--- a/sound/i2c/l3/uda1341.c	2004-08-04 17:48:49 -07:00
+++ b/sound/i2c/l3/uda1341.c	2004-08-04 17:48:49 -07:00
@@ -17,7 +17,7 @@
  * 2002-05-12   Tomas Kasparek  another code cleanup
  */
 
-/* $Id: uda1341.c,v 1.10 2003/10/23 14:34:52 perex Exp $ */
+/* $Id: uda1341.c,v 1.13 2004/07/20 15:54:13 cladisch Exp $ */
 
 #include <sound/driver.h>
 #include <linux/module.h>
@@ -131,7 +131,6 @@
 
 //hack for ALSA magic casting
 typedef struct l3_client l3_client_t;
-#define chip_t l3_client_t      
 
 /* transfer 8bit integer into string with binary representation */
 void int2str_bin8(uint8_t val, char *buf){
@@ -332,7 +331,7 @@
 static void snd_uda1341_proc_read(snd_info_entry_t *entry, 
 				  snd_info_buffer_t * buffer)
 {
-	struct l3_client *clnt = snd_magic_cast(l3_client_t, entry->private_data, return);
+	struct l3_client *clnt = entry->private_data;
 	struct uda1341 *uda = clnt->driver_data;
 	int peak;
 
@@ -397,7 +396,7 @@
 static void snd_uda1341_proc_regs_read(snd_info_entry_t *entry, 
 				       snd_info_buffer_t * buffer)
 {
-	struct l3_client *clnt = snd_magic_cast(l3_client_t, entry->private_data, return);
+	struct l3_client *clnt = entry->private_data;
 	struct uda1341 *uda = clnt->driver_data;		
 	int reg;
 	char buf[12];
@@ -618,8 +617,6 @@
 
 /* }}} */
   
-#define UDA1341_CONTROLS (sizeof(snd_uda1341_controls)/sizeof(snd_kcontrol_new_t))
-
 static snd_kcontrol_new_t snd_uda1341_controls[] = {
 	UDA1341_SINGLE("Master Playback Switch", CMD_MUTE, data0_2, 2, 1, 1),
 	UDA1341_SINGLE("Master Playback Volume", CMD_VOLUME, data0_0, 0, 63, 1),
@@ -653,12 +650,12 @@
 static void uda1341_free(struct l3_client *uda1341)
 {
 	l3_detach_client(uda1341); // calls kfree for driver_data (uda1341_t)
-	snd_magic_kfree(uda1341);
+	kfree(uda1341);
 }
 
 static int uda1341_dev_free(snd_device_t *device)
 {
-	struct l3_client *clnt = snd_magic_cast(l3_client_t, device->device_data, return);
+	struct l3_client *clnt = device->device_data;
 	uda1341_free(clnt);
 	return 0;
 }
@@ -673,7 +670,7 @@
 
 	snd_assert(card != NULL, return -EINVAL);
 
-	uda1341 = snd_magic_kcalloc(l3_client_t, 0, GFP_KERNEL);
+	uda1341 = kcalloc(1, sizeof(*uda1341), GFP_KERNEL);
 	if (uda1341 == NULL)
 		return -ENOMEM;
          
@@ -688,7 +685,7 @@
 		return err;
 	}
 
-	for (idx = 0; idx < UDA1341_CONTROLS; idx++) {
+	for (idx = 0; idx < ARRAY_SIZE(snd_uda1341_controls); idx++) {
 		if ((err = snd_ctl_add(card, snd_ctl_new1(&snd_uda1341_controls[idx], uda1341))) < 0)
 			return err;
 	}
@@ -710,7 +707,7 @@
 {
 	struct uda1341 *uda;
 
-	uda = snd_magic_kcalloc(uda1341_t, 0, GFP_KERNEL);
+	uda = kcalloc(1, sizeof(*uda), 0, GFP_KERNEL);
 	if (!uda)
 		return -ENOMEM;
 
@@ -734,7 +731,7 @@
 static void uda1341_detach(struct l3_client *clnt)
 {
 	if (clnt->driver_data)
-		snd_magic_kfree(clnt->driver_data);
+		kfree(clnt->driver_data);
 }
 
 static int
@@ -821,8 +818,7 @@
 MODULE_AUTHOR("Tomas Kasparek <tomas.kasparek@seznam.cz>");
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Philips UDA1341 CODEC driver for ALSA");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{UDA1341,UDA1341TS}}");
+MODULE_SUPPORTED_DEVICE("{{UDA1341,UDA1341TS}}");
 
 EXPORT_SYMBOL(snd_chip_uda1341_mixer_new);
 
diff -Nru a/sound/i2c/other/ak4117.c b/sound/i2c/other/ak4117.c
--- a/sound/i2c/other/ak4117.c	2004-08-04 17:48:49 -07:00
+++ b/sound/i2c/other/ak4117.c	2004-08-04 17:48:49 -07:00
@@ -33,8 +33,6 @@
 MODULE_DESCRIPTION("AK4117 IEC958 (S/PDIF) receiver by Asahi Kasei");
 MODULE_LICENSE("GPL");
 
-#define chip_t ak4117_t
-
 #define AK4117_ADDR			0x00 /* fixed address */
 
 static void snd_ak4117_timer(unsigned long data);
@@ -65,12 +63,12 @@
 static void snd_ak4117_free(ak4117_t *chip)
 {
 	del_timer(&chip->timer);
-	snd_magic_kfree(chip);
+	kfree(chip);
 }
 
 static int snd_ak4117_dev_free(snd_device_t *device)
 {
-	ak4117_t *chip = snd_magic_cast(ak4117_t, device->device_data, return -ENXIO);
+	ak4117_t *chip = device->device_data;
 	snd_ak4117_free(chip);
 	return 0;
 }
@@ -85,7 +83,7 @@
 		.dev_free =     snd_ak4117_dev_free,
 	};
 
-	chip = (ak4117_t *)snd_magic_kcalloc(ak4117_t, 0, GFP_KERNEL);
+	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
 	if (chip == NULL)
 		return -ENOMEM;
 	spin_lock_init(&chip->lock);
@@ -544,7 +542,7 @@
 
 static void snd_ak4117_timer(unsigned long data)
 {
-	ak4117_t *chip = snd_magic_cast(ak4117_t, (void *)data, return);
+	ak4117_t *chip = (ak4117_t *)data;
 
 	if (chip->init)
 		return;
diff -Nru a/sound/i2c/other/ak4xxx-adda.c b/sound/i2c/other/ak4xxx-adda.c
--- a/sound/i2c/other/ak4xxx-adda.c	2004-08-04 17:48:49 -07:00
+++ b/sound/i2c/other/ak4xxx-adda.c	2004-08-04 17:48:49 -07:00
@@ -237,7 +237,7 @@
 
 static int snd_akm4xxx_volume_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
 {
-	akm4xxx_t *ak = _snd_kcontrol_chip(kcontrol);
+	akm4xxx_t *ak = snd_kcontrol_chip(kcontrol);
 	int chip = AK_GET_CHIP(kcontrol->private_value);
 	int addr = AK_GET_ADDR(kcontrol->private_value);
 	int invert = AK_GET_INVERT(kcontrol->private_value);
@@ -250,7 +250,7 @@
 
 static int snd_akm4xxx_volume_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
 {
-	akm4xxx_t *ak = _snd_kcontrol_chip(kcontrol);
+	akm4xxx_t *ak = snd_kcontrol_chip(kcontrol);
 	int chip = AK_GET_CHIP(kcontrol->private_value);
 	int addr = AK_GET_ADDR(kcontrol->private_value);
 	int invert = AK_GET_INVERT(kcontrol->private_value);
@@ -277,7 +277,7 @@
 
 static int snd_akm4xxx_ipga_gain_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
 {
-	akm4xxx_t *ak = _snd_kcontrol_chip(kcontrol);
+	akm4xxx_t *ak = snd_kcontrol_chip(kcontrol);
 	int chip = AK_GET_CHIP(kcontrol->private_value);
 	int addr = AK_GET_ADDR(kcontrol->private_value);
 	ucontrol->value.integer.value[0] = snd_akm4xxx_get_ipga(ak, chip, addr) & 0x7f;
@@ -286,7 +286,7 @@
 
 static int snd_akm4xxx_ipga_gain_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
 {
-	akm4xxx_t *ak = _snd_kcontrol_chip(kcontrol);
+	akm4xxx_t *ak = snd_kcontrol_chip(kcontrol);
 	int chip = AK_GET_CHIP(kcontrol->private_value);
 	int addr = AK_GET_ADDR(kcontrol->private_value);
 	unsigned char nval = (ucontrol->value.integer.value[0] % 37) | 0x80;
@@ -312,7 +312,7 @@
 
 static int snd_akm4xxx_deemphasis_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t *ucontrol)
 {
-	akm4xxx_t *ak = _snd_kcontrol_chip(kcontrol);
+	akm4xxx_t *ak = snd_kcontrol_chip(kcontrol);
 	int chip = AK_GET_CHIP(kcontrol->private_value);
 	int addr = AK_GET_ADDR(kcontrol->private_value);
 	int shift = AK_GET_SHIFT(kcontrol->private_value);
@@ -322,7 +322,7 @@
 
 static int snd_akm4xxx_deemphasis_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
 {
-	akm4xxx_t *ak = _snd_kcontrol_chip(kcontrol);
+	akm4xxx_t *ak = snd_kcontrol_chip(kcontrol);
 	int chip = AK_GET_CHIP(kcontrol->private_value);
 	int addr = AK_GET_ADDR(kcontrol->private_value);
 	int shift = AK_GET_SHIFT(kcontrol->private_value);
diff -Nru a/sound/i2c/tea6330t.c b/sound/i2c/tea6330t.c
--- a/sound/i2c/tea6330t.c	2004-08-04 17:48:49 -07:00
+++ b/sound/i2c/tea6330t.c	2004-08-04 17:48:49 -07:00
@@ -30,8 +30,6 @@
 MODULE_DESCRIPTION("Routines for control of the TEA6330T circuit via i2c bus");
 MODULE_LICENSE("GPL");
 
-#define chip_t tea6330t_t
-
 #define TEA6330T_ADDR			(0x80>>1) /* fixed address */
 
 #define TEA6330T_SADDR_VOLUME_LEFT	0x00	/* volume left */
@@ -259,8 +257,6 @@
 	return change;
 }
 
-#define TEA6330T_CONTROLS (sizeof(snd_tea6330t_controls)/sizeof(snd_kcontrol_new_t))
-
 static snd_kcontrol_new_t snd_tea6330t_controls[] = {
 TEA6330T_MASTER_SWITCH("Master Playback Switch", 0),
 TEA6330T_MASTER_VOLUME("Master Playback Volume", 0),
@@ -270,8 +266,8 @@
 
 static void snd_tea6330_free(snd_i2c_device_t *device)
 {
-	tea6330t_t *tea = snd_magic_cast(tea6330t_t, device->private_data, return);
-	snd_magic_kfree(tea);
+	tea6330t_t *tea = device->private_data;
+	kfree(tea);
 }
                                         
 int snd_tea6330t_update_mixer(snd_card_t * card,
@@ -286,11 +282,11 @@
 	u8 default_treble, default_bass;
 	unsigned char bytes[7];
 
-	tea = snd_magic_kcalloc(tea6330t_t, 0, GFP_KERNEL);
+	tea = kcalloc(1, sizeof(*tea), GFP_KERNEL);
 	if (tea == NULL)
 		return -ENOMEM;
 	if ((err = snd_i2c_device_create(bus, "TEA6330T", TEA6330T_ADDR, &device)) < 0) {
-		snd_magic_kfree(tea);
+		kfree(tea);
 		return err;
 	}
 	tea->device = device;
@@ -336,7 +332,7 @@
 	if ((err = snd_component_add(card, "TEA6330T")) < 0)
 		goto __error;
 
-	for (idx = 0; idx < TEA6330T_CONTROLS; idx++) {
+	for (idx = 0; idx < ARRAY_SIZE(snd_tea6330t_controls); idx++) {
 		knew = &snd_tea6330t_controls[idx];
 		if (tea->treble == 0 && !strcmp(knew->name, "Tone Control - Treble"))
 			continue;
diff -Nru a/sound/isa/Kconfig b/sound/isa/Kconfig
--- a/sound/isa/Kconfig	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/Kconfig	2004-08-04 17:48:49 -07:00
@@ -77,11 +77,15 @@
 	help
 	  Say 'Y' or 'M' to include support for ESS AudioDrive ES18xx chips.
 
+config SND_GUS_SYNTH
+	tristate
+
 config SND_GUSCLASSIC
 	tristate "Gravis UltraSound Classic"
 	depends on SND
 	select SND_RAWMIDI
 	select SND_PCM
+	select SND_GUS_SYNTH
 	help
 	  Say 'Y' or 'M' to include support for Gravis UltraSound Classic soundcard.
 
@@ -91,6 +95,7 @@
 	select SND_HWDEP
 	select SND_MPU401_UART
 	select SND_PCM
+	select SND_GUS_SYNTH
 	help
 	  Say 'Y' or 'M' to include support for Gravis UltraSound Extreme soundcard.
 
@@ -99,6 +104,7 @@
 	depends on SND
 	select SND_RAWMIDI
 	select SND_PCM
+	select SND_GUS_SYNTH
 	help
 	  Say 'Y' or 'M' to include support for Gravis UltraSound MAX soundcard.
 
@@ -107,6 +113,7 @@
 	depends on SND
 	select SND_RAWMIDI
 	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,
@@ -117,6 +124,7 @@
 	depends on SND
 	select SND_RAWMIDI
 	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).
diff -Nru a/sound/isa/ad1816a/ad1816a.c b/sound/isa/ad1816a/ad1816a.c
--- a/sound/isa/ad1816a/ad1816a.c	2004-08-04 17:48:48 -07:00
+++ b/sound/isa/ad1816a/ad1816a.c	2004-08-04 17:48:48 -07:00
@@ -30,15 +30,12 @@
 #include <sound/mpu401.h>
 #include <sound/opl3.h>
 
-#define chip_t ad1816a_t
-
 #define PFX "ad1816a: "
 
 MODULE_AUTHOR("Massimo Piccioni <dafastidio@libero.it>");
 MODULE_DESCRIPTION("AD1816A, AD1815");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{Highscreen,Sound-Boostar 16 3D},"
+MODULE_SUPPORTED_DEVICE("{{Highscreen,Sound-Boostar 16 3D},"
 		"{Analog Devices,AD1815},"
 		"{Analog Devices,AD1816A},"
 		"{TerraTec,Base 64},"
@@ -60,34 +57,24 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for ad1816a based soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for ad1816a based soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable ad1816a based soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(port, long, boot_devs, 0444);
 MODULE_PARM_DESC(port, "Port # for ad1816a driver.");
-MODULE_PARM_SYNTAX(port, SNDRV_PORT12_DESC);
 module_param_array(mpu_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(mpu_port, "MPU-401 port # for ad1816a driver.");
-MODULE_PARM_SYNTAX(mpu_port, SNDRV_PORT12_DESC);
 module_param_array(fm_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(fm_port, "FM port # for ad1816a driver.");
-MODULE_PARM_SYNTAX(fm_port, SNDRV_PORT12_DESC);
 module_param_array(irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(irq, "IRQ # for ad1816a driver.");
-MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC);
 module_param_array(mpu_irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for ad1816a driver.");
-MODULE_PARM_SYNTAX(mpu_irq, SNDRV_IRQ_DESC);
 module_param_array(dma1, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma1, "1st DMA # for ad1816a driver.");
-MODULE_PARM_SYNTAX(dma1, SNDRV_DMA_DESC);
 module_param_array(dma2, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma2, "2nd DMA # for ad1816a driver.");
-MODULE_PARM_SYNTAX(dma2, SNDRV_DMA_DESC);
 
 struct snd_card_ad1816a {
 	struct pnp_dev *dev;
diff -Nru a/sound/isa/ad1816a/ad1816a_lib.c b/sound/isa/ad1816a/ad1816a_lib.c
--- a/sound/isa/ad1816a/ad1816a_lib.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/ad1816a/ad1816a_lib.c	2004-08-04 17:48:49 -07:00
@@ -34,8 +34,6 @@
 MODULE_DESCRIPTION("lowlevel code for Analog Devices AD1816A chip");
 MODULE_LICENSE("GPL");
 
-#define chip_t ad1816a_t
-
 static inline int snd_ad1816a_busy_wait(ad1816a_t *chip)
 {
 	int timeout;
@@ -313,7 +311,7 @@
 
 static irqreturn_t snd_ad1816a_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	ad1816a_t *chip = snd_magic_cast(ad1816a_t, dev_id, return IRQ_NONE);
+	ad1816a_t *chip = dev_id;
 	unsigned char status;
 
 	spin_lock(&chip->lock);
@@ -550,13 +548,13 @@
 		snd_dma_disable(chip->dma2);
 		free_dma(chip->dma2);
 	}
-	snd_magic_kfree(chip);
+	kfree(chip);
 	return 0;
 }
 
 static int snd_ad1816a_dev_free(snd_device_t *device)
 {
-	ad1816a_t *chip = snd_magic_cast(ad1816a_t, device->device_data, return -ENXIO);
+	ad1816a_t *chip = device->device_data;
 	return snd_ad1816a_free(chip);
 }
 
@@ -585,7 +583,7 @@
 
 	*rchip = NULL;
 
-	chip = snd_magic_kcalloc(ad1816a_t, 0, GFP_KERNEL);
+	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
 	if (chip == NULL)
 		return -ENOMEM;
 	chip->irq = -1;
@@ -661,7 +659,7 @@
 
 static void snd_ad1816a_pcm_free(snd_pcm_t *pcm)
 {
-	ad1816a_t *chip = snd_magic_cast(ad1816a_t, pcm->private_data, return);
+	ad1816a_t *chip = pcm->private_data;
 	chip->pcm = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
@@ -696,7 +694,7 @@
 
 static void snd_ad1816a_timer_free(snd_timer_t *timer)
 {
-	ad1816a_t *chip = snd_magic_cast(ad1816a_t, timer->private_data, return);
+	ad1816a_t *chip = timer->private_data;
 	chip->timer = NULL;
 }
 
@@ -901,8 +899,6 @@
 	return change;
 }
 
-#define AD1816A_CONTROLS (sizeof(snd_ad1816a_controls)/sizeof(snd_kcontrol_new_t))
-
 static snd_kcontrol_new_t snd_ad1816a_controls[] = {
 AD1816A_DOUBLE("Master Playback Switch", AD1816A_MASTER_ATT, 15, 7, 1, 1),
 AD1816A_DOUBLE("Master Playback Volume", AD1816A_MASTER_ATT, 8, 0, 31, 1),
@@ -950,7 +946,7 @@
 
 	strcpy(card->mixername, snd_ad1816a_chip_id(chip));
 
-	for (idx = 0; idx < AD1816A_CONTROLS; idx++) {
+	for (idx = 0; idx < ARRAY_SIZE(snd_ad1816a_controls); idx++) {
 		if ((err = snd_ctl_add(card, snd_ctl_new1(&snd_ad1816a_controls[idx], chip))) < 0)
 			return err;
 	}
diff -Nru a/sound/isa/ad1848/ad1848.c b/sound/isa/ad1848/ad1848.c
--- a/sound/isa/ad1848/ad1848.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/ad1848/ad1848.c	2004-08-04 17:48:49 -07:00
@@ -30,13 +30,10 @@
 #include <sound/ad1848.h>
 #include <sound/initval.h>
 
-#define chip_t ad1848_t
-
 MODULE_AUTHOR("Tugrul Galatali <galatalt@stuy.edu>, Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("AD1848/AD1847/CS4248");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{Analog Devices,AD1848},"
+MODULE_SUPPORTED_DEVICE("{{Analog Devices,AD1848},"
 	        "{Analog Devices,AD1847},"
 		"{Crystal Semiconductors,CS4248}}");
 
@@ -51,25 +48,18 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for AD1848 soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for AD1848 soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable AD1848 soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(port, long, boot_devs, 0444);
 MODULE_PARM_DESC(port, "Port # for AD1848 driver.");
-MODULE_PARM_SYNTAX(port, SNDRV_PORT12_DESC);
 module_param_array(irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(irq, "IRQ # for AD1848 driver.");
-MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC);
 module_param_array(dma1, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma1, "DMA1 # for AD1848 driver.");
-MODULE_PARM_SYNTAX(dma1, SNDRV_DMA_DESC);
 module_param_array(thinkpad, bool, boot_devs, 0444);
 MODULE_PARM_DESC(thinkpad, "Enable only for the onboard CS4248 of IBM Thinkpad 360/750/755 series.");
-MODULE_PARM_SYNTAX(thinkpad,  SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC);
 
 static snd_card_t *snd_ad1848_cards[SNDRV_CARDS] = SNDRV_DEFAULT_PTR;
 
diff -Nru a/sound/isa/ad1848/ad1848_lib.c b/sound/isa/ad1848/ad1848_lib.c
--- a/sound/isa/ad1848/ad1848_lib.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/ad1848/ad1848_lib.c	2004-08-04 17:48:49 -07:00
@@ -39,8 +39,6 @@
 MODULE_DESCRIPTION("Routines for control of AD1848/AD1847/CS4248");
 MODULE_LICENSE("GPL");
 
-#define chip_t ad1848_t
-
 #if 0
 #define SNDRV_DEBUG_MCE
 #endif
@@ -588,7 +586,7 @@
 
 irqreturn_t snd_ad1848_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	ad1848_t *chip = snd_magic_cast(ad1848_t, dev_id, return IRQ_NONE);
+	ad1848_t *chip = dev_id;
 
 	if ((chip->mode & AD1848_MODE_PLAY) && chip->playback_substream &&
 	    (chip->mode & AD1848_MODE_RUNNING))
@@ -649,7 +647,7 @@
 #ifdef CONFIG_PM
 static int snd_ad1848_suspend(snd_card_t *card, unsigned int state)
 {
-	ad1848_t *chip = snd_magic_cast(ad1848_t, card->pm_private_data, return -EINVAL);
+	ad1848_t *chip = card->pm_private_data;
 
 	if (card->power_state == SNDRV_CTL_POWER_D3hot)
 		return 0;
@@ -666,7 +664,7 @@
 
 static int snd_ad1848_resume(snd_card_t *card, unsigned int state)
 {
-	ad1848_t *chip = snd_magic_cast(ad1848_t, card->pm_private_data, return -EINVAL);
+	ad1848_t *chip = card->pm_private_data;
 
 	if (card->power_state == SNDRV_CTL_POWER_D0)
 		return 0;
@@ -867,13 +865,13 @@
 		snd_dma_disable(chip->dma);
 		free_dma(chip->dma);
 	}
-	snd_magic_kfree(chip);
+	kfree(chip);
 	return 0;
 }
 
 static int snd_ad1848_dev_free(snd_device_t *device)
 {
-	ad1848_t *chip = snd_magic_cast(ad1848_t, device->device_data, return -ENXIO);
+	ad1848_t *chip = device->device_data;
 	return snd_ad1848_free(chip);
 }
 
@@ -901,7 +899,7 @@
 	int err;
 
 	*rchip = NULL;
-	chip = snd_magic_kcalloc(ad1848_t, 0, GFP_KERNEL);
+	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
 	if (chip == NULL)
 		return -ENOMEM;
 	spin_lock_init(&chip->reg_lock);
@@ -977,7 +975,7 @@
 
 static void snd_ad1848_pcm_free(snd_pcm_t *pcm)
 {
-	ad1848_t *chip = snd_magic_cast(ad1848_t, pcm->private_data, return);
+	ad1848_t *chip = pcm->private_data;
 	chip->pcm = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
diff -Nru a/sound/isa/als100.c b/sound/isa/als100.c
--- a/sound/isa/als100.c	2004-08-04 17:48:48 -07:00
+++ b/sound/isa/als100.c	2004-08-04 17:48:48 -07:00
@@ -32,15 +32,12 @@
 #include <sound/opl3.h>
 #include <sound/sb.h>
 
-#define chip_t sb_t
-
 #define PFX "als100: "
 
 MODULE_AUTHOR("Massimo Piccioni <dafastidio@libero.it>");
 MODULE_DESCRIPTION("Avance Logic ALS1X0");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{Avance Logic,ALS100 - PRO16PNP},"
+MODULE_SUPPORTED_DEVICE("{{Avance Logic,ALS100 - PRO16PNP},"
 	        "{Avance Logic,ALS110},"
 	        "{Avance Logic,ALS120},"
 	        "{Avance Logic,ALS200},"
@@ -63,34 +60,24 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for als100 based soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for als100 based soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable als100 based soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(port, long, boot_devs, 0444);
 MODULE_PARM_DESC(port, "Port # for als100 driver.");
-MODULE_PARM_SYNTAX(port, SNDRV_PORT12_DESC);
 module_param_array(mpu_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(mpu_port, "MPU-401 port # for als100 driver.");
-MODULE_PARM_SYNTAX(mpu_port, SNDRV_PORT12_DESC);
 module_param_array(fm_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(fm_port, "FM port # for als100 driver.");
-MODULE_PARM_SYNTAX(fm_port, SNDRV_PORT12_DESC);
 module_param_array(irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(irq, "IRQ # for als100 driver.");
-MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC);
 module_param_array(mpu_irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for als100 driver.");
-MODULE_PARM_SYNTAX(mpu_irq, SNDRV_IRQ_DESC);
 module_param_array(dma8, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma8, "8-bit DMA # for als100 driver.");
-MODULE_PARM_SYNTAX(dma8, SNDRV_DMA8_DESC);
 module_param_array(dma16, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma16, "16-bit DMA # for als100 driver.");
-MODULE_PARM_SYNTAX(dma16, SNDRV_DMA16_DESC);
 
 struct snd_card_als100 {
 	int dev_no;
diff -Nru a/sound/isa/azt2320.c b/sound/isa/azt2320.c
--- a/sound/isa/azt2320.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/azt2320.c	2004-08-04 17:48:49 -07:00
@@ -43,15 +43,12 @@
 #include <sound/mpu401.h>
 #include <sound/opl3.h>
 
-#define chip_t cs4231_t
-
 #define PFX "azt2320: "
 
 MODULE_AUTHOR("Massimo Piccioni <dafastidio@libero.it>");
 MODULE_DESCRIPTION("Aztech Systems AZT2320");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{Aztech Systems,PRO16V},"
+MODULE_SUPPORTED_DEVICE("{{Aztech Systems,PRO16V},"
 		"{Aztech Systems,AZT2320},"
 		"{Aztech Systems,AZT3300},"
 		"{Aztech Systems,AZT2320},"
@@ -72,37 +69,26 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for azt2320 based soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for azt2320 based soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable azt2320 based soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(port, long, boot_devs, 0444);
 MODULE_PARM_DESC(port, "Port # for azt2320 driver.");
-MODULE_PARM_SYNTAX(port, SNDRV_PORT12_DESC);
 module_param_array(wss_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(wss_port, "WSS Port # for azt2320 driver.");
-MODULE_PARM_SYNTAX(wss_port, SNDRV_PORT12_DESC);
 module_param_array(mpu_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(mpu_port, "MPU-401 port # for azt2320 driver.");
-MODULE_PARM_SYNTAX(mpu_port, SNDRV_PORT12_DESC);
 module_param_array(fm_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(fm_port, "FM port # for azt2320 driver.");
-MODULE_PARM_SYNTAX(fm_port, SNDRV_PORT12_DESC);
 module_param_array(irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(irq, "IRQ # for azt2320 driver.");
-MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC);
 module_param_array(mpu_irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for azt2320 driver.");
-MODULE_PARM_SYNTAX(mpu_irq, SNDRV_IRQ_DESC);
 module_param_array(dma1, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma1, "1st DMA # for azt2320 driver.");
-MODULE_PARM_SYNTAX(dma1, SNDRV_DMA_DESC);
 module_param_array(dma2, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma2, "2nd DMA # for azt2320 driver.");
-MODULE_PARM_SYNTAX(dma2, SNDRV_DMA_DESC);
 
 struct snd_card_azt2320 {
 	int dev_no;
diff -Nru a/sound/isa/cmi8330.c b/sound/isa/cmi8330.c
--- a/sound/isa/cmi8330.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/cmi8330.c	2004-08-04 17:48:49 -07:00
@@ -63,8 +63,7 @@
 MODULE_AUTHOR("George Talusan <gstalusan@uwaterloo.ca>");
 MODULE_DESCRIPTION("C-Media CMI8330");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{C-Media,CMI8330,isapnp:{CMI0001,@@@0001,@X@0001}}}");
+MODULE_SUPPORTED_DEVICE("{{C-Media,CMI8330,isapnp:{CMI0001,@@@0001,@X@0001}}}");
 
 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
@@ -83,41 +82,30 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for CMI8330 soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string  for CMI8330 soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable CMI8330 soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 #ifdef CONFIG_PNP
 module_param_array(isapnp, bool, boot_devs, 0444);
 MODULE_PARM_DESC(isapnp, "PnP detection for specified soundcard.");
-MODULE_PARM_SYNTAX(isapnp, SNDRV_ISAPNP_DESC);
 #endif
 
 module_param_array(sbport, long, boot_devs, 0444);
 MODULE_PARM_DESC(sbport, "Port # for CMI8330 SB driver.");
-MODULE_PARM_SYNTAX(sbport, SNDRV_ENABLED ",allows:{{0x220,0x280,0x20}},prefers:{0x220},base:16,dialog:list");
 module_param_array(sbirq, int, boot_devs, 0444);
 MODULE_PARM_DESC(sbirq, "IRQ # for CMI8330 SB driver.");
-MODULE_PARM_SYNTAX(sbirq, SNDRV_ENABLED ",allows:{{5},{7},{9},{10},{11},{12}},prefers:{5},dialog:list");
 module_param_array(sbdma8, int, boot_devs, 0444);
 MODULE_PARM_DESC(sbdma8, "DMA8 for CMI8330 SB driver.");
-MODULE_PARM_SYNTAX(sbdma8, SNDRV_DMA8_DESC ",prefers:{1}");
 module_param_array(sbdma16, int, boot_devs, 0444);
 MODULE_PARM_DESC(sbdma16, "DMA16 for CMI8330 SB driver.");
-MODULE_PARM_SYNTAX(sbdma16, SNDRV_ENABLED ",allows:{{5},{7}},prefers:{5},dialog:list");
 
 module_param_array(wssport, long, boot_devs, 0444);
 MODULE_PARM_DESC(wssport, "Port # for CMI8330 WSS driver.");
-MODULE_PARM_SYNTAX(wssport, SNDRV_ENABLED ",allows:{{0x530},{0xe80,0xf40,0xc0}},prefers:{0x530},base:16,dialog:list");
 module_param_array(wssirq, int, boot_devs, 0444);
 MODULE_PARM_DESC(wssirq, "IRQ # for CMI8330 WSS driver.");
-MODULE_PARM_SYNTAX(wssirq, SNDRV_ENABLED ",allows:{{5},{7},{9},{10},{11},{12}},prefers:{11},dialog:list");
 module_param_array(wssdma, int, boot_devs, 0444);
 MODULE_PARM_DESC(wssdma, "DMA for CMI8330 WSS driver.");
-MODULE_PARM_SYNTAX(wssdma, SNDRV_DMA8_DESC ",prefers:{0}");
 
 #define CMI8330_RMUX3D    16
 #define CMI8330_MUTEMUX   17
@@ -385,7 +373,7 @@
 
 static int snd_cmi8330_playback_open(snd_pcm_substream_t * substream)
 {
-	struct snd_cmi8330 *chip = (struct snd_cmi8330 *)_snd_pcm_substream_chip(substream);
+	struct snd_cmi8330 *chip = snd_pcm_substream_chip(substream);
 
 	/* replace the private_data and call the original open callback */
 	substream->private_data = chip->streams[SNDRV_PCM_STREAM_PLAYBACK].private_data;
@@ -394,7 +382,7 @@
 
 static int snd_cmi8330_capture_open(snd_pcm_substream_t * substream)
 {
-	struct snd_cmi8330 *chip = (struct snd_cmi8330 *)_snd_pcm_substream_chip(substream);
+	struct snd_cmi8330 *chip = snd_pcm_substream_chip(substream);
 
 	/* replace the private_data and call the original open callback */
 	substream->private_data = chip->streams[SNDRV_PCM_STREAM_CAPTURE].private_data;
diff -Nru a/sound/isa/cs423x/cs4231.c b/sound/isa/cs423x/cs4231.c
--- a/sound/isa/cs423x/cs4231.c	2004-08-04 17:48:48 -07:00
+++ b/sound/isa/cs423x/cs4231.c	2004-08-04 17:48:48 -07:00
@@ -30,13 +30,10 @@
 #include <sound/mpu401.h>
 #include <sound/initval.h>
 
-#define chip_t cs4231_t
-
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("Generic CS4231");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{Crystal Semiconductors,CS4231}}");
+MODULE_SUPPORTED_DEVICE("{{Crystal Semiconductors,CS4231}}");
 
 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;	/* Index 0-MAX */
 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;	/* ID for this card */
@@ -51,31 +48,22 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for CS4231 soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for CS4231 soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable CS4231 soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(port, long, boot_devs, 0444);
 MODULE_PARM_DESC(port, "Port # for CS4231 driver.");
-MODULE_PARM_SYNTAX(port, SNDRV_PORT12_DESC);
 module_param_array(mpu_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(mpu_port, "MPU-401 port # for CS4231 driver.");
-MODULE_PARM_SYNTAX(mpu_port, SNDRV_PORT12_DESC);
 module_param_array(irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(irq, "IRQ # for CS4231 driver.");
-MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC);
 module_param_array(mpu_irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for CS4231 driver.");
-MODULE_PARM_SYNTAX(mpu_irq, SNDRV_IRQ_DESC);
 module_param_array(dma1, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma1, "DMA1 # for CS4231 driver.");
-MODULE_PARM_SYNTAX(dma1, SNDRV_DMA_DESC);
 module_param_array(dma2, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma2, "DMA2 # for CS4231 driver.");
-MODULE_PARM_SYNTAX(dma2, SNDRV_DMA_DESC);
 
 static snd_card_t *snd_cs4231_cards[SNDRV_CARDS] = SNDRV_DEFAULT_PTR;
 
diff -Nru a/sound/isa/cs423x/cs4231_lib.c b/sound/isa/cs423x/cs4231_lib.c
--- a/sound/isa/cs423x/cs4231_lib.c	2004-08-04 17:48:48 -07:00
+++ b/sound/isa/cs423x/cs4231_lib.c	2004-08-04 17:48:48 -07:00
@@ -43,8 +43,6 @@
 MODULE_DESCRIPTION("Routines for control of CS4231(A)/CS4232/InterWave & compatible chips");
 MODULE_LICENSE("GPL");
 
-#define chip_t cs4231_t
-
 #if 0
 #define SNDRV_DEBUG_MCE
 #endif
@@ -969,7 +967,7 @@
 
 irqreturn_t snd_cs4231_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	cs4231_t *chip = snd_magic_cast(cs4231_t, dev_id, return IRQ_NONE);
+	cs4231_t *chip = dev_id;
 	unsigned char status;
 
 	status = snd_cs4231_in(chip, CS4231_IRQ_STATUS);
@@ -1407,7 +1405,7 @@
 
 static int snd_cs4231_pm_suspend(snd_card_t *card, unsigned int state)
 {
-	cs4231_t *chip = snd_magic_cast(cs4231_t, card->pm_private_data, return -EINVAL);
+	cs4231_t *chip = card->pm_private_data;
 	if (chip->suspend) {
 		chip->suspend(chip);
 		snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
@@ -1417,7 +1415,7 @@
 
 static int snd_cs4231_pm_resume(snd_card_t *card, unsigned int state)
 {
-	cs4231_t *chip = snd_magic_cast(cs4231_t, card->pm_private_data, return -EINVAL);
+	cs4231_t *chip = card->pm_private_data;
 	if (chip->resume) {
 		chip->resume(chip);
 		snd_power_change_state(card, SNDRV_CTL_POWER_D0);
@@ -1453,13 +1451,13 @@
 	}
 	if (chip->timer)
 		snd_device_free(chip->card, chip->timer);
-	snd_magic_kfree(chip);
+	kfree(chip);
 	return 0;
 }
 
 static int snd_cs4231_dev_free(snd_device_t *device)
 {
-	cs4231_t *chip = snd_magic_cast(cs4231_t, device->device_data, return -ENXIO);
+	cs4231_t *chip = device->device_data;
 	return snd_cs4231_free(chip);	
 }
 
@@ -1493,7 +1491,7 @@
 	cs4231_t *chip;
 
 	*rchip = NULL;
-	chip = snd_magic_kcalloc(cs4231_t, 0, GFP_KERNEL);
+	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
 	if (chip == NULL)
 		return -ENOMEM;
 	chip->hardware = hardware;
@@ -1626,7 +1624,7 @@
 
 static void snd_cs4231_pcm_free(snd_pcm_t *pcm)
 {
-	cs4231_t *chip = snd_magic_cast(cs4231_t, pcm->private_data, return);
+	cs4231_t *chip = pcm->private_data;
 	chip->pcm = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
@@ -1686,7 +1684,7 @@
 
 static void snd_cs4231_timer_free(snd_timer_t *timer)
 {
-	cs4231_t *chip = snd_magic_cast(cs4231_t, timer->private_data, return);
+	cs4231_t *chip = timer->private_data;
 	chip->timer = NULL;
 }
 
@@ -1898,8 +1896,6 @@
 	return change;
 }
 
-#define CS4231_CONTROLS (sizeof(snd_cs4231_controls)/sizeof(snd_kcontrol_new_t))
-
 static snd_kcontrol_new_t snd_cs4231_controls[] = {
 CS4231_DOUBLE("PCM Playback Switch", 0, CS4231_LEFT_OUTPUT, CS4231_RIGHT_OUTPUT, 7, 7, 1, 1),
 CS4231_DOUBLE("PCM Playback Volume", 0, CS4231_LEFT_OUTPUT, CS4231_RIGHT_OUTPUT, 0, 0, 63, 1),
@@ -1938,7 +1934,7 @@
 
 	strcpy(card->mixername, chip->pcm->name);
 
-	for (idx = 0; idx < CS4231_CONTROLS; idx++) {
+	for (idx = 0; idx < ARRAY_SIZE(snd_cs4231_controls); idx++) {
 		if ((err = snd_ctl_add(card, snd_ctl_new1(&snd_cs4231_controls[idx], chip))) < 0)
 			return err;
 	}
diff -Nru a/sound/isa/cs423x/cs4236.c b/sound/isa/cs423x/cs4236.c
--- a/sound/isa/cs423x/cs4236.c	2004-08-04 17:48:48 -07:00
+++ b/sound/isa/cs423x/cs4236.c	2004-08-04 17:48:48 -07:00
@@ -30,14 +30,11 @@
 #include <sound/opl3.h>
 #include <sound/initval.h>
 
-#define chip_t cs4231_t
-
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
 #ifdef CS4232
 MODULE_DESCRIPTION("Cirrus Logic CS4232");
-MODULE_DEVICES("{{Turtle Beach,TBS-2000},"
+MODULE_SUPPORTED_DEVICE("{{Turtle Beach,TBS-2000},"
 		"{Turtle Beach,Tropez Plus},"
 		"{SIC CrystalWave 32},"
 		"{Hewlett Packard,Omnibook 5500},"
@@ -45,7 +42,7 @@
 		"{Philips,PCA70PS}}");
 #else
 MODULE_DESCRIPTION("Cirrus Logic CS4235-9");
-MODULE_DEVICES("{{Crystal Semiconductors,CS4235},"
+MODULE_SUPPORTED_DEVICE("{{Crystal Semiconductors,CS4235},"
 		"{Crystal Semiconductors,CS4236},"
 		"{Crystal Semiconductors,CS4237},"
 		"{Crystal Semiconductors,CS4238},"
@@ -99,45 +96,32 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for " IDENT " soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for " IDENT " soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable " IDENT " soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 #ifdef CONFIG_PNP
 module_param_array(isapnp, bool, boot_devs, 0444);
 MODULE_PARM_DESC(isapnp, "ISA PnP detection for specified soundcard.");
-MODULE_PARM_SYNTAX(isapnp, SNDRV_ISAPNP_DESC);
 #endif
 module_param_array(port, long, boot_devs, 0444);
 MODULE_PARM_DESC(port, "Port # for " IDENT " driver.");
-MODULE_PARM_SYNTAX(port, SNDRV_PORT12_DESC);
 module_param_array(cport, long, boot_devs, 0444);
 MODULE_PARM_DESC(cport, "Control port # for " IDENT " driver.");
-MODULE_PARM_SYNTAX(cport, SNDRV_PORT12_DESC);
 module_param_array(mpu_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(mpu_port, "MPU-401 port # for " IDENT " driver.");
-MODULE_PARM_SYNTAX(mpu_port, SNDRV_PORT12_DESC);
 module_param_array(fm_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(fm_port, "FM port # for " IDENT " driver.");
-MODULE_PARM_SYNTAX(fm_port, SNDRV_PORT12_DESC);
 module_param_array(sb_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(sb_port, "SB port # for " IDENT " driver (optional).");
-MODULE_PARM_SYNTAX(sb_port, SNDRV_PORT12_DESC);
 module_param_array(irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(irq, "IRQ # for " IDENT " driver.");
-MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC);
 module_param_array(mpu_irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for " IDENT " driver.");
-MODULE_PARM_SYNTAX(mpu_irq, SNDRV_IRQ_DESC);
 module_param_array(dma1, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma1, "DMA1 # for " IDENT " driver.");
-MODULE_PARM_SYNTAX(dma1, SNDRV_DMA_DESC);
 module_param_array(dma2, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma2, "DMA2 # for " IDENT " driver.");
-MODULE_PARM_SYNTAX(dma2, SNDRV_DMA_DESC);
 
 struct snd_card_cs4236 {
 	struct resource *res_sb_port;
diff -Nru a/sound/isa/cs423x/cs4236_lib.c b/sound/isa/cs423x/cs4236_lib.c
--- a/sound/isa/cs423x/cs4236_lib.c	2004-08-04 17:48:48 -07:00
+++ b/sound/isa/cs423x/cs4236_lib.c	2004-08-04 17:48:48 -07:00
@@ -93,8 +93,6 @@
 MODULE_DESCRIPTION("Routines for control of CS4235/4236B/4237B/4238B/4239 chips");
 MODULE_LICENSE("GPL");
 
-#define chip_t cs4231_t
-
 /*
  *
  */
@@ -707,8 +705,6 @@
 	return change;
 }
 
-#define CS4236_CONTROLS (sizeof(snd_cs4236_controls)/sizeof(snd_kcontrol_new_t))
-
 static snd_kcontrol_new_t snd_cs4236_controls[] = {
 
 CS4236_DOUBLE("Master Digital Playback Switch", 0, CS4236_LEFT_MASTER, CS4236_RIGHT_MASTER, 7, 7, 1, 1),
@@ -760,8 +756,6 @@
 CS4236_DOUBLE1("Digital Loopback Playback Volume", 0, CS4231_LOOPBACK, CS4236_RIGHT_LOOPBACK, 2, 0, 63, 1)
 };
 
-#define CS4235_CONTROLS (sizeof(snd_cs4235_controls)/sizeof(snd_kcontrol_new_t))
-
 static snd_kcontrol_new_t snd_cs4235_controls[] = {
 
 CS4231_DOUBLE("Master Switch", 0, CS4235_LEFT_MASTER, CS4235_RIGHT_MASTER, 7, 7, 1, 1),
@@ -871,8 +865,6 @@
 	return change;
 }
 
-#define CS4236_IEC958_CONTROLS (sizeof(snd_cs4236_iec958_controls)/sizeof(snd_kcontrol_new_t))
-
 static snd_kcontrol_new_t snd_cs4236_iec958_controls[] = {
 CS4236_IEC958_ENABLE("IEC958 Output Enable", 0),
 CS4236_SINGLEC("IEC958 Output Validity", 0, 4, 4, 1, 0),
@@ -882,15 +874,11 @@
 CS4236_SINGLEC("IEC958 Output Channel Status High", 0, 6, 0, 255, 0)
 };
 
-#define CS4236_3D_CONTROLS_CS4235 (sizeof(snd_cs4236_3d_controls_cs4235)/sizeof(snd_kcontrol_new_t))
-
 static snd_kcontrol_new_t snd_cs4236_3d_controls_cs4235[] = {
 CS4236_SINGLEC("3D Control - Switch", 0, 3, 4, 1, 0),
 CS4236_SINGLEC("3D Control - Space", 0, 2, 4, 15, 1)
 };
 
-#define CS4236_3D_CONTROLS_CS4237 (sizeof(snd_cs4236_3d_controls_cs4237)/sizeof(snd_kcontrol_new_t))
-
 static snd_kcontrol_new_t snd_cs4236_3d_controls_cs4237[] = {
 CS4236_SINGLEC("3D Control - Switch", 0, 3, 7, 1, 0),
 CS4236_SINGLEC("3D Control - Space", 0, 2, 4, 15, 1),
@@ -899,8 +887,6 @@
 CS4236_SINGLEC("3D Control - IEC958", 0, 3, 5, 1, 0)
 };
 
-#define CS4236_3D_CONTROLS_CS4238 (sizeof(snd_cs4236_3d_controls_cs4238)/sizeof(snd_kcontrol_new_t))
-
 static snd_kcontrol_new_t snd_cs4236_3d_controls_cs4238[] = {
 CS4236_SINGLEC("3D Control - Switch", 0, 3, 4, 1, 0),
 CS4236_SINGLEC("3D Control - Space", 0, 2, 4, 15, 1),
@@ -921,12 +907,12 @@
 
 	if (chip->hardware == CS4231_HW_CS4235 ||
 	    chip->hardware == CS4231_HW_CS4239) {
-		for (idx = 0; idx < CS4235_CONTROLS; idx++) {
+		for (idx = 0; idx < ARRAY_SIZE(snd_cs4235_controls); idx++) {
 			if ((err = snd_ctl_add(card, snd_ctl_new1(&snd_cs4235_controls[idx], chip))) < 0)
 				return err;
 		}
 	} else {
-		for (idx = 0; idx < CS4236_CONTROLS; idx++) {
+		for (idx = 0; idx < ARRAY_SIZE(snd_cs4236_controls); idx++) {
 			if ((err = snd_ctl_add(card, snd_ctl_new1(&snd_cs4236_controls[idx], chip))) < 0)
 				return err;
 		}
@@ -934,15 +920,15 @@
 	switch (chip->hardware) {
 	case CS4231_HW_CS4235:
 	case CS4231_HW_CS4239:
-		count = CS4236_3D_CONTROLS_CS4235;
+		count = ARRAY_SIZE(snd_cs4236_3d_controls_cs4235);
 		kcontrol = snd_cs4236_3d_controls_cs4235;
 		break;
 	case CS4231_HW_CS4237B:
-		count = CS4236_3D_CONTROLS_CS4237;
+		count = ARRAY_SIZE(snd_cs4236_3d_controls_cs4237);
 		kcontrol = snd_cs4236_3d_controls_cs4237;
 		break;
 	case CS4231_HW_CS4238B:
-		count = CS4236_3D_CONTROLS_CS4238;
+		count = ARRAY_SIZE(snd_cs4236_3d_controls_cs4238);
 		kcontrol = snd_cs4236_3d_controls_cs4238;
 		break;
 	default:
@@ -955,7 +941,7 @@
 	}
 	if (chip->hardware == CS4231_HW_CS4237B ||
 	    chip->hardware == CS4231_HW_CS4238B) {
-		for (idx = 0; idx < CS4236_IEC958_CONTROLS; idx++) {
+		for (idx = 0; idx < ARRAY_SIZE(snd_cs4236_iec958_controls); idx++) {
 			if ((err = snd_ctl_add(card, snd_ctl_new1(&snd_cs4236_iec958_controls[idx], chip))) < 0)
 				return err;
 		}
diff -Nru a/sound/isa/dt019x.c b/sound/isa/dt019x.c
--- a/sound/isa/dt019x.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/dt019x.c	2004-08-04 17:48:49 -07:00
@@ -33,15 +33,12 @@
 #include <sound/opl3.h>
 #include <sound/sb.h>
 
-#define chip_t sb_t
-
 #define PFX "dt019x: "
 
 MODULE_AUTHOR("Massimo Piccioni <dafastidio@libero.it>");
 MODULE_DESCRIPTION("Diamond Technologies DT-019X / Avance Logic ALS-007");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{Diamond Technologies DT-019X},"
+MODULE_SUPPORTED_DEVICE("{{Diamond Technologies DT-019X},"
 	       "{Avance Logic ALS-007}}");
 
 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;	/* Index 0-MAX */
@@ -57,31 +54,22 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for DT-019X based soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for DT-019X based soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable DT-019X based soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(port, long, boot_devs, 0444);
 MODULE_PARM_DESC(port, "Port # for dt019x driver.");
-MODULE_PARM_SYNTAX(port, SNDRV_PORT12_DESC);
 module_param_array(mpu_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(mpu_port, "MPU-401 port # for dt019x driver.");
-MODULE_PARM_SYNTAX(mpu_port, SNDRV_PORT12_DESC);
 module_param_array(fm_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(fm_port, "FM port # for dt019x driver.");
-MODULE_PARM_SYNTAX(fm_port, SNDRV_PORT12_DESC);
 module_param_array(irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(irq, "IRQ # for dt019x driver.");
-MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC);
 module_param_array(mpu_irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for dt019x driver.");
-MODULE_PARM_SYNTAX(mpu_irq, SNDRV_IRQ_DESC);
 module_param_array(dma8, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma8, "8-bit DMA # for dt019x driver.");
-MODULE_PARM_SYNTAX(dma8, SNDRV_DMA8_DESC);
 
 struct snd_card_dt019x {
 	struct pnp_dev *dev;
diff -Nru a/sound/isa/es1688/es1688.c b/sound/isa/es1688/es1688.c
--- a/sound/isa/es1688/es1688.c	2004-08-04 17:48:48 -07:00
+++ b/sound/isa/es1688/es1688.c	2004-08-04 17:48:48 -07:00
@@ -37,8 +37,7 @@
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("ESS ESx688 AudioDrive");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{ESS,ES688 PnP AudioDrive,pnp:ESS0100},"
+MODULE_SUPPORTED_DEVICE("{{ESS,ES688 PnP AudioDrive,pnp:ESS0100},"
 	        "{ESS,ES1688 PnP AudioDrive,pnp:ESS0102},"
 	        "{ESS,ES688 AudioDrive,pnp:ESS6881},"
 	        "{ESS,ES1688 AudioDrive,pnp:ESS1681}}");
@@ -55,28 +54,20 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for ESx688 soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for ESx688 soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable ESx688 soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(port, long, boot_devs, 0444);
 MODULE_PARM_DESC(port, "Port # for ESx688 driver.");
-MODULE_PARM_SYNTAX(port, SNDRV_PORT12_DESC);
 module_param_array(mpu_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(mpu_port, "MPU-401 port # for ESx688 driver.");
-MODULE_PARM_SYNTAX(mpu_port, SNDRV_PORT12_DESC);
 module_param_array(irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(irq, "IRQ # for ESx688 driver.");
-MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC);
 module_param_array(mpu_irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for ESx688 driver.");
-MODULE_PARM_SYNTAX(mpu_irq, SNDRV_IRQ_DESC);
 module_param_array(dma8, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma8, "8-bit DMA # for ESx688 driver.");
-MODULE_PARM_SYNTAX(dma8, SNDRV_DMA8_DESC);
 
 static snd_card_t *snd_audiodrive_cards[SNDRV_CARDS] = SNDRV_DEFAULT_PTR;
 
diff -Nru a/sound/isa/es1688/es1688_lib.c b/sound/isa/es1688/es1688_lib.c
--- a/sound/isa/es1688/es1688_lib.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/es1688/es1688_lib.c	2004-08-04 17:48:49 -07:00
@@ -34,7 +34,6 @@
 
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("ESS ESx688 lowlevel module");
-MODULE_CLASSES("{sound}");
 MODULE_LICENSE("GPL");
 
 static int snd_es1688_dsp_command(es1688_t *chip, unsigned char val)
@@ -482,7 +481,7 @@
 
 irqreturn_t snd_es1688_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	es1688_t *chip = snd_magic_cast(es1688_t, dev_id, return IRQ_NONE);
+	es1688_t *chip = dev_id;
 
 	if (chip->trigger_value == 0x05)	/* ok.. playback is active */
 		snd_pcm_period_elapsed(chip->playback_substream);
@@ -616,13 +615,13 @@
 		disable_dma(chip->dma8);
 		free_dma(chip->dma8);
 	}
-	snd_magic_kfree(chip);
+	kfree(chip);
 	return 0;
 }
 
 static int snd_es1688_dev_free(snd_device_t *device)
 {
-	es1688_t *chip = snd_magic_cast(es1688_t, device->device_data, return -ENXIO);
+	es1688_t *chip = device->device_data;
 	return snd_es1688_free(chip);
 }
 
@@ -650,7 +649,7 @@
 	int err;
 
 	*rchip = NULL;
-	chip = snd_magic_kcalloc(es1688_t, 0, GFP_KERNEL);
+	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
 	if (chip == NULL)
 		return -ENOMEM;
 	chip->irq = -1;
@@ -728,7 +727,7 @@
 
 static void snd_es1688_pcm_free(snd_pcm_t *pcm)
 {
-	es1688_t *chip = snd_magic_cast(es1688_t, pcm->private_data, return);
+	es1688_t *chip = pcm->private_data;
 	chip->pcm = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
@@ -978,8 +977,6 @@
 	return change;
 }
 
-#define ES1688_CONTROLS (sizeof(snd_es1688_controls)/sizeof(snd_kcontrol_new_t))
-
 static snd_kcontrol_new_t snd_es1688_controls[] = {
 ES1688_DOUBLE("Master Playback Volume", 0, ES1688_MASTER_DEV, ES1688_MASTER_DEV, 4, 0, 15, 0),
 ES1688_DOUBLE("PCM Playback Volume", 0, ES1688_PCM_DEV, ES1688_PCM_DEV, 4, 0, 15, 0),
@@ -1028,7 +1025,7 @@
 
 	strcpy(card->mixername, snd_es1688_chip_id(chip));
 
-	for (idx = 0; idx < ES1688_CONTROLS; idx++) {
+	for (idx = 0; idx < ARRAY_SIZE(snd_es1688_controls); idx++) {
 		if ((err = snd_ctl_add(card, snd_ctl_new1(&snd_es1688_controls[idx], chip))) < 0)
 			return err;
 	}
diff -Nru a/sound/isa/es18xx.c b/sound/isa/es18xx.c
--- a/sound/isa/es18xx.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/es18xx.c	2004-08-04 17:48:49 -07:00
@@ -157,8 +157,6 @@
 
 typedef struct _snd_es18xx es18xx_t;
 
-#define chip_t es18xx_t
-
 /* Lowlevel */
 
 #define DAC1 0x01
@@ -728,7 +726,7 @@
 
 static irqreturn_t snd_es18xx_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	es18xx_t *chip = snd_magic_cast(es18xx_t, dev_id, return IRQ_NONE);
+	es18xx_t *chip = dev_id;
 	unsigned char status;
 
 	if (chip->caps & ES18XX_CONTROL) {
@@ -1027,7 +1025,7 @@
 
 static void snd_es18xx_hwv_free(snd_kcontrol_t *kcontrol)
 {
-	es18xx_t *chip = snd_magic_cast(es18xx_t, _snd_kcontrol_chip(kcontrol), return);
+	es18xx_t *chip = snd_kcontrol_chip(kcontrol);
 	chip->master_volume = NULL;
 	chip->master_switch = NULL;
 	chip->hw_volume = NULL;
@@ -1561,7 +1559,7 @@
 
 static void snd_es18xx_pcm_free(snd_pcm_t *pcm)
 {
-	es18xx_t *codec = snd_magic_cast(es18xx_t, pcm->private_data, return);
+	es18xx_t *codec = pcm->private_data;
 	codec->pcm = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
@@ -1611,7 +1609,7 @@
 #ifdef CONFIG_PM
 static int snd_es18xx_suspend(snd_card_t *card, unsigned int state)
 {
-	es18xx_t *chip = snd_magic_cast(es18xx_t, card->pm_private_data, return -EINVAL);
+	es18xx_t *chip = card->pm_private_data;
 
 	snd_pcm_suspend_all(chip->pcm);
 
@@ -1627,7 +1625,7 @@
 
 static int snd_es18xx_resume(snd_card_t *card, unsigned int state)
 {
-	es18xx_t *chip = snd_magic_cast(es18xx_t, card->pm_private_data, return -EINVAL);
+	es18xx_t *chip = card->pm_private_data;
 
 	/* restore PM register, we won't wake till (not 0x07) i/o activity though */
 	snd_es18xx_write(chip, ES18XX_PM, chip->pm_reg ^= ES18XX_PM_FM);
@@ -1661,13 +1659,13 @@
 		disable_dma(chip->dma2);
 		free_dma(chip->dma2);
 	}
-	snd_magic_kfree(chip);
+	kfree(chip);
 	return 0;
 }
 
 static int snd_es18xx_dev_free(snd_device_t *device)
 {
-	es18xx_t *chip = snd_magic_cast(es18xx_t, device->device_data, return -ENXIO);
+	es18xx_t *chip = device->device_data;
 	return snd_es18xx_free(chip);
 }
 
@@ -1685,7 +1683,7 @@
 	int err;
 
 	*rchip = NULL;
-        chip = snd_magic_kcalloc(es18xx_t, 0, GFP_KERNEL);
+        chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
 	if (chip == NULL)
 		return -ENOMEM;
 	spin_lock_init(&chip->reg_lock);
@@ -1830,8 +1828,7 @@
 MODULE_AUTHOR("Christian Fischbach <fishbach@pool.informatik.rwth-aachen.de>, Abramo Bagnara <abramo@alsa-project.org>");  
 MODULE_DESCRIPTION("ESS ES18xx AudioDrive");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{ESS,ES1868 PnP AudioDrive},"
+MODULE_SUPPORTED_DEVICE("{{ESS,ES1868 PnP AudioDrive},"
 		"{ESS,ES1869 PnP AudioDrive},"
 		"{ESS,ES1878 PnP AudioDrive},"
 		"{ESS,ES1879 PnP AudioDrive},"
@@ -1860,36 +1857,26 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for ES18xx soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for ES18xx soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable ES18xx soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 #ifdef CONFIG_PNP
 module_param_array(isapnp, bool, boot_devs, 0444);
 MODULE_PARM_DESC(isapnp, "PnP detection for specified soundcard.");
-MODULE_PARM_SYNTAX(isapnp, SNDRV_ISAPNP_DESC);
 #endif
 module_param_array(port, long, boot_devs, 0444);
 MODULE_PARM_DESC(port, "Port # for ES18xx driver.");
-MODULE_PARM_SYNTAX(port, SNDRV_ENABLED ",allows:{{0x220,0x280,0x20}},prefers:{0x220},base:16,dialog:list");
 module_param_array(mpu_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(mpu_port, "MPU-401 port # for ES18xx driver.");
-MODULE_PARM_SYNTAX(mpu_port, SNDRV_ENABLED ",allows:{{0x300,0x330,0x30},{0x800,0xffe,0x2}},prefers:{0x330,0x300},base:16,dialog:combo");
 module_param_array(fm_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(fm_port, "FM port # for ES18xx driver.");
-MODULE_PARM_SYNTAX(fm_port, SNDRV_ENABLED ",allows:{{0x388},{0x800,0xffc,0x4}},prefers:{0x388},base:16,dialog:combo");
 module_param_array(irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(irq, "IRQ # for ES18xx driver.");
-MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC ",prefers:{5}");
 module_param_array(dma1, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma1, "DMA 1 # for ES18xx driver.");
-MODULE_PARM_SYNTAX(dma1, SNDRV_DMA8_DESC ",prefers:{1}");
 module_param_array(dma2, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma2, "DMA 2 # for ES18xx driver.");
-MODULE_PARM_SYNTAX(dma2, SNDRV_ENABLED ",allows:{{0},{1},{3},{5}},dialog:list,prefers:{0}");
 
 struct snd_audiodrive {
 #ifdef CONFIG_PNP
diff -Nru a/sound/isa/gus/Makefile b/sound/isa/gus/Makefile
--- a/sound/isa/gus/Makefile	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/gus/Makefile	2004-08-04 17:48:49 -07:00
@@ -27,14 +27,10 @@
 
 # Toplevel Module Dependency
 obj-$(CONFIG_SND_GUSCLASSIC) += snd-gusclassic.o snd-gus-lib.o
-obj-$(call sequencer,$(CONFIG_SND_GUSCLASSIC)) += snd-gus-synth.o
 obj-$(CONFIG_SND_GUSMAX) += snd-gusmax.o snd-gus-lib.o
-obj-$(call sequencer,$(CONFIG_SND_GUSMAX)) += snd-gus-synth.o
 obj-$(CONFIG_SND_GUSEXTREME) += snd-gusextreme.o snd-gus-lib.o
-obj-$(call sequencer,$(CONFIG_SND_GUSEXTREME)) += snd-gus-synth.o
 obj-$(CONFIG_SND_INTERWAVE) += snd-interwave.o snd-gus-lib.o
-obj-$(call sequencer,$(CONFIG_SND_INTERWAVE)) += snd-gus-synth.o
 obj-$(CONFIG_SND_INTERWAVE_STB) += snd-interwave-stb.o snd-gus-lib.o
-obj-$(call sequencer,$(CONFIG_SND_INTERWAVE_STB)) += snd-gus-synth.o
+obj-$(call sequencer,$(CONFIG_SND_GUS_SYNTH)) += snd-gus-synth.o
 
 obj-m := $(sort $(obj-m))
diff -Nru a/sound/isa/gus/gus_dram.c b/sound/isa/gus/gus_dram.c
--- a/sound/isa/gus/gus_dram.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/gus/gus_dram.c	2004-08-04 17:48:49 -07:00
@@ -31,12 +31,12 @@
 {
 	unsigned long flags;
 	unsigned int size1, size2;
-	char buffer[512], *pbuffer;
+	char buffer[256], *pbuffer;
 
 	while (size > 0) {
-		if (copy_from_user(buffer, _buffer, 512))
+		size1 = size > sizeof(buffer) ? sizeof(buffer) : size;
+		if (copy_from_user(buffer, _buffer, size1))
 			return -EFAULT;
-		size1 = size > 512 ? 512 : size;
 		if (gus->interwave) {
 			spin_lock_irqsave(&gus->reg_lock, flags);
 			snd_gf1_write8(gus, SNDRV_GF1_GB_MEMORY_CONTROL, 0x01);
@@ -69,10 +69,10 @@
 {
 	unsigned long flags;
 	unsigned int size1, size2;
-	char buffer[512], *pbuffer;
+	char buffer[256], *pbuffer;
 
 	while (size > 0) {
-		size1 = size > 512 ? 512 : size;
+		size1 = size > sizeof(buffer) ? sizeof(buffer) : size;
 		if (gus->interwave) {
 			spin_lock_irqsave(&gus->reg_lock, flags);
 			snd_gf1_write8(gus, SNDRV_GF1_GB_MEMORY_CONTROL, rom ? 0x03 : 0x01);
diff -Nru a/sound/isa/gus/gus_instr.c b/sound/isa/gus/gus_instr.c
--- a/sound/isa/gus/gus_instr.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/gus/gus_instr.c	2004-08-04 17:48:49 -07:00
@@ -31,7 +31,7 @@
 int snd_gus_iwffff_put_sample(void *private_data, iwffff_wave_t *wave,
 			      char __user *data, long len, int atomic)
 {
-	snd_gus_card_t *gus = snd_magic_cast(snd_gus_card_t, private_data, return -ENXIO);
+	snd_gus_card_t *gus = private_data;
 	snd_gf1_mem_block_t *block;
 	int err;
 
@@ -61,7 +61,7 @@
 int snd_gus_iwffff_get_sample(void *private_data, iwffff_wave_t *wave,
 			      char __user *data, long len, int atomic)
 {
-	snd_gus_card_t *gus = snd_magic_cast(snd_gus_card_t, private_data, return -ENXIO);
+	snd_gus_card_t *gus = private_data;
 
 	return snd_gus_dram_read(gus, data, wave->address.memory, wave->size,
 				 wave->format & IWFFFF_WAVE_ROM ? 1 : 0);
@@ -70,7 +70,7 @@
 int snd_gus_iwffff_remove_sample(void *private_data, iwffff_wave_t *wave,
 				 int atomic)
 {
-	snd_gus_card_t *gus = snd_magic_cast(snd_gus_card_t, private_data, return -ENXIO);
+	snd_gus_card_t *gus = private_data;
 
 	if (wave->format & IWFFFF_WAVE_ROM)
 		return 0;	/* it's probably ok - verify the address? */	
@@ -84,7 +84,7 @@
 int snd_gus_gf1_put_sample(void *private_data, gf1_wave_t *wave,
 			   char __user *data, long len, int atomic)
 {
-	snd_gus_card_t *gus = snd_magic_cast(snd_gus_card_t, private_data, return -ENXIO);
+	snd_gus_card_t *gus = private_data;
 	snd_gf1_mem_block_t *block;
 	int err;
 
@@ -112,7 +112,7 @@
 int snd_gus_gf1_get_sample(void *private_data, gf1_wave_t *wave,
 			   char __user *data, long len, int atomic)
 {
-	snd_gus_card_t *gus = snd_magic_cast(snd_gus_card_t, private_data, return -ENXIO);
+	snd_gus_card_t *gus = private_data;
 
 	return snd_gus_dram_read(gus, data, wave->address.memory, wave->size, 0);
 }
@@ -120,7 +120,7 @@
 int snd_gus_gf1_remove_sample(void *private_data, gf1_wave_t *wave,
 			      int atomic)
 {
-	snd_gus_card_t *gus = snd_magic_cast(snd_gus_card_t, private_data, return -ENXIO);
+	snd_gus_card_t *gus = private_data;
 
 	return snd_gf1_mem_free(&gus->gf1.mem_alloc, wave->address.memory);
 }
@@ -132,7 +132,7 @@
 int snd_gus_simple_put_sample(void *private_data, simple_instrument_t *instr,
 			      char __user *data, long len, int atomic)
 {
-	snd_gus_card_t *gus = snd_magic_cast(snd_gus_card_t, private_data, return -ENXIO);
+	snd_gus_card_t *gus = private_data;
 	snd_gf1_mem_block_t *block;
 	int err;
 
@@ -159,7 +159,7 @@
 int snd_gus_simple_get_sample(void *private_data, simple_instrument_t *instr,
 			      char __user *data, long len, int atomic)
 {
-	snd_gus_card_t *gus = snd_magic_cast(snd_gus_card_t, private_data, return -ENXIO);
+	snd_gus_card_t *gus = private_data;
 
 	return snd_gus_dram_read(gus, data, instr->address.memory, instr->size, 0);
 }
@@ -167,7 +167,7 @@
 int snd_gus_simple_remove_sample(void *private_data, simple_instrument_t *instr,
 			         int atomic)
 {
-	snd_gus_card_t *gus = snd_magic_cast(snd_gus_card_t, private_data, return -ENXIO);
+	snd_gus_card_t *gus = private_data;
 
 	return snd_gf1_mem_free(&gus->gf1.mem_alloc, instr->address.memory);
 }
diff -Nru a/sound/isa/gus/gus_irq.c b/sound/isa/gus/gus_irq.c
--- a/sound/isa/gus/gus_irq.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/gus/gus_irq.c	2004-08-04 17:48:49 -07:00
@@ -32,7 +32,7 @@
 
 irqreturn_t snd_gus_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	snd_gus_card_t * gus = snd_magic_cast(snd_gus_card_t, dev_id, return IRQ_NONE);
+	snd_gus_card_t * gus = dev_id;
 	unsigned char status;
 	int loop = 100;
 	int handled = 0;
@@ -114,7 +114,7 @@
 	snd_gus_voice_t *pvoice;
 	int idx;
 
-	gus = snd_magic_cast(snd_gus_card_t, entry->private_data, return);
+	gus = entry->private_data;
 	snd_iprintf(buffer, "midi out = %u\n", gus->gf1.interrupt_stat_midi_out);
 	snd_iprintf(buffer, "midi in = %u\n", gus->gf1.interrupt_stat_midi_in);
 	snd_iprintf(buffer, "timer1 = %u\n", gus->gf1.interrupt_stat_timer1);
diff -Nru a/sound/isa/gus/gus_main.c b/sound/isa/gus/gus_main.c
--- a/sound/isa/gus/gus_main.c	2004-08-04 17:48:48 -07:00
+++ b/sound/isa/gus/gus_main.c	2004-08-04 17:48:48 -07:00
@@ -35,8 +35,6 @@
 MODULE_DESCRIPTION("Routines for Gravis UltraSound soundcards");
 MODULE_LICENSE("GPL");
 
-#define chip_t snd_gus_card_t
-
 static int snd_gus_init_dma_irq(snd_gus_card_t * gus, int latches);
 
 int snd_gus_use_inc(snd_gus_card_t * gus)
@@ -133,13 +131,13 @@
 		disable_dma(gus->gf1.dma2);
 		free_dma(gus->gf1.dma2);
 	}
-	snd_magic_kfree(gus);
+	kfree(gus);
 	return 0;
 }
 
 static int snd_gus_dev_free(snd_device_t *device)
 {
-	snd_gus_card_t *gus = snd_magic_cast(snd_gus_card_t, device->device_data, return -ENXIO);
+	snd_gus_card_t *gus = device->device_data;
 	return snd_gus_free(gus);
 }
 
@@ -159,7 +157,7 @@
 	};
 
 	*rgus = NULL;
-	gus = snd_magic_kcalloc(snd_gus_card_t, 0, GFP_KERNEL);
+	gus = kcalloc(1, sizeof(*gus), GFP_KERNEL);
 	if (gus == NULL)
 		return -ENOMEM;
 	gus->gf1.irq = -1;
@@ -421,7 +419,7 @@
 
 static void snd_gus_seq_dev_free(snd_seq_device_t *seq_dev)
 {
-	snd_gus_card_t *gus = snd_magic_cast(snd_gus_card_t, seq_dev->private_data, return);
+	snd_gus_card_t *gus = seq_dev->private_data;
 	gus->seq_dev = NULL;
 }
 
diff -Nru a/sound/isa/gus/gus_mem.c b/sound/isa/gus/gus_mem.c
--- a/sound/isa/gus/gus_mem.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/gus/gus_mem.c	2004-08-04 17:48:49 -07:00
@@ -297,7 +297,7 @@
 	unsigned int total, used;
 	int i;
 
-	gus = snd_magic_cast(snd_gus_card_t, entry->private_data, return);
+	gus = entry->private_data;
 	alloc = &gus->gf1.mem_alloc;
 	down(&alloc->memory_mutex);
 	snd_iprintf(buffer, "8-bit banks       : \n    ");
diff -Nru a/sound/isa/gus/gus_mem_proc.c b/sound/isa/gus/gus_mem_proc.c
--- a/sound/isa/gus/gus_mem_proc.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/gus/gus_mem_proc.c	2004-08-04 17:48:49 -07:00
@@ -36,7 +36,7 @@
 			          struct file *file, char __user *buf, long count)
 {
 	long size;
-	gus_proc_private_t *priv = snd_magic_cast(gus_proc_private_t, entry->private_data, return -ENXIO);
+	gus_proc_private_t *priv = entry->private_data;
 	snd_gus_card_t *gus = priv->gus;
 	int err;
 
@@ -58,7 +58,7 @@
 					long long offset,
 					int orig)
 {
-	gus_proc_private_t *priv = snd_magic_cast(gus_proc_private_t, entry->private_data, return -ENXIO);
+	gus_proc_private_t *priv = entry->private_data;
 
 	switch (orig) {
 	case 0:	/* SEEK_SET */
@@ -80,8 +80,8 @@
 
 static void snd_gf1_mem_proc_free(snd_info_entry_t *entry)
 {
-	gus_proc_private_t *priv = snd_magic_cast(gus_proc_private_t, entry->private_data, return);
-	snd_magic_kfree(priv);
+	gus_proc_private_t *priv = entry->private_data;
+	kfree(priv);
 }
 
 static struct snd_info_entry_ops snd_gf1_mem_proc_ops = {
@@ -98,7 +98,7 @@
 
 	for (idx = 0; idx < 4; idx++) {
 		if (gus->gf1.mem_alloc.banks_8[idx].size > 0) {
-			priv = snd_magic_kcalloc(gus_proc_private_t, 0, GFP_KERNEL);
+			priv = kcalloc(1, sizeof(*priv), GFP_KERNEL);
 			if (priv == NULL)
 				return -ENOMEM;
 			priv->gus = gus;
@@ -115,7 +115,7 @@
 	}
 	for (idx = 0; idx < 4; idx++) {
 		if (gus->gf1.rom_present & (1 << idx)) {
-			priv = snd_magic_kcalloc(gus_proc_private_t, 0, GFP_KERNEL);
+			priv = kcalloc(1, sizeof(*priv), GFP_KERNEL);
 			if (priv == NULL)
 				return -ENOMEM;
 			priv->rom = 1;
diff -Nru a/sound/isa/gus/gus_mixer.c b/sound/isa/gus/gus_mixer.c
--- a/sound/isa/gus/gus_mixer.c	2004-08-04 17:48:48 -07:00
+++ b/sound/isa/gus/gus_mixer.c	2004-08-04 17:48:48 -07:00
@@ -26,8 +26,6 @@
 #include <sound/control.h>
 #include <sound/gus.h>
 
-#define chip_t snd_gus_card_t
-
 /*
  *
  */
@@ -148,16 +146,12 @@
 	return change;
 }
 
-#define GF1_CONTROLS (sizeof(snd_gf1_controls)/sizeof(snd_kcontrol_new_t))
-
 static snd_kcontrol_new_t snd_gf1_controls[] = {
 GF1_SINGLE("Master Playback Switch", 0, 1, 1),
 GF1_SINGLE("Line Switch", 0, 0, 1),
 GF1_SINGLE("Mic Switch", 0, 2, 0)
 };
 
-#define ICS_CONTROLS (sizeof(snd_ics_controls)/sizeof(snd_kcontrol_new_t))
-
 static snd_kcontrol_new_t snd_ics_controls[] = {
 GF1_SINGLE("Master Playback Switch", 0, 1, 1),
 ICS_DOUBLE("Master Playback Volume", 0, SNDRV_ICS_MASTER_DEV),
@@ -190,13 +184,13 @@
 	}
 
 	if (!gus->ics_flag) {
-		max = gus->ess_flag ? 1 : GF1_CONTROLS;
+		max = gus->ess_flag ? 1 : ARRAY_SIZE(snd_gf1_controls);
 		for (idx = 0; idx < max; idx++) {
 			if ((err = snd_ctl_add(card, snd_ctl_new1(&snd_gf1_controls[idx], gus))) < 0)
 				return err;
 		}
 	} else {
-		for (idx = 0; idx < ICS_CONTROLS; idx++) {
+		for (idx = 0; idx < ARRAY_SIZE(snd_ics_controls); idx++) {
 			if ((err = snd_ctl_add(card, snd_ctl_new1(&snd_ics_controls[idx], gus))) < 0)
 				return err;
 		}
diff -Nru a/sound/isa/gus/gus_pcm.c b/sound/isa/gus/gus_pcm.c
--- a/sound/isa/gus/gus_pcm.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/gus/gus_pcm.c	2004-08-04 17:48:49 -07:00
@@ -34,8 +34,6 @@
 #include <sound/pcm_params.h>
 #include "gus_tables.h"
 
-#define chip_t snd_gus_card_t
-
 /* maximum rate */
 
 #define SNDRV_GF1_PCM_RATE		48000
@@ -66,7 +64,7 @@
 
 static void snd_gf1_pcm_block_change_ack(snd_gus_card_t * gus, void *private_data)
 {
-	gus_pcm_private_t *pcmp = snd_magic_cast(gus_pcm_private_t, private_data, return);
+	gus_pcm_private_t *pcmp = private_data;
 
 	if (pcmp) {
 		atomic_dec(&pcmp->dma_count);
@@ -81,7 +79,7 @@
 {
 	snd_gf1_dma_block_t block;
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	gus_pcm_private_t *pcmp = snd_magic_cast(gus_pcm_private_t, runtime->private_data, return -ENXIO);
+	gus_pcm_private_t *pcmp = runtime->private_data;
 
 	count += offset & 31;
 	offset &= ~31;
@@ -106,7 +104,7 @@
 static void snd_gf1_pcm_trigger_up(snd_pcm_substream_t * substream)
 {
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	gus_pcm_private_t *pcmp = snd_magic_cast(gus_pcm_private_t, runtime->private_data, return);
+	gus_pcm_private_t *pcmp = runtime->private_data;
 	snd_gus_card_t * gus = pcmp->gus;
 	unsigned long flags;
 	unsigned char voice_ctrl, ramp_ctrl;
@@ -194,7 +192,7 @@
 		snd_gf1_smart_stop_voice(gus, pvoice->number);
 		return;
 	}
-	pcmp = snd_magic_cast(gus_pcm_private_t, pvoice->private_data, return);
+	pcmp = pvoice->private_data;
 	if (pcmp == NULL) {
 		snd_printd("snd_gf1_pcm: unknown wave irq?\n");
 		snd_gf1_smart_stop_voice(gus, pvoice->number);
@@ -267,7 +265,7 @@
 {
 	unsigned short vol;
 	int cvoice;
-	gus_pcm_private_t *pcmp = snd_magic_cast(gus_pcm_private_t, pvoice->private_data, return);
+	gus_pcm_private_t *pcmp = pvoice->private_data;
 
 	/* stop ramp, but leave rollover bit untouched */
 	spin_lock(&gus->reg_lock);
@@ -350,7 +348,7 @@
 				     snd_pcm_uframes_t count)
 {
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	gus_pcm_private_t *pcmp = snd_magic_cast(gus_pcm_private_t, runtime->private_data, return -ENXIO);
+	gus_pcm_private_t *pcmp = runtime->private_data;
 	unsigned int bpos, len;
 	
 	bpos = samples_to_bytes(runtime, pos) + (voice * (pcmp->dma_size / 2));
@@ -379,7 +377,7 @@
 					snd_pcm_uframes_t count)
 {
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	gus_pcm_private_t *pcmp = snd_magic_cast(gus_pcm_private_t, runtime->private_data, return -ENXIO);
+	gus_pcm_private_t *pcmp = runtime->private_data;
 	unsigned int bpos, len;
 	
 	bpos = samples_to_bytes(runtime, pos) + (voice * (pcmp->dma_size / 2));
@@ -406,7 +404,7 @@
 {
 	snd_gus_card_t *gus = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	gus_pcm_private_t *pcmp = snd_magic_cast(gus_pcm_private_t, runtime->private_data, return -ENXIO);
+	gus_pcm_private_t *pcmp = runtime->private_data;
 	int err;
 	
 	if ((err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params))) < 0)
@@ -453,7 +451,7 @@
 static int snd_gf1_pcm_playback_hw_free(snd_pcm_substream_t * substream)
 {
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	gus_pcm_private_t *pcmp = snd_magic_cast(gus_pcm_private_t, runtime->private_data, return -ENXIO);
+	gus_pcm_private_t *pcmp = runtime->private_data;
 
 	snd_pcm_lib_free_pages(substream);
 	if (pcmp->pvoices[0]) {
@@ -474,7 +472,7 @@
 static int snd_gf1_pcm_playback_prepare(snd_pcm_substream_t * substream)
 {
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	gus_pcm_private_t *pcmp = snd_magic_cast(gus_pcm_private_t, runtime->private_data, return -ENXIO);
+	gus_pcm_private_t *pcmp = runtime->private_data;
 
 	pcmp->bpos = 0;
 	pcmp->dma_size = snd_pcm_lib_buffer_bytes(substream);
@@ -488,7 +486,7 @@
 {
 	snd_gus_card_t *gus = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	gus_pcm_private_t *pcmp = snd_magic_cast(gus_pcm_private_t, runtime->private_data, return -ENXIO);
+	gus_pcm_private_t *pcmp = runtime->private_data;
 	int voice;
 
 	if (cmd == SNDRV_PCM_TRIGGER_START) {
@@ -513,7 +511,7 @@
 {
 	snd_gus_card_t *gus = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	gus_pcm_private_t *pcmp = snd_magic_cast(gus_pcm_private_t, runtime->private_data, return -ENXIO);
+	gus_pcm_private_t *pcmp = runtime->private_data;
 	unsigned int pos;
 	unsigned char voice_ctrl;
 
@@ -657,8 +655,8 @@
 
 static void snd_gf1_pcm_playback_free(snd_pcm_runtime_t *runtime)
 {
-	gus_pcm_private_t * pcmp = snd_magic_cast(gus_pcm_private_t, runtime->private_data, return);
-	snd_magic_kfree(pcmp);
+	gus_pcm_private_t * pcmp = runtime->private_data;
+	kfree(pcmp);
 }
 
 static int snd_gf1_pcm_playback_open(snd_pcm_substream_t *substream)
@@ -668,7 +666,7 @@
 	snd_pcm_runtime_t *runtime = substream->runtime;
 	int err;
 
-	pcmp = snd_magic_kcalloc(gus_pcm_private_t, 0, GFP_KERNEL);
+	pcmp = kcalloc(1, sizeof(*pcmp), GFP_KERNEL);
 	if (pcmp == NULL)
 		return -ENOMEM;
 	pcmp->gus = gus;
@@ -697,7 +695,7 @@
 {
 	snd_gus_card_t *gus = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	gus_pcm_private_t *pcmp = snd_magic_cast(gus_pcm_private_t, runtime->private_data, return -ENXIO);
+	gus_pcm_private_t *pcmp = runtime->private_data;
 	unsigned long jiffies_old;
 
 	jiffies_old = jiffies;
@@ -738,7 +736,7 @@
 
 static void snd_gf1_pcm_free(snd_pcm_t *pcm)
 {
-	snd_gus_card_t *gus = snd_magic_cast(snd_gus_card_t, pcm->private_data, return);
+	snd_gus_card_t *gus = pcm->private_data;
 	gus->pcm = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
@@ -790,7 +788,7 @@
 		pvoice = &gus->gf1.voices[idx];
 		if (!pvoice->pcm)
 			continue;
-		pcmp = snd_magic_cast(gus_pcm_private_t, pvoice->private_data, return -ENXIO);
+		pcmp = pvoice->private_data;
 		if (!(pcmp->flags & SNDRV_GF1_PCM_PFLG_ACTIVE))
 			continue;
 		/* load real volume - better precision */
diff -Nru a/sound/isa/gus/gus_synth.c b/sound/isa/gus/gus_synth.c
--- a/sound/isa/gus/gus_synth.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/gus/gus_synth.c	2004-08-04 17:48:49 -07:00
@@ -134,7 +134,7 @@
 				       int what)
 {
 	unsigned int idx;
-	snd_gus_card_t *gus = snd_magic_cast(snd_gus_card_t, private_data, return);
+	snd_gus_card_t *gus = private_data;
 	snd_gus_voice_t *pvoice;
 	unsigned long flags;
 	
diff -Nru a/sound/isa/gus/gus_timer.c b/sound/isa/gus/gus_timer.c
--- a/sound/isa/gus/gus_timer.c	2004-08-04 17:48:48 -07:00
+++ b/sound/isa/gus/gus_timer.c	2004-08-04 17:48:48 -07:00
@@ -26,8 +26,6 @@
 #include <sound/core.h>
 #include <sound/gus.h>
 
-#define chip_t snd_gus_card_t
-
 /*
  *  Timer 1 - 80us
  */
@@ -146,13 +144,13 @@
 
 static void snd_gf1_timer1_free(snd_timer_t *timer)
 {
-	snd_gus_card_t *gus = snd_magic_cast(snd_gus_card_t, timer->private_data, return);
+	snd_gus_card_t *gus = timer->private_data;
 	gus->gf1.timer1 = NULL;
 }
 
 static void snd_gf1_timer2_free(snd_timer_t *timer)
 {
-	snd_gus_card_t *gus = snd_magic_cast(snd_gus_card_t, timer->private_data, return);
+	snd_gus_card_t *gus = timer->private_data;
 	gus->gf1.timer2 = NULL;
 }
 
diff -Nru a/sound/isa/gus/gus_uart.c b/sound/isa/gus/gus_uart.c
--- a/sound/isa/gus/gus_uart.c	2004-08-04 17:48:48 -07:00
+++ b/sound/isa/gus/gus_uart.c	2004-08-04 17:48:48 -07:00
@@ -95,7 +95,7 @@
 	unsigned long flags;
 	snd_gus_card_t *gus;
 
-	gus = snd_magic_cast(snd_gus_card_t, substream->rmidi->private_data, return -ENXIO);
+	gus = substream->rmidi->private_data;
 	spin_lock_irqsave(&gus->uart_cmd_lock, flags);
 	if (!(gus->gf1.uart_cmd & 0x80)) {	/* input active? */
 		snd_gf1_uart_reset(gus, 0);
@@ -115,7 +115,7 @@
 	snd_gus_card_t *gus;
 	int i;
 
-	gus = snd_magic_cast(snd_gus_card_t, substream->rmidi->private_data, return -ENXIO);
+	gus = substream->rmidi->private_data;
 	spin_lock_irqsave(&gus->uart_cmd_lock, flags);
 	if (gus->gf1.interrupt_handler_midi_out != snd_gf1_interrupt_midi_out) {
 		snd_gf1_uart_reset(gus, 0);
@@ -141,7 +141,7 @@
 	unsigned long flags;
 	snd_gus_card_t *gus;
 
-	gus = snd_magic_cast(snd_gus_card_t, substream->rmidi->private_data, return -ENXIO);
+	gus = substream->rmidi->private_data;
 	spin_lock_irqsave(&gus->uart_cmd_lock, flags);
 	if (gus->gf1.interrupt_handler_midi_in != snd_gf1_interrupt_midi_in)
 		snd_gf1_uart_reset(gus, 1);
@@ -156,7 +156,7 @@
 	unsigned long flags;
 	snd_gus_card_t *gus;
 
-	gus = snd_magic_cast(snd_gus_card_t, substream->rmidi->private_data, return -ENXIO);
+	gus = substream->rmidi->private_data;
 	spin_lock_irqsave(&gus->uart_cmd_lock, flags);
 	if (gus->gf1.interrupt_handler_midi_out != snd_gf1_interrupt_midi_out)
 		snd_gf1_uart_reset(gus, 1);
@@ -171,7 +171,7 @@
 	snd_gus_card_t *gus;
 	unsigned long flags;
 
-	gus = snd_magic_cast(snd_gus_card_t, substream->rmidi->private_data, return);
+	gus = substream->rmidi->private_data;
 
 	spin_lock_irqsave(&gus->uart_cmd_lock, flags);
 	if (up) {
@@ -191,7 +191,7 @@
 	char byte;
 	int timeout;
 
-	gus = snd_magic_cast(snd_gus_card_t, substream->rmidi->private_data, return);
+	gus = substream->rmidi->private_data;
 
 	spin_lock_irqsave(&gus->uart_cmd_lock, flags);
 	if (up) {
diff -Nru a/sound/isa/gus/gusclassic.c b/sound/isa/gus/gusclassic.c
--- a/sound/isa/gus/gusclassic.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/gus/gusclassic.c	2004-08-04 17:48:49 -07:00
@@ -35,8 +35,7 @@
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("Gravis UltraSound Classic");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{Gravis,UltraSound Classic}}");
+MODULE_SUPPORTED_DEVICE("{{Gravis,UltraSound Classic}}");
 
 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;	/* Index 0-MAX */
 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;	/* ID for this card */
@@ -53,34 +52,24 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for GUS Classic soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for GUS Classic soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable GUS Classic soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(port, long, boot_devs, 0444);
 MODULE_PARM_DESC(port, "Port # for GUS Classic driver.");
-MODULE_PARM_SYNTAX(port, SNDRV_ENABLED ",allows:{{0x220,0x260,0x10}},dialog:list");
 module_param_array(irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(irq, "IRQ # for GUS Classic driver.");
-MODULE_PARM_SYNTAX(irq, SNDRV_ENABLED ",allows:{{3},{5},{9},{11},{12},{15}},dialog:list");
 module_param_array(dma1, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma1, "DMA1 # for GUS Classic driver.");
-MODULE_PARM_SYNTAX(dma1, SNDRV_ENABLED ",allows:{{1},{3},{5},{6},{7}},dialog:list");
 module_param_array(dma2, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma2, "DMA2 # for GUS Classic driver.");
-MODULE_PARM_SYNTAX(dma2, SNDRV_ENABLED ",allows:{{1},{3},{5},{6},{7}},dialog:list");
 module_param_array(joystick_dac, int, boot_devs, 0444);
 MODULE_PARM_DESC(joystick_dac, "Joystick DAC level 0.59V-4.52V or 0.389V-2.98V for GUS Classic driver.");
-MODULE_PARM_SYNTAX(joystick_dac, SNDRV_ENABLED ",allows:{{0,31}}");
 module_param_array(channels, int, boot_devs, 0444);
 MODULE_PARM_DESC(channels, "GF1 channels for GUS Classic driver.");
-MODULE_PARM_SYNTAX(channels,  SNDRV_ENABLED ",allows:{{14,32}}");
 module_param_array(pcm_channels, int, boot_devs, 0444);
 MODULE_PARM_DESC(pcm_channels, "Reserved PCM channels for GUS Classic driver.");
-MODULE_PARM_SYNTAX(pcm_channels, SNDRV_ENABLED ",allows:{{2,16}}");
 
 static snd_card_t *snd_gusclassic_cards[SNDRV_CARDS] = SNDRV_DEFAULT_PTR;
 
diff -Nru a/sound/isa/gus/gusextreme.c b/sound/isa/gus/gusextreme.c
--- a/sound/isa/gus/gusextreme.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/gus/gusextreme.c	2004-08-04 17:48:49 -07:00
@@ -38,8 +38,7 @@
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("Gravis UltraSound Extreme");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{Gravis,UltraSound Extreme}}");
+MODULE_SUPPORTED_DEVICE("{{Gravis,UltraSound Extreme}}");
 
 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;	/* Index 0-MAX */
 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;	/* ID for this card */
@@ -60,46 +59,32 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for GUS Extreme soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for GUS Extreme soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable GUS Extreme soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(port, long, boot_devs, 0444);
 MODULE_PARM_DESC(port, "Port # for GUS Extreme driver.");
-MODULE_PARM_SYNTAX(port, SNDRV_ENABLED ",allows:{{0x220,0x260,0x20}},dialog:list");
 module_param_array(gf1_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(gf1_port, "GF1 port # for GUS Extreme driver (optional).");
-MODULE_PARM_SYNTAX(gf1_port, SNDRV_ENABLED ",allows:{{0x210,0x270,0x10}},dialog:list");
 module_param_array(mpu_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(mpu_port, "MPU-401 port # for GUS Extreme driver.");
-MODULE_PARM_SYNTAX(mpu_port, SNDRV_ENABLED ",allows:{{0x300,0x320,0x10}},dialog:list");
 module_param_array(irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(irq, "IRQ # for GUS Extreme driver.");
-MODULE_PARM_SYNTAX(irq, SNDRV_ENABLED ",allows:{{5},{7},{9},{10}},dialog:list");
 module_param_array(mpu_irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for GUS Extreme driver.");
-MODULE_PARM_SYNTAX(mpu_irq, SNDRV_ENABLED ",allows:{{5},{7},{9},{10}},dialog:list");
 module_param_array(gf1_irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(gf1_irq, "GF1 IRQ # for GUS Extreme driver.");
-MODULE_PARM_SYNTAX(gf1_irq, SNDRV_ENABLED ",allows:{{2},{3},{5},{9},{11},{12},{15}},dialog:list");
 module_param_array(dma8, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma8, "8-bit DMA # for GUS Extreme driver.");
-MODULE_PARM_SYNTAX(dma8, SNDRV_DMA8_DESC);
 module_param_array(dma1, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma1, "GF1 DMA # for GUS Extreme driver.");
-MODULE_PARM_SYNTAX(dma1, SNDRV_DMA_DESC);
 module_param_array(joystick_dac, int, boot_devs, 0444);
 MODULE_PARM_DESC(joystick_dac, "Joystick DAC level 0.59V-4.52V or 0.389V-2.98V for GUS Extreme driver.");
-MODULE_PARM_SYNTAX(joystick_dac, SNDRV_ENABLED ",allows:{{0,31}}");
 module_param_array(channels, int, boot_devs, 0444);
 MODULE_PARM_DESC(channels, "GF1 channels for GUS Extreme driver.");
-MODULE_PARM_SYNTAX(channels, SNDRV_ENABLED ",allows:{{14,32}}");
 module_param_array(pcm_channels, int, boot_devs, 0444);
 MODULE_PARM_DESC(pcm_channels, "Reserved PCM channels for GUS Extreme driver.");
-MODULE_PARM_SYNTAX(pcm_channels, SNDRV_ENABLED ",allows:{{2,16}}");
 
 static snd_card_t *snd_gusextreme_cards[SNDRV_CARDS] = SNDRV_DEFAULT_PTR;
 
diff -Nru a/sound/isa/gus/gusmax.c b/sound/isa/gus/gusmax.c
--- a/sound/isa/gus/gusmax.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/gus/gusmax.c	2004-08-04 17:48:49 -07:00
@@ -36,8 +36,7 @@
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("Gravis UltraSound MAX");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{Gravis,UltraSound MAX}}");
+MODULE_SUPPORTED_DEVICE("{{Gravis,UltraSound MAX}}");
 
 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;	/* Index 0-MAX */
 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;	/* ID for this card */
@@ -54,34 +53,24 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for GUS MAX soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for GUS MAX soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable GUS MAX soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(port, long, boot_devs, 0444);
 MODULE_PARM_DESC(port, "Port # for GUS MAX driver.");
-MODULE_PARM_SYNTAX(port, SNDRV_ENABLED ",allows:{{0x220},{0x230},{0x240},{0x250},{0x260}},dialog:list");
 module_param_array(irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(irq, "IRQ # for GUS MAX driver.");
-MODULE_PARM_SYNTAX(irq, SNDRV_ENABLED ",allows:{{3},{5},{9},{11},{12},{15}},dialog:list");
 module_param_array(dma1, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma1, "DMA1 # for GUS MAX driver.");
-MODULE_PARM_SYNTAX(dma1, SNDRV_DMA_DESC);
 module_param_array(dma2, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma2, "DMA2 # for GUS MAX driver.");
-MODULE_PARM_SYNTAX(dma2, SNDRV_DMA_DESC);
 module_param_array(joystick_dac, int, boot_devs, 0444);
 MODULE_PARM_DESC(joystick_dac, "Joystick DAC level 0.59V-4.52V or 0.389V-2.98V for GUS MAX driver.");
-MODULE_PARM_SYNTAX(joystick_dac, SNDRV_ENABLED ",allows:{{0,31}}");
 module_param_array(channels, int, boot_devs, 0444);
 MODULE_PARM_DESC(channels, "Used GF1 channels for GUS MAX driver.");
-MODULE_PARM_SYNTAX(channels, SNDRV_ENABLED ",allows:{{14,32}}");
 module_param_array(pcm_channels, int, boot_devs, 0444);
 MODULE_PARM_DESC(pcm_channels, "Reserved PCM channels for GUS MAX driver.");
-MODULE_PARM_SYNTAX(pcm_channels, SNDRV_ENABLED ",allows:{{2,16}}");
 
 struct snd_gusmax {
 	int irq;
diff -Nru a/sound/isa/gus/interwave.c b/sound/isa/gus/interwave.c
--- a/sound/isa/gus/interwave.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/gus/interwave.c	2004-08-04 17:48:49 -07:00
@@ -41,18 +41,17 @@
 #include <sound/initval.h>
 
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
-MODULE_CLASSES("{sound}");
 MODULE_LICENSE("GPL");
 #ifndef SNDRV_STB
 MODULE_DESCRIPTION("AMD InterWave");
-MODULE_DEVICES("{{Gravis,UltraSound Plug & Play},"
+MODULE_SUPPORTED_DEVICE("{{Gravis,UltraSound Plug & Play},"
 		"{STB,SoundRage32},"
 		"{MED,MED3210},"
 		"{Dynasonix,Dynasonix Pro},"
 		"{Panasonic,PCA761AW}}");
 #else
 MODULE_DESCRIPTION("AMD InterWave STB with TEA6330T");
-MODULE_DEVICES("{{AMD,InterWave STB with TEA6330T}}");
+MODULE_SUPPORTED_DEVICE("{{AMD,InterWave STB with TEA6330T}}");
 #endif
 
 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;	/* Index 0-MAX */
@@ -77,47 +76,32 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for InterWave soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for InterWave soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable InterWave soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
-#ifdef CONFIG_PNP
 module_param_array(isapnp, bool, boot_devs, 0444);
 MODULE_PARM_DESC(isapnp, "ISA PnP detection for specified soundcard.");
-MODULE_PARM_SYNTAX(isapnp, SNDRV_ISAPNP_DESC);
-#endif
 module_param_array(port, long, boot_devs, 0444);
 MODULE_PARM_DESC(port, "Port # for InterWave driver.");
-MODULE_PARM_SYNTAX(port, SNDRV_ENABLED ",allows:{{0x210,0x260,0x10}},dialog:list");
 #ifdef SNDRV_STB
 module_param_array(port_tc, long, boot_devs, 0444);
 MODULE_PARM_DESC(port_tc, "Tone control (TEA6330T - i2c bus) port # for InterWave driver.");
-MODULE_PARM_SYNTAX(port_tc, SNDRV_ENABLED ",allows:{{0x350,0x380,0x10}},dialog:list");
 #endif
 module_param_array(irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(irq, "IRQ # for InterWave driver.");
-MODULE_PARM_SYNTAX(irq, SNDRV_ENABLED ",allows:{{3},{5},{9},{11},{12},{15}},dialog:list");
 module_param_array(dma1, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma1, "DMA1 # for InterWave driver.");
-MODULE_PARM_SYNTAX(dma1, SNDRV_DMA_DESC);
 module_param_array(dma2, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma2, "DMA2 # for InterWave driver.");
-MODULE_PARM_SYNTAX(dma2, SNDRV_DMA_DESC);
 module_param_array(joystick_dac, int, boot_devs, 0444);
 MODULE_PARM_DESC(joystick_dac, "Joystick DAC level 0.59V-4.52V or 0.389V-2.98V for InterWave driver.");
-MODULE_PARM_SYNTAX(joystick_dac, SNDRV_ENABLED ",allows:{{0,31}}");
 module_param_array(midi, int, boot_devs, 0444);
 MODULE_PARM_DESC(midi, "MIDI UART enable for InterWave driver.");
-MODULE_PARM_SYNTAX(midi, SNDRV_ENABLED "," SNDRV_ENABLE_DESC);
 module_param_array(pcm_channels, int, boot_devs, 0444);
 MODULE_PARM_DESC(pcm_channels, "Reserved PCM channels for InterWave driver.");
-MODULE_PARM_SYNTAX(pcm_channels, SNDRV_ENABLED ",allows:{{2,16}}");
 module_param_array(effect, int, boot_devs, 0444);
 MODULE_PARM_DESC(effect, "Effects enable for InterWave driver.");
-MODULE_PARM_SYNTAX(effect, SNDRV_ENABLED "," SNDRV_ENABLE_DESC);
 
 struct snd_interwave {
 	int irq;
@@ -411,8 +395,8 @@
 	int bank_pos, pages;
 	unsigned int i, lmct;
 	int psizes[4];
+	unsigned char iwave[8];
 	unsigned char csum;
-	struct rom_hdr romh;
 
 	snd_interwave_reset(gus);
 	snd_gf1_write8(gus, SNDRV_GF1_GB_GLOBAL_MODE, snd_gf1_read8(gus, SNDRV_GF1_GB_GLOBAL_MODE) | 0x01);		/* enhanced mode */
@@ -434,7 +418,7 @@
 #if 0
 		printk("lmct = 0x%08x\n", lmct);
 #endif
-		for (i = 0; i < sizeof(lmc) / sizeof(unsigned int); i++)
+		for (i = 0; i < ARRAY_SIZE(lmc); i++)
 			if (lmct == lmc[i]) {
 #if 0
 				printk("found !!! %i\n", i);
@@ -443,7 +427,7 @@
 				snd_interwave_bank_sizes(gus, psizes);
 				break;
 			}
-		if (i >= sizeof(lmc) / sizeof(unsigned int) && !gus->gf1.enh_mode)
+		if (i >= ARRAY_SIZE(lmc) && !gus->gf1.enh_mode)
 			 snd_gf1_write16(gus, SNDRV_GF1_GW_MEMORY_CONFIG, (snd_gf1_look16(gus, SNDRV_GF1_GW_MEMORY_CONFIG) & 0xfff0) | 2);
 		for (i = 0; i < 4; i++) {
 			gus->gf1.mem_alloc.banks_8[i].address =
@@ -461,33 +445,29 @@
 	gus->gf1.rom_banks = 0;
 	gus->gf1.rom_memory = 0;
 	for (bank_pos = 0; bank_pos < 16L * 1024L * 1024L; bank_pos += 4L * 1024L * 1024L) {
-		for (i = 0; i < sizeof(struct rom_hdr); i++)
-			*(((unsigned char *) &romh) + i) = snd_gf1_peek(gus, i + bank_pos);
+		for (i = 0; i < 8; ++i)
+			iwave[i] = snd_gf1_peek(gus, bank_pos + i);
 #ifdef CONFIG_SND_DEBUG_ROM
 		printk("ROM at 0x%06x = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n", bank_pos,
-		       romh.iwave[0], romh.iwave[1], romh.iwave[2], romh.iwave[3],
-		       romh.iwave[4], romh.iwave[5], romh.iwave[6], romh.iwave[7]);
+		       iwave[0], iwave[1], iwave[2], iwave[3],
+		       iwave[4], iwave[5], iwave[6], iwave[7]);
 #endif
-		if (strncmp(romh.iwave, "INTRWAVE", 8))
+		if (strncmp(iwave, "INTRWAVE", 8))
 			continue;	/* first check */
 		csum = 0;
-		for (i = 0; i < sizeof(struct rom_hdr) - 1; i++)
-			csum += *(((unsigned char *) &romh) + i);
+		for (i = 0; i < sizeof(struct rom_hdr); i++)
+			csum += snd_gf1_peek(gus, bank_pos + i);
 #ifdef CONFIG_SND_DEBUG_ROM
-		printk("ROM checksum = 0x%x == 0x%x (computed)\n", romh.csum, (unsigned char) (256 - csum));
+		printk("ROM checksum = 0x%x (computed)\n", csum);
 #endif
-		if (256 - csum != romh.csum)
+		if (csum != 0)
 			continue;	/* not valid rom */
 		gus->gf1.rom_banks++;
 		gus->gf1.rom_present |= 1 << (bank_pos >> 22);
-#ifdef SNDRV_LITTLE_ENDIAN
-		gus->gf1.rom_memory = romh.rom_size;
-#else
-		gus->gf1.rom_memory = ((romh.rom_size >> 24) & 0x000000ff) |
-				      ((romh.rom_size >>  8) & 0x0000ff00) |
-				      ((romh.rom_size <<  8) & 0x00ff0000) |
-				      ((romh.rom_size << 24) & 0xff000000);
-#endif
+		gus->gf1.rom_memory = snd_gf1_peek(gus, bank_pos + 40) |
+				     (snd_gf1_peek(gus, bank_pos + 41) << 8) |
+				     (snd_gf1_peek(gus, bank_pos + 42) << 16) |
+				     (snd_gf1_peek(gus, bank_pos + 43) << 24);
 	}
 #if 0
 	if (gus->gf1.rom_memory > 0) {
@@ -523,8 +503,6 @@
 
 }
 
-#define INTERWAVE_CONTROLS (sizeof(snd_interwave_controls)/sizeof(snd_kcontrol_new_t))
-
 static snd_kcontrol_new_t snd_interwave_controls[] = {
 CS4231_DOUBLE("Master Playback Switch", 0, CS4231_LINE_LEFT_OUTPUT, CS4231_LINE_RIGHT_OUTPUT, 7, 7, 1, 1),
 CS4231_DOUBLE("Master Playback Volume", 0, CS4231_LINE_LEFT_OUTPUT, CS4231_LINE_RIGHT_OUTPUT, 0, 0, 31, 1),
@@ -552,7 +530,7 @@
 		return err;
 #endif
 	/* add new master and mic controls */
-	for (idx = 0; idx < INTERWAVE_CONTROLS; idx++)
+	for (idx = 0; idx < ARRAY_SIZE(snd_interwave_controls); idx++)
 		if ((err = snd_ctl_add(card, snd_ctl_new1(&snd_interwave_controls[idx], chip))) < 0)
 			return err;
 	snd_cs4231_out(chip, CS4231_LINE_LEFT_OUTPUT, 0x9f);
diff -Nru a/sound/isa/opl3sa2.c b/sound/isa/opl3sa2.c
--- a/sound/isa/opl3sa2.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/opl3sa2.c	2004-08-04 17:48:49 -07:00
@@ -37,8 +37,7 @@
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("Yamaha OPL3SA2+");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{Yamaha,YMF719E-S},"
+MODULE_SUPPORTED_DEVICE("{{Yamaha,YMF719E-S},"
 		"{Genius,Sound Maker 3DX},"
 		"{Yamaha,OPL3SA3},"
 		"{Intel,AL440LX sound},"
@@ -63,45 +62,32 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for OPL3-SA soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for OPL3-SA soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable OPL3-SA soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 #ifdef CONFIG_PNP
 module_param_array(isapnp, bool, boot_devs, 0444);
 MODULE_PARM_DESC(isapnp, "PnP detection for specified soundcard.");
-MODULE_PARM_SYNTAX(isapnp, SNDRV_ISAPNP_DESC);
 #endif
 module_param_array(port, long, boot_devs, 0444);
 MODULE_PARM_DESC(port, "Port # for OPL3-SA driver.");
-MODULE_PARM_SYNTAX(port, SNDRV_ENABLED ",allows:{{0xf86},{0x370},{0x100}},dialog:list");
 module_param_array(sb_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(sb_port, "SB port # for OPL3-SA driver.");
-MODULE_PARM_SYNTAX(sb_port, SNDRV_ENABLED ",allows:{{0x220},{0x240},{0x260}},dialog:list");
 module_param_array(wss_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(wss_port, "WSS port # for OPL3-SA driver.");
-MODULE_PARM_SYNTAX(wss_port, SNDRV_ENABLED ",allows:{{0x530},{0xe80},{0xf40},{0x604}},dialog:list");
 module_param_array(fm_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(fm_port, "FM port # for OPL3-SA driver.");
-MODULE_PARM_SYNTAX(fm_port, SNDRV_ENABLED ",allows:{{0x388}},dialog:list");
 module_param_array(midi_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(midi_port, "MIDI port # for OPL3-SA driver.");
-MODULE_PARM_SYNTAX(midi_port, SNDRV_ENABLED ",allows:{{0x330},{0x300}},dialog:list");
 module_param_array(irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(irq, "IRQ # for OPL3-SA driver.");
-MODULE_PARM_SYNTAX(irq, SNDRV_ENABLED ",allows:{{0},{1},{3},{5},{9},{11},{12},{15}},dialog:list");
 module_param_array(dma1, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma1, "DMA1 # for OPL3-SA driver.");
-MODULE_PARM_SYNTAX(dma1, SNDRV_ENABLED ",allows:{{1},{3},{5},{6},{7}},dialog:list");
 module_param_array(dma2, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma2, "DMA2 # for OPL3-SA driver.");
-MODULE_PARM_SYNTAX(dma2, SNDRV_ENABLED ",allows:{{1},{3},{5},{6},{7}},dialog:list");
 module_param_array(opl3sa3_ymode, int, boot_devs, 0444);
 MODULE_PARM_DESC(opl3sa3_ymode, "Speaker size selection for 3D Enhancement mode: Desktop/Large Notebook/Small Notebook/HiFi.");
-MODULE_PARM_SYNTAX(opl3sa3_ymode, SNDRV_ENABLED ",allows:{{0,3}},dialog:list");  /* SL Added */
 
 /* control ports */
 #define OPL3SA2_PM_CTRL		0x01
@@ -131,7 +117,6 @@
 #define OPL3SA2_PM_D3	(OPL3SA2_PM_ADOWN|OPL3SA2_PM_PSV|OPL3SA2_PM_PDN|OPL3SA2_PM_PDX)
 
 typedef struct snd_opl3sa2 opl3sa2_t;
-#define chip_t opl3sa2_t
 
 struct snd_opl3sa2 {
 	snd_card_t *card;
@@ -304,7 +289,7 @@
 static irqreturn_t snd_opl3sa2_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
 	unsigned short status;
-	opl3sa2_t *chip = snd_magic_cast(opl3sa2_t, dev_id, return IRQ_NONE);
+	opl3sa2_t *chip = dev_id;
 	int handled = 0;
 
 	if (chip == NULL || chip->card == NULL)
@@ -477,8 +462,6 @@
 	return change;
 }
 
-#define OPL3SA2_CONTROLS (sizeof(snd_opl3sa2_controls)/sizeof(snd_kcontrol_new_t))
-
 static snd_kcontrol_new_t snd_opl3sa2_controls[] = {
 OPL3SA2_DOUBLE("Master Playback Switch", 0, 0x07, 0x08, 7, 7, 1, 1),
 OPL3SA2_DOUBLE("Master Playback Volume", 0, 0x07, 0x08, 0, 0, 15, 1),
@@ -486,8 +469,6 @@
 OPL3SA2_SINGLE("Mic Playback Volume", 0, 0x09, 0, 31, 1)
 };
 
-#define OPL3SA2_TONE_CONTROLS (sizeof(snd_opl3sa2_tone_controls)/sizeof(snd_kcontrol_new_t))
-
 static snd_kcontrol_new_t snd_opl3sa2_tone_controls[] = {
 OPL3SA2_DOUBLE("3D Control - Wide", 0, 0x14, 0x14, 4, 0, 7, 0),
 OPL3SA2_DOUBLE("Tone Control - Bass", 0, 0x15, 0x15, 4, 0, 7, 0),
@@ -496,7 +477,7 @@
 
 static void snd_opl3sa2_master_free(snd_kcontrol_t *kcontrol)
 {
-	opl3sa2_t *chip = snd_magic_cast(opl3sa2_t, _snd_kcontrol_chip(kcontrol), return);
+	opl3sa2_t *chip = snd_kcontrol_chip(kcontrol);
 	chip->master_switch = NULL;
 	chip->master_volume = NULL;
 }
@@ -531,7 +512,7 @@
         if ((err = snd_ctl_rename_id(card, &id1, &id2)) < 0)
                 return err;
 	/* add OPL3SA2 controls */
-	for (idx = 0; idx < OPL3SA2_CONTROLS; idx++) {
+	for (idx = 0; idx < ARRAY_SIZE(snd_opl3sa2_controls); idx++) {
 		if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_opl3sa2_controls[idx], chip))) < 0)
 			return err;
 		switch (idx) {
@@ -540,7 +521,7 @@
 		}
 	}
 	if (chip->version > 2) {
-		for (idx = 0; idx < OPL3SA2_TONE_CONTROLS; idx++)
+		for (idx = 0; idx < ARRAY_SIZE(snd_opl3sa2_tone_controls); idx++)
 			if ((err = snd_ctl_add(card, snd_ctl_new1(&snd_opl3sa2_tone_controls[idx], chip))) < 0)
 				return err;
 	}
@@ -551,7 +532,7 @@
 #ifdef CONFIG_PM
 static int snd_opl3sa2_suspend(snd_card_t *card, unsigned int state)
 {
-	opl3sa2_t *chip = snd_magic_cast(opl3sa2_t, card->pm_private_data, return -EINVAL);
+	opl3sa2_t *chip = card->pm_private_data;
 
 	snd_pcm_suspend_all(chip->cs4231->pcm); /* stop before saving regs */
 	chip->cs4231_suspend(chip->cs4231);
@@ -565,7 +546,7 @@
 
 static int snd_opl3sa2_resume(snd_card_t *card, unsigned int state)
 {
-	opl3sa2_t *chip = snd_magic_cast(opl3sa2_t, card->pm_private_data, return -EINVAL);
+	opl3sa2_t *chip = card->pm_private_data;
 	int i;
 
 	/* power up */
@@ -656,13 +637,13 @@
 		release_resource(chip->res_port);
 		kfree_nocheck(chip->res_port);
 	}
-	snd_magic_kfree(chip);
+	kfree(chip);
 	return 0;
 }
 
 static int snd_opl3sa2_dev_free(snd_device_t *device)
 {
-	opl3sa2_t *chip = snd_magic_cast(opl3sa2_t, device->device_data, return -ENXIO);
+	opl3sa2_t *chip = device->device_data;
 	return snd_opl3sa2_free(chip);
 }
 
@@ -707,7 +688,7 @@
 		return -ENOMEM;
 	strcpy(card->driver, "OPL3SA2");
 	strcpy(card->shortname, "Yamaha OPL3-SA2");
-	chip = snd_magic_kcalloc(opl3sa2_t, 0, GFP_KERNEL);
+	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
 	if (chip == NULL) {
 		err = -ENOMEM;
 		goto __error;
diff -Nru a/sound/isa/opti9xx/opti92x-ad1848.c b/sound/isa/opti9xx/opti92x-ad1848.c
--- a/sound/isa/opti9xx/opti92x-ad1848.c	2004-08-04 17:48:48 -07:00
+++ b/sound/isa/opti9xx/opti92x-ad1848.c	2004-08-04 17:48:48 -07:00
@@ -52,19 +52,18 @@
 #include <sound/initval.h>
 
 MODULE_AUTHOR("Massimo Piccioni <dafastidio@libero.it>");
-MODULE_CLASSES("{sound}");
 MODULE_LICENSE("GPL");
 #ifdef OPTi93X
 MODULE_DESCRIPTION("OPTi93X");
-MODULE_DEVICES("{{OPTi,82C931/3}}");
+MODULE_SUPPORTED_DEVICE("{{OPTi,82C931/3}}");
 #else	/* OPTi93X */
 #ifdef CS4231
 MODULE_DESCRIPTION("OPTi92X - CS4231");
-MODULE_DEVICES("{{OPTi,82C924 (CS4231)},"
+MODULE_SUPPORTED_DEVICE("{{OPTi,82C924 (CS4231)},"
 		"{OPTi,82C925 (CS4231)}}");
 #else	/* CS4231 */
 MODULE_DESCRIPTION("OPTi92X - AD1848");
-MODULE_DEVICES("{{OPTi,82C924 (AD1848)},"
+MODULE_SUPPORTED_DEVICE("{{OPTi,82C924 (AD1848)},"
 		"{OPTi,82C925 (AD1848)},"
 	        "{OAK,Mozart}}");
 #endif	/* CS4231 */
@@ -86,38 +85,27 @@
 
 module_param(index, int, 0444);
 MODULE_PARM_DESC(index, "Index value for opti9xx based soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param(id, charp, 0444);
 MODULE_PARM_DESC(id, "ID string for opti9xx based soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 //module_param(enable, bool, 0444);
 //MODULE_PARM_DESC(enable, "Enable opti9xx soundcard.");
-//MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param(isapnp, bool, 0444);
 MODULE_PARM_DESC(isapnp, "Enable ISA PnP detection for specified soundcard.");
-MODULE_PARM_SYNTAX(isapnp, SNDRV_ISAPNP_DESC);
 module_param(port, long, 0444);
 MODULE_PARM_DESC(port, "WSS port # for opti9xx driver.");
-MODULE_PARM_SYNTAX(port, SNDRV_PORT_DESC);
 module_param(mpu_port, long, 0444);
 MODULE_PARM_DESC(mpu_port, "MPU-401 port # for opti9xx driver.");
-MODULE_PARM_SYNTAX(mpu_port, SNDRV_PORT_DESC);
 module_param(fm_port, long, 0444);
 MODULE_PARM_DESC(fm_port, "FM port # for opti9xx driver.");
-MODULE_PARM_SYNTAX(fm_port, SNDRV_PORT_DESC);
 module_param(irq, int, 0444);
 MODULE_PARM_DESC(irq, "WSS irq # for opti9xx driver.");
-MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC);
 module_param(mpu_irq, int, 0444);
 MODULE_PARM_DESC(mpu_irq, "MPU-401 irq # for opti9xx driver.");
-MODULE_PARM_SYNTAX(mpu_irq, SNDRV_IRQ_DESC);
 module_param(dma1, int, 0444);
 MODULE_PARM_DESC(dma1, "1st dma # for opti9xx driver.");
-MODULE_PARM_SYNTAX(dma1, SNDRV_DMA_DESC);
 #if defined(CS4231) || defined(OPTi93X)
 module_param(dma2, int, 0444);
 MODULE_PARM_DESC(dma2, "2nd dma # for opti9xx driver.");
-MODULE_PARM_SYNTAX(dma2, SNDRV_DMA_DESC);
 #endif	/* CS4231 || OPTi93X */
 
 #define OPTi9XX_HW_DETECT	0
@@ -474,7 +462,6 @@
 	unsigned char dma_bits;
 	unsigned char mpu_port_bits = 0;
 	unsigned char mpu_irq_bits;
-	unsigned long flags;
 
 	switch (chip->hardware) {
 #ifndef OPTi93X
@@ -601,13 +588,11 @@
 	dma_bits |= 0x04;
 #endif	/* CS4231 || OPTi93X */
 
-	spin_lock_irqsave(&chip->lock, flags);
 #ifndef OPTi93X
 	 outb(irq_bits << 3 | dma_bits, chip->wss_base);
 #else /* OPTi93X */
 	snd_opti9xx_write(chip, OPTi9XX_MC_REG(3), (irq_bits << 3 | dma_bits));
 #endif /* OPTi93X */
-	spin_unlock_irqrestore(&chip->lock, flags);
 
 __skip_resources:
 	if (chip->hardware > OPTi9XX_HW_82C928) {
@@ -664,8 +649,6 @@
 
 #ifdef OPTi93X
 
-#define chip_t opti93x_t
-
 static unsigned char snd_opti93x_default_image[32] =
 {
 	0x00,		/* 00/00 - l_mixout_outctrl */
@@ -767,15 +750,10 @@
 
 static void snd_opti93x_mute(opti93x_t *chip, int mute)
 {
-	unsigned long flags;
-
-	spin_lock_irqsave(&chip->lock, flags);
-
 	mute = mute ? 1 : 0;
-	if (chip->mute == mute) {
-		spin_unlock_irqrestore(&chip->lock, flags);
+	if (chip->mute == mute)
 		return;
-	}
+
 	chip->mute = mute;
 
 	snd_opti93x_mute_reg(chip, OPTi93X_CD_LEFT_INPUT, mute);
@@ -800,8 +778,6 @@
 	snd_opti93x_mute_reg(chip, OPTi93X_MIC_RIGHT_INPUT, mute);
 	snd_opti93x_mute_reg(chip, OPTi93X_OUT_LEFT, mute);
 	snd_opti93x_mute_reg(chip, OPTi93X_OUT_RIGHT, mute);
-
-	spin_unlock_irqrestore(&chip->lock, flags);
 }
 
 
@@ -822,7 +798,7 @@
 static unsigned int rates[] = {  5512,  6615,  8000,  9600, 11025, 16000, 
 				18900, 22050, 27428, 32000, 33075, 37800,
 				44100, 48000 };
-#define RATES sizeof(rates) / sizeof(rates[0])
+#define RATES ARRAY_SIZE(rates)
 
 static snd_pcm_hw_constraint_list_t hw_constraints_rates = {
 	.count = RATES,
@@ -873,10 +849,8 @@
 
 static void snd_opti93x_playback_format(opti93x_t *chip, unsigned char fmt)
 {
-	unsigned long flags;
 	unsigned char mask;
 
-	spin_lock_irqsave(&chip->lock, flags);
 	snd_opti93x_mute(chip, 1);
 
 	snd_opti93x_mce_up(chip);
@@ -885,14 +859,10 @@
 	snd_opti93x_mce_down(chip);
 
 	snd_opti93x_mute(chip, 0);
-	spin_unlock_irqrestore(&chip->lock, flags);
 }
 
 static void snd_opti93x_capture_format(opti93x_t *chip, unsigned char fmt)
 {
-	unsigned long flags;
-
-	spin_lock_irqsave(&chip->lock, flags);
 	snd_opti93x_mute(chip, 1);
 
 	snd_opti93x_mce_up(chip);
@@ -904,7 +874,6 @@
 	snd_opti93x_mce_down(chip);
 
 	snd_opti93x_mute(chip, 0);
-	spin_unlock_irqrestore(&chip->lock, flags);
 }
 
 
@@ -1128,7 +1097,7 @@
 
 irqreturn_t snd_opti93x_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	opti93x_t *codec = snd_magic_cast(opti93x_t, dev_id, return IRQ_NONE);
+	opti93x_t *codec = dev_id;
 	unsigned char status;
 
 	status = snd_opti9xx_read(codec->chip, OPTi9XX_MC_REG(11));
@@ -1274,13 +1243,13 @@
 	if (chip->irq >= 0) {
 	  free_irq(chip->irq, chip);
 	}
-	snd_magic_kfree(chip);
+	kfree(chip);
 	return 0;
 }
 
 static int snd_opti93x_dev_free(snd_device_t *device)
 {
-	opti93x_t *chip = snd_magic_cast(opti93x_t, device->device_data, return -ENXIO);
+	opti93x_t *chip = device->device_data;
 	return snd_opti93x_free(chip);
 }
 
@@ -1305,7 +1274,7 @@
 	opti93x_t *codec;
 
 	*rcodec = NULL;
-	codec = snd_magic_kcalloc(opti93x_t, 0, GFP_KERNEL);
+	codec = kcalloc(1, sizeof(*codec), GFP_KERNEL);
 	if (codec == NULL)
 		return -ENOMEM;
 	codec->irq = -1;
@@ -1385,7 +1354,7 @@
 
 static void snd_opti93x_pcm_free(snd_pcm_t *pcm)
 {
-	opti93x_t *codec = snd_magic_cast(opti93x_t, pcm->private_data, return);
+	opti93x_t *codec = pcm->private_data;
 	codec->pcm = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
@@ -1608,8 +1577,6 @@
 	return change;
 }
 
-#define OPTi93X_CONTROLS (sizeof(snd_opti93x_controls)/sizeof(snd_kcontrol_new_t))
-
 static snd_kcontrol_new_t snd_opti93x_controls[] = {
 OPTi93X_DOUBLE("Master Playback Switch", 0, OPTi93X_OUT_LEFT, OPTi93X_OUT_RIGHT, 7, 7, 1, 1),
 OPTi93X_DOUBLE("Master Playback Volume", 0, OPTi93X_OUT_LEFT, OPTi93X_OUT_RIGHT, 1, 1, 31, 1), 
@@ -1649,7 +1616,7 @@
 
 	strcpy(card->mixername, snd_opti93x_chip_id(chip));
 
-	for (idx = 0; idx < OPTi93X_CONTROLS; idx++) {
+	for (idx = 0; idx < ARRAY_SIZE(snd_opti93x_controls); idx++) {
 		knew = snd_opti93x_controls[idx];
 		if (chip->hardware == OPTi9XX_HW_82C930) {
 			if (strstr(knew.name, "FM"))	/* skip FM controls */
diff -Nru a/sound/isa/sb/emu8000.c b/sound/isa/sb/emu8000.c
--- a/sound/isa/sb/emu8000.c	2004-08-04 17:48:48 -07:00
+++ b/sound/isa/sb/emu8000.c	2004-08-04 17:48:48 -07:00
@@ -345,8 +345,6 @@
 		EMU8000_INIT4_WRITE(emu, i, *p);
 }
 
-#define NELEM(arr) (sizeof(arr)/sizeof((arr)[0]))
-
 
 /*
  * Send initialization arrays to start up, this just follows the
@@ -355,18 +353,18 @@
 static void __init
 init_arrays(emu8000_t *emu)
 {
-	send_array(emu, init1, NELEM(init1)/4);
+	send_array(emu, init1, ARRAY_SIZE(init1)/4);
 
 	set_current_state(TASK_INTERRUPTIBLE);
 	schedule_timeout((HZ * (44099 + 1024)) / 44100); /* wait for 1024 clocks */
-	send_array(emu, init2, NELEM(init2)/4);
-	send_array(emu, init3, NELEM(init3)/4);
+	send_array(emu, init2, ARRAY_SIZE(init2)/4);
+	send_array(emu, init3, ARRAY_SIZE(init3)/4);
 
 	EMU8000_HWCF4_WRITE(emu, 0);
 	EMU8000_HWCF5_WRITE(emu, 0x83);
 	EMU8000_HWCF6_WRITE(emu, 0x8000);
 
-	send_array(emu, init4, NELEM(init4)/4);
+	send_array(emu, init4, ARRAY_SIZE(init4)/4);
 }
 
 
@@ -821,8 +819,6 @@
  * mixer interface
  *----------------------------------------------------------------*/
 
-#define chip_t	emu8000_t
-
 /*
  * bass/treble
  */
@@ -1070,7 +1066,7 @@
 		release_resource(hw->res_port3);
 		kfree_nocheck(hw->res_port3);
 	}
-	snd_magic_kfree(hw);
+	kfree(hw);
 	return 0;
 }
 
@@ -1078,7 +1074,7 @@
  */
 static int snd_emu8000_dev_free(snd_device_t *device)
 {
-	emu8000_t *hw = snd_magic_cast(emu8000_t, device->device_data, return -ENXIO);
+	emu8000_t *hw = device->device_data;
 	return snd_emu8000_free(hw);
 }
 
@@ -1101,7 +1097,7 @@
 	if (seq_ports <= 0)
 		return 0;
 
-	hw = snd_magic_kcalloc(emu8000_t, 0, GFP_KERNEL);
+	hw = kcalloc(1, sizeof(*hw), GFP_KERNEL);
 	if (hw == NULL)
 		return -ENOMEM;
 	spin_lock_init(&hw->reg_lock);
diff -Nru a/sound/isa/sb/emu8000_callback.c b/sound/isa/sb/emu8000_callback.c
--- a/sound/isa/sb/emu8000_callback.c	2004-08-04 17:48:48 -07:00
+++ b/sound/isa/sb/emu8000_callback.c	2004-08-04 17:48:48 -07:00
@@ -94,7 +94,7 @@
 	int dcysusv;
 	emu8000_t *hw;
 
-	hw = snd_magic_cast(emu8000_t, vp->hw, return);
+	hw = vp->hw;
 	dcysusv = 0x8000 | (unsigned char)vp->reg.parm.modrelease;
 	EMU8000_DCYSUS_WRITE(hw, vp->ch, dcysusv);
 	dcysusv = 0x8000 | (unsigned char)vp->reg.parm.volrelease;
@@ -109,7 +109,7 @@
 {
 	emu8000_t *hw; 
 
-	hw = snd_magic_cast(emu8000_t, vp->hw, return);
+	hw = vp->hw;
 	EMU8000_DCYSUSV_WRITE(hw, vp->ch, 0x807F);
 }
 
@@ -121,7 +121,7 @@
 {
 	emu8000_t *hw;
 
-	hw = snd_magic_cast(emu8000_t, vp->hw, return);
+	hw = vp->hw;
 	if (update & SNDRV_EMUX_UPDATE_VOLUME)
 		set_volume(hw, vp);
 	if (update & SNDRV_EMUX_UPDATE_PITCH)
@@ -168,7 +168,7 @@
 	} best[END];
 	struct best *bp;
 
-	hw = snd_magic_cast(emu8000_t, emu->hw, return NULL);
+	hw = emu->hw;
 
 	for (i = 0; i < END; i++) {
 		best[i].time = (unsigned int)(-1); /* XXX MAX_?INT really */;
@@ -235,7 +235,7 @@
 	snd_midi_channel_t *chan;
 	emu8000_t *hw;
 
-	hw = snd_magic_cast(emu8000_t, vp->hw, return -EINVAL);
+	hw = vp->hw;
 	ch = vp->ch;
 	chan = vp->chan;
 
@@ -313,7 +313,7 @@
 	unsigned int temp;
 	emu8000_t *hw;
 
-	hw = snd_magic_cast(emu8000_t, vp->hw, return);
+	hw = vp->hw;
 
 	/* set reverb and pitch target */
 	temp = vp->reg.parm.reverb;
@@ -333,7 +333,7 @@
 {
 	emu8000_t *hw;
 
-	hw = snd_magic_cast(emu8000_t, emu->hw, return);
+	hw = emu->hw;
 	EMU8000_DCYSUSV_WRITE(hw, ch, 0x807F);
 	snd_emu8000_tweak_voice(hw, ch);
 }
@@ -457,7 +457,7 @@
 {
 	emu8000_t *hw;
 
-	hw = snd_magic_cast(emu8000_t, emu->hw, return);
+	hw = emu->hw;
 
 	switch (parsed) {
 	case SNDRV_MIDI_SYSEX_GS_CHORUS_MODE:
@@ -482,7 +482,7 @@
 {
 	emu8000_t *hw;
 
-	hw = snd_magic_cast(emu8000_t, emu->hw, return -EINVAL);
+	hw = emu->hw;
 
 	switch (cmd) {
 	case _EMUX_OSS_REVERB_MODE:
@@ -526,7 +526,7 @@
 load_fx(snd_emux_t *emu, int type, int mode, const void __user *buf, long len)
 {
 	emu8000_t *hw;
-	hw = snd_magic_cast(emu8000_t, emu->hw, return -EINVAL);
+	hw = emu->hw;
 
 	switch (type) {
 	case SNDRV_EMU8000_LOAD_CHORUS_FX:
diff -Nru a/sound/isa/sb/emu8000_local.h b/sound/isa/sb/emu8000_local.h
--- a/sound/isa/sb/emu8000_local.h	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/sb/emu8000_local.h	2004-08-04 17:48:49 -07:00
@@ -29,8 +29,6 @@
 #include <sound/emu8000.h>
 #include <sound/emu8000_reg.h>
 
-#define NELEM(arr) (sizeof(arr)/sizeof((arr)[0]))
-
 /* emu8000_patch.c */
 int snd_emu8000_sample_new(snd_emux_t *rec, snd_sf_sample_t *sp, snd_util_memhdr_t *hdr, const void __user *data, long count);
 int snd_emu8000_sample_free(snd_emux_t *rec, snd_sf_sample_t *sp, snd_util_memhdr_t *hdr);
diff -Nru a/sound/isa/sb/emu8000_patch.c b/sound/isa/sb/emu8000_patch.c
--- a/sound/isa/sb/emu8000_patch.c	2004-08-04 17:48:48 -07:00
+++ b/sound/isa/sb/emu8000_patch.c	2004-08-04 17:48:48 -07:00
@@ -155,7 +155,7 @@
 	int  dram_offset, dram_start;
 	emu8000_t *emu;
 
-	emu = snd_magic_cast(emu8000_t, rec->hw, return -EINVAL);
+	emu = rec->hw;
 	snd_assert(sp != NULL, return -EINVAL);
 
 	if (sp->v.size == 0)
diff -Nru a/sound/isa/sb/emu8000_pcm.c b/sound/isa/sb/emu8000_pcm.c
--- a/sound/isa/sb/emu8000_pcm.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/sb/emu8000_pcm.c	2004-08-04 17:48:49 -07:00
@@ -23,8 +23,6 @@
 #include <sound/initval.h>
 #include <sound/pcm.h>
 
-#define chip_t emu8000_t
-
 /*
  * define the following if you want to use this pcm with non-interleaved mode
  */
@@ -235,7 +233,7 @@
 	emu8k_pcm_t *rec;
 	snd_pcm_runtime_t *runtime = subs->runtime;
 
-	rec = snd_kcalloc(sizeof(*rec), GFP_KERNEL);
+	rec = kcalloc(1, sizeof(*rec), GFP_KERNEL);
 	if (! rec)
 		return -ENOMEM;
 
diff -Nru a/sound/isa/sb/emu8000_synth.c b/sound/isa/sb/emu8000_synth.c
--- a/sound/isa/sb/emu8000_synth.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/sb/emu8000_synth.c	2004-08-04 17:48:49 -07:00
@@ -27,7 +27,6 @@
 MODULE_AUTHOR("Takashi Iwai, Steve Ratcliffe");
 MODULE_DESCRIPTION("Emu8000 synth plug-in routine");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
 
 /*----------------------------------------------------------------*/
 
diff -Nru a/sound/isa/sb/es968.c b/sound/isa/sb/es968.c
--- a/sound/isa/sb/es968.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/sb/es968.c	2004-08-04 17:48:49 -07:00
@@ -29,15 +29,12 @@
 #include <sound/initval.h>
 #include <sound/sb.h>
 
-#define chip_t sb_t
-
 #define PFX "es968: "
 
 MODULE_AUTHOR("Massimo Piccioni <dafastidio@libero.it>");
 MODULE_DESCRIPTION("ESS AudioDrive ES968");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{ESS,AudioDrive ES968}}");
+MODULE_SUPPORTED_DEVICE("{{ESS,AudioDrive ES968}}");
 
 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;	/* Index 0-MAX */
 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;	/* ID for this card */
@@ -49,22 +46,16 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for es968 based soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for es968 based soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable es968 based soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(port, long, boot_devs, 0444);
 MODULE_PARM_DESC(port, "Port # for es968 driver.");
-MODULE_PARM_SYNTAX(port, SNDRV_PORT12_DESC);
 module_param_array(irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(irq, "IRQ # for es968 driver.");
-MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC);
 module_param_array(dma8, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma8, "8-bit DMA # for es968 driver.");
-MODULE_PARM_SYNTAX(dma8, SNDRV_DMA8_DESC);
 
 struct snd_card_es968 {
 	struct pnp_dev *dev;
@@ -82,7 +73,7 @@
 static irqreturn_t snd_card_es968_interrupt(int irq, void *dev_id,
 					    struct pt_regs *regs)
 {
-	sb_t *chip = snd_magic_cast(sb_t, dev_id, return IRQ_NONE);
+	sb_t *chip = dev_id;
 
 	if (chip->open & SB_OPEN_PCM) {
 		return snd_sb8dsp_interrupt(chip);
diff -Nru a/sound/isa/sb/sb16.c b/sound/isa/sb/sb16.c
--- a/sound/isa/sb/sb16.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/sb/sb16.c	2004-08-04 17:48:49 -07:00
@@ -37,8 +37,6 @@
 #define SNDRV_LEGACY_FIND_FREE_DMA
 #include <sound/initval.h>
 
-#define chip_t sb_t
-
 #ifdef SNDRV_SBAWE
 #define PFX "sbawe: "
 #else
@@ -47,17 +45,16 @@
 
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
 #ifndef SNDRV_SBAWE
 MODULE_DESCRIPTION("Sound Blaster 16");
-MODULE_DEVICES("{{Creative Labs,SB 16},"
+MODULE_SUPPORTED_DEVICE("{{Creative Labs,SB 16},"
 		"{Creative Labs,SB Vibra16S},"
 		"{Creative Labs,SB Vibra16C},"
 		"{Creative Labs,SB Vibra16CL},"
 		"{Creative Labs,SB Vibra16X}}");
 #else
 MODULE_DESCRIPTION("Sound Blaster AWE");
-MODULE_DEVICES("{{Creative Labs,SB AWE 32},"
+MODULE_SUPPORTED_DEVICE("{{Creative Labs,SB AWE 32},"
 		"{Creative Labs,SB AWE 64},"
 		"{Creative Labs,SB AWE 64 Gold}}");
 #endif
@@ -96,53 +93,39 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for SoundBlaster 16 soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for SoundBlaster 16 soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable SoundBlaster 16 soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 #ifdef CONFIG_PNP
 module_param_array(isapnp, bool, boot_devs, 0444);
 MODULE_PARM_DESC(isapnp, "PnP detection for specified soundcard.");
-MODULE_PARM_SYNTAX(isapnp, SNDRV_ISAPNP_DESC);
 #endif
 module_param_array(port, long, boot_devs, 0444);
 MODULE_PARM_DESC(port, "Port # for SB16 driver.");
-MODULE_PARM_SYNTAX(port, SNDRV_ENABLED ",allows:{{0x220},{0x240},{0x260},{0x280}},dialog:list");
 module_param_array(mpu_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(mpu_port, "MPU-401 port # for SB16 driver.");
-MODULE_PARM_SYNTAX(mpu_port, SNDRV_ENABLED ",allows:{{0x330},{0x300}},dialog:list");
 module_param_array(fm_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(fm_port, "FM port # for SB16 PnP driver.");
-MODULE_PARM_SYNTAX(fm_port, SNDRV_ENABLED ",allows:{{0x388},{0x38c},{0x390},{0x394}},dialog:list");
 #ifdef SNDRV_SBAWE_EMU8000
 module_param_array(awe_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(awe_port, "AWE port # for SB16 PnP driver.");
-MODULE_PARM_SYNTAX(awe_port, SNDRV_ENABLED ",allows:{{0x620},{0x640},{0x660},{0x680}},dialog:list");
 #endif
 module_param_array(irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(irq, "IRQ # for SB16 driver.");
-MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC);
 module_param_array(dma8, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma8, "8-bit DMA # for SB16 driver.");
-MODULE_PARM_SYNTAX(dma8, SNDRV_DMA8_DESC);
 module_param_array(dma16, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma16, "16-bit DMA # for SB16 driver.");
-MODULE_PARM_SYNTAX(dma16, SNDRV_DMA16_DESC);
 module_param_array(mic_agc, int, boot_devs, 0444);
 MODULE_PARM_DESC(mic_agc, "Mic Auto-Gain-Control switch.");
-MODULE_PARM_SYNTAX(mic_agc, SNDRV_ENABLED "," SNDRV_BOOLEAN_TRUE_DESC);
 #ifdef CONFIG_SND_SB16_CSP
 module_param_array(csp, int, boot_devs, 0444);
 MODULE_PARM_DESC(csp, "ASP/CSP chip support.");
-MODULE_PARM_SYNTAX(csp, SNDRV_ENABLED "," SNDRV_ENABLE_DESC);
 #endif
 #ifdef SNDRV_SBAWE_EMU8000
 module_param_array(seq_ports, int, boot_devs, 0444);
 MODULE_PARM_DESC(seq_ports, "Number of sequencer ports for WaveTable synth.");
-MODULE_PARM_SYNTAX(seq_ports, SNDRV_ENABLED ",allows:{{0,8}},skill:advanced");
 #endif
 
 struct snd_card_sb16 {
diff -Nru a/sound/isa/sb/sb16_csp.c b/sound/isa/sb/sb16_csp.c
--- a/sound/isa/sb/sb16_csp.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/sb/sb16_csp.c	2004-08-04 17:48:49 -07:00
@@ -33,12 +33,9 @@
 #include <sound/sb16_csp.h>
 #include <sound/initval.h>
 
-#define chip_t snd_sb_csp_t
-
 MODULE_AUTHOR("Uros Bizjak <uros@kss-loka.si>");
 MODULE_DESCRIPTION("ALSA driver for SB16 Creative Signal Processor");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
 
 #ifdef SNDRV_LITTLE_ENDIAN
 #define CSP_HDR_VALUE(a,b,c,d)	((a) | ((b)<<8) | ((c)<<16) | ((d)<<24))
@@ -127,7 +124,7 @@
 	if ((err = snd_hwdep_new(chip->card, "SB16-CSP", device, &hw)) < 0)
 		return err;
 
-	if ((p = snd_magic_kcalloc(snd_sb_csp_t, 0, GFP_KERNEL)) == NULL) {
+	if ((p = kcalloc(1, sizeof(*p), GFP_KERNEL)) == NULL) {
 		snd_device_free(chip->card, hw);
 		return -ENOMEM;
 	}
@@ -165,11 +162,11 @@
  */
 static void snd_sb_csp_free(snd_hwdep_t *hwdep)
 {
-	snd_sb_csp_t *p = snd_magic_cast(snd_sb_csp_t, hwdep->private_data, return);
+	snd_sb_csp_t *p = hwdep->private_data;
 	if (p) {
 		if (p->running & SNDRV_SB_CSP_ST_RUNNING)
 			snd_sb_csp_stop(p);
-		snd_magic_kfree(p);
+		kfree(p);
 	}
 }
 
@@ -180,7 +177,7 @@
  */
 static int snd_sb_csp_open(snd_hwdep_t * hw, struct file *file)
 {
-	snd_sb_csp_t *p = snd_magic_cast(snd_sb_csp_t, hw->private_data, return -ENXIO);
+	snd_sb_csp_t *p = hw->private_data;
 	return (snd_sb_csp_use(p));
 }
 
@@ -189,7 +186,7 @@
  */
 static int snd_sb_csp_ioctl(snd_hwdep_t * hw, struct file *file, unsigned int cmd, unsigned long arg)
 {
-	snd_sb_csp_t *p = snd_magic_cast(snd_sb_csp_t, hw->private_data, return -ENXIO);
+	snd_sb_csp_t *p = hw->private_data;
 	snd_sb_csp_info_t info;
 	snd_sb_csp_start_t start_info;
 	int err;
@@ -258,7 +255,7 @@
  */
 static int snd_sb_csp_release(snd_hwdep_t * hw, struct file *file)
 {
-	snd_sb_csp_t *p = snd_magic_cast(snd_sb_csp_t, hw->private_data, return -ENXIO);
+	snd_sb_csp_t *p = hw->private_data;
 	return (snd_sb_csp_unuse(p));
 }
 
@@ -1110,7 +1107,7 @@
 
 static void info_read(snd_info_entry_t *entry, snd_info_buffer_t * buffer)
 {
-	snd_sb_csp_t *p = snd_magic_cast(snd_sb_csp_t, entry->private_data, return);
+	snd_sb_csp_t *p = entry->private_data;
 
 	snd_iprintf(buffer, "Creative Signal Processor [v%d.%d]\n", (p->version >> 4), (p->version & 0x0f));
 	snd_iprintf(buffer, "State: %cx%c%c%c\n", ((p->running & SNDRV_SB_CSP_ST_QSOUND) ? 'Q' : '-'),
diff -Nru a/sound/isa/sb/sb16_main.c b/sound/isa/sb/sb16_main.c
--- a/sound/isa/sb/sb16_main.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/sb/sb16_main.c	2004-08-04 17:48:49 -07:00
@@ -49,13 +49,11 @@
 MODULE_DESCRIPTION("Routines for control of 16-bit SoundBlaster cards and clones");
 MODULE_LICENSE("GPL");
 
-#define chip_t sb_t
-
 #ifdef CONFIG_SND_SB16_CSP
 static void snd_sb16_csp_playback_prepare(sb_t *chip, snd_pcm_runtime_t *runtime)
 {
 	if (chip->hardware == SB_HW_16CSP) {
-		snd_sb_csp_t *csp = snd_magic_cast(snd_sb_csp_t, chip->csp, return);
+		snd_sb_csp_t *csp = chip->csp;
 
 		if (csp->running & SNDRV_SB_CSP_ST_LOADED) {
 			/* manually loaded codec */
@@ -103,7 +101,7 @@
 static void snd_sb16_csp_capture_prepare(sb_t *chip, snd_pcm_runtime_t *runtime)
 {
 	if (chip->hardware == SB_HW_16CSP) {
-		snd_sb_csp_t *csp = snd_magic_cast(snd_sb_csp_t, chip->csp, return);
+		snd_sb_csp_t *csp = chip->csp;
 
 		if (csp->running & SNDRV_SB_CSP_ST_LOADED) {
 			/* manually loaded codec */
@@ -141,7 +139,7 @@
 static void snd_sb16_csp_update(sb_t *chip)
 {
 	if (chip->hardware == SB_HW_16CSP) {
-		snd_sb_csp_t *csp = snd_magic_cast(snd_sb_csp_t, chip->csp, return);
+		snd_sb_csp_t *csp = chip->csp;
 
 		if (csp->qpos_changed) {
 			spin_lock(&chip->reg_lock);
@@ -155,7 +153,7 @@
 {
 	/* CSP decoders (QSound excluded) support only 16bit transfers */
 	if (chip->hardware == SB_HW_16CSP) {
-		snd_sb_csp_t *csp = snd_magic_cast(snd_sb_csp_t, chip->csp, return);
+		snd_sb_csp_t *csp = chip->csp;
 
 		if (csp->running & SNDRV_SB_CSP_ST_LOADED) {
 			/* manually loaded codec */
@@ -173,7 +171,7 @@
 static void snd_sb16_csp_playback_close(sb_t *chip)
 {
 	if ((chip->hardware == SB_HW_16CSP) && (chip->open == SNDRV_SB_CSP_MODE_DSP_WRITE)) {
-		snd_sb_csp_t *csp = snd_magic_cast(snd_sb_csp_t, chip->csp, return);
+		snd_sb_csp_t *csp = chip->csp;
 
 		if (csp->ops.csp_stop(csp) == 0) {
 			csp->ops.csp_unuse(csp);
@@ -186,7 +184,7 @@
 {
 	/* CSP coders support only 16bit transfers */
 	if (chip->hardware == SB_HW_16CSP) {
-		snd_sb_csp_t *csp = snd_magic_cast(snd_sb_csp_t, chip->csp, return);
+		snd_sb_csp_t *csp = chip->csp;
 
 		if (csp->running & SNDRV_SB_CSP_ST_LOADED) {
 			/* manually loaded codec */
@@ -204,7 +202,7 @@
 static void snd_sb16_csp_capture_close(sb_t *chip)
 {
 	if ((chip->hardware == SB_HW_16CSP) && (chip->open == SNDRV_SB_CSP_MODE_DSP_READ)) {
-		snd_sb_csp_t *csp = snd_magic_cast(snd_sb_csp_t, chip->csp, return);
+		snd_sb_csp_t *csp = chip->csp;
 
 		if (csp->ops.csp_stop(csp) == 0) {
 			csp->ops.csp_unuse(csp);
@@ -395,7 +393,7 @@
 
 irqreturn_t snd_sb16dsp_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	sb_t *chip = snd_magic_cast(sb_t, dev_id, return IRQ_NONE);
+	sb_t *chip = dev_id;
 	unsigned char status;
 	int ok;
 
diff -Nru a/sound/isa/sb/sb8.c b/sound/isa/sb/sb8.c
--- a/sound/isa/sb/sb8.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/sb/sb8.c	2004-08-04 17:48:49 -07:00
@@ -30,13 +30,10 @@
 #define SNDRV_LEGACY_AUTO_PROBE
 #include <sound/initval.h>
 
-#define chip_t sb_t
-
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("Sound Blaster 1.0/2.0/Pro");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{Creative Labs,SB 1.0/SB 2.0/SB Pro}}");
+MODULE_SUPPORTED_DEVICE("{{Creative Labs,SB 1.0/SB 2.0/SB Pro}}");
 
 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;	/* Index 0-MAX */
 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;	/* ID for this card */
@@ -48,22 +45,16 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for Sound Blaster soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for Sound Blaster soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable Sound Blaster soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(port, long, boot_devs, 0444);
 MODULE_PARM_DESC(port, "Port # for SB8 driver.");
-MODULE_PARM_SYNTAX(port, SNDRV_PORT12_DESC);
 module_param_array(irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(irq, "IRQ # for SB8 driver.");
-MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC);
 module_param_array(dma8, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma8, "8-bit DMA # for SB8 driver.");
-MODULE_PARM_SYNTAX(dma8, SNDRV_DMA8_DESC);
 
 struct snd_sb8 {
 	struct resource *fm_res;	/* used to block FM i/o region for legacy cards */
@@ -73,7 +64,7 @@
 
 static irqreturn_t snd_sb8_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	sb_t *chip = snd_magic_cast(sb_t, dev_id, return IRQ_NONE);
+	sb_t *chip = dev_id;
 
 	if (chip->open & SB_OPEN_PCM) {
 		return snd_sb8dsp_interrupt(chip);
diff -Nru a/sound/isa/sb/sb8_main.c b/sound/isa/sb/sb8_main.c
--- a/sound/isa/sb/sb8_main.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/sb/sb8_main.c	2004-08-04 17:48:49 -07:00
@@ -42,8 +42,6 @@
 MODULE_DESCRIPTION("Routines for control of 8-bit SoundBlaster cards and clones");
 MODULE_LICENSE("GPL");
 
-#define chip_t sb_t
-
 #define SB8_CLOCK	1000000
 #define SB8_DEN(v)	((SB8_CLOCK + (v) / 2) / (v))
 #define SB8_RATE(v)	(SB8_CLOCK / SB8_DEN(v))
diff -Nru a/sound/isa/sb/sb8_midi.c b/sound/isa/sb/sb8_midi.c
--- a/sound/isa/sb/sb8_midi.c	2004-08-04 17:48:48 -07:00
+++ b/sound/isa/sb/sb8_midi.c	2004-08-04 17:48:48 -07:00
@@ -73,7 +73,7 @@
 	sb_t *chip;
 	unsigned int valid_open_flags;
 
-	chip = snd_magic_cast(sb_t, substream->rmidi->private_data, return -ENXIO);
+	chip = substream->rmidi->private_data;
 	valid_open_flags = chip->hardware >= SB_HW_20
 		? SB_OPEN_MIDI_OUTPUT | SB_OPEN_MIDI_OUTPUT_TRIGGER : 0;
 	spin_lock_irqsave(&chip->open_lock, flags);
@@ -100,7 +100,7 @@
 	sb_t *chip;
 	unsigned int valid_open_flags;
 
-	chip = snd_magic_cast(sb_t, substream->rmidi->private_data, return -ENXIO);
+	chip = substream->rmidi->private_data;
 	valid_open_flags = chip->hardware >= SB_HW_20
 		? SB_OPEN_MIDI_INPUT | SB_OPEN_MIDI_INPUT_TRIGGER : 0;
 	spin_lock_irqsave(&chip->open_lock, flags);
@@ -126,7 +126,7 @@
 	unsigned long flags;
 	sb_t *chip;
 
-	chip = snd_magic_cast(sb_t, substream->rmidi->private_data, return -ENXIO);
+	chip = substream->rmidi->private_data;
 	spin_lock_irqsave(&chip->open_lock, flags);
 	chip->open &= ~(SB_OPEN_MIDI_INPUT | SB_OPEN_MIDI_INPUT_TRIGGER);
 	chip->midi_substream_input = NULL;
@@ -144,7 +144,7 @@
 	unsigned long flags;
 	sb_t *chip;
 
-	chip = snd_magic_cast(sb_t, substream->rmidi->private_data, return -ENXIO);
+	chip = substream->rmidi->private_data;
 	spin_lock_irqsave(&chip->open_lock, flags);
 	chip->open &= ~(SB_OPEN_MIDI_OUTPUT | SB_OPEN_MIDI_OUTPUT_TRIGGER);
 	chip->midi_substream_output = NULL;
@@ -162,7 +162,7 @@
 	unsigned long flags;
 	sb_t *chip;
 
-	chip = snd_magic_cast(sb_t, substream->rmidi->private_data, return);
+	chip = substream->rmidi->private_data;
 	spin_lock_irqsave(&chip->open_lock, flags);
 	if (up) {
 		if (!(chip->open & SB_OPEN_MIDI_INPUT_TRIGGER)) {
@@ -188,7 +188,7 @@
 	int max = 32;
 
 	/* how big is Tx FIFO? */
-	chip = snd_magic_cast(sb_t, substream->rmidi->private_data, return);
+	chip = substream->rmidi->private_data;
 	while (max-- > 0) {
 		spin_lock_irqsave(&chip->open_lock, flags);
 		if (snd_rawmidi_transmit_peek(substream, &byte, 1) != 1) {
@@ -219,7 +219,7 @@
 static void snd_sb8dsp_midi_output_timer(unsigned long data)
 {
 	snd_rawmidi_substream_t * substream = (snd_rawmidi_substream_t *) data;
-	sb_t * chip = snd_magic_cast(sb_t, substream->rmidi->private_data, return);
+	sb_t * chip = substream->rmidi->private_data;
 	unsigned long flags;
 
 	spin_lock_irqsave(&chip->open_lock, flags);
@@ -234,7 +234,7 @@
 	unsigned long flags;
 	sb_t *chip;
 
-	chip = snd_magic_cast(sb_t, substream->rmidi->private_data, return);
+	chip = substream->rmidi->private_data;
 	spin_lock_irqsave(&chip->open_lock, flags);
 	if (up) {
 		if (!(chip->open & SB_OPEN_MIDI_OUTPUT_TRIGGER)) {
diff -Nru a/sound/isa/sb/sb_common.c b/sound/isa/sb/sb_common.c
--- a/sound/isa/sb/sb_common.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/sb/sb_common.c	2004-08-04 17:48:49 -07:00
@@ -33,12 +33,9 @@
 #include <asm/io.h>
 #include <asm/dma.h>
 
-#define chip_t sb_t
-
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("ALSA lowlevel driver for Sound Blaster cards");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
 
 #define BUSY_LOOPS 100000
 
@@ -197,13 +194,13 @@
 		free_dma(chip->dma16);
 	}
 #endif
-	snd_magic_kfree(chip);
+	kfree(chip);
 	return 0;
 }
 
 static int snd_sbdsp_dev_free(snd_device_t *device)
 {
-	sb_t *chip = snd_magic_cast(sb_t, device->device_data, return -ENXIO);
+	sb_t *chip = device->device_data;
 	return snd_sbdsp_free(chip);
 }
 
@@ -224,7 +221,7 @@
 
 	snd_assert(r_chip != NULL, return -EINVAL);
 	*r_chip = NULL;
-	chip = snd_magic_kcalloc(sb_t, 0, GFP_KERNEL);
+	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
 	if (chip == NULL)
 		return -ENOMEM;
 	spin_lock_init(&chip->reg_lock);
diff -Nru a/sound/isa/sb/sb_mixer.c b/sound/isa/sb/sb_mixer.c
--- a/sound/isa/sb/sb_mixer.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/sb/sb_mixer.c	2004-08-04 17:48:49 -07:00
@@ -27,8 +27,6 @@
 #include <sound/sb.h>
 #include <sound/control.h>
 
-#define chip_t sb_t
-
 #undef IO_DEBUG
 
 void snd_sbmixer_write(sb_t *chip, unsigned char reg, unsigned char data)
diff -Nru a/sound/isa/sgalaxy.c b/sound/isa/sgalaxy.c
--- a/sound/isa/sgalaxy.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/sgalaxy.c	2004-08-04 17:48:49 -07:00
@@ -39,8 +39,7 @@
 MODULE_AUTHOR("Christopher Butler <chrisb@sandy.force9.co.uk>");
 MODULE_DESCRIPTION("Aztech Sound Galaxy");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{Aztech Systems,Sound Galaxy}}");
+MODULE_SUPPORTED_DEVICE("{{Aztech Systems,Sound Galaxy}}");
 
 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;	/* Index 0-MAX */
 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;	/* ID for this card */
@@ -53,22 +52,16 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for Sound Galaxy soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for Sound Galaxy soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(sbport, long, boot_devs, 0444);
 MODULE_PARM_DESC(sbport, "Port # for Sound Galaxy SB driver.");
-MODULE_PARM_SYNTAX(sbport, SNDRV_ENABLED ",allows:{{0x220},{0x240}},dialog:list");
 module_param_array(wssport, long, boot_devs, 0444);
 MODULE_PARM_DESC(wssport, "Port # for Sound Galaxy WSS driver.");
-MODULE_PARM_SYNTAX(wssport, SNDRV_ENABLED ",allows:{{0x530},{0xe80},{0xf40},{0x604}},dialog:list");
 module_param_array(irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(irq, "IRQ # for Sound Galaxy driver.");
-MODULE_PARM_SYNTAX(irq, SNDRV_ENABLED ",allows:{{7},{9},{10},{11}},dialog:list");
 module_param_array(dma1, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma1, "DMA1 # for Sound Galaxy driver.");
-MODULE_PARM_SYNTAX(dma1, SNDRV_DMA8_DESC);
 
 #define SGALAXY_AUXC_LEFT 18
 #define SGALAXY_AUXC_RIGHT 19
diff -Nru a/sound/isa/sscape.c b/sound/isa/sscape.c
--- a/sound/isa/sscape.c	2004-08-04 17:48:48 -07:00
+++ b/sound/isa/sscape.c	2004-08-04 17:48:48 -07:00
@@ -36,8 +36,6 @@
 
 #include <sound/sscape_ioctl.h>
 
-#define chip_t cs4231_t
-
 
 MODULE_AUTHOR("Chris Rankin");
 MODULE_DESCRIPTION("ENSONIQ SoundScape PnP driver");
@@ -53,27 +51,21 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index number for SoundScape soundcard");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "Description for SoundScape card");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 
 module_param_array(port, long, boot_devs, 0444);
 MODULE_PARM_DESC(port, "Port # for SoundScape driver.");
-MODULE_PARM_SYNTAX(port, SNDRV_ENABLED);
 
 module_param_array(irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(irq, "IRQ # for SoundScape driver.");
-MODULE_PARM_SYNTAX(irq, SNDRV_IRQ_DESC);
 
 module_param_array(mpu_irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(mpu_irq, "MPU401 IRQ # for SoundScape driver.");
-MODULE_PARM_SYNTAX(mpu_irq, SNDRV_IRQ_DESC);
 
 module_param_array(dma, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma, "DMA # for SoundScape driver.");
-MODULE_PARM_SYNTAX(dma, SNDRV_DMA8_DESC);
   
 #ifdef CONFIG_PNP
 static struct pnp_card_device_id sscape_pnpids[] = {
@@ -177,11 +169,8 @@
 static struct snd_dma_buffer *get_dmabuf(struct snd_dma_buffer *buf, unsigned long size)
 {
 	if (buf) {
-		struct snd_dma_device dev;
-		memset(&dev, 0, sizeof(dev));
-		dev.type = SNDRV_DMA_TYPE_DEV;
-		dev.dev = snd_dma_isa_data();
-		if (snd_dma_alloc_pages_fallback(&dev, size, buf) < 0) {
+		if (snd_dma_alloc_pages_fallback(SNDRV_DMA_TYPE_DEV, snd_dma_isa_data(),
+						 size, buf) < 0) {
 			snd_printk(KERN_ERR "sscape: Failed to allocate %lu bytes for DMA\n", size);
 			return NULL;
 		}
@@ -195,13 +184,8 @@
  */
 static void free_dmabuf(struct snd_dma_buffer *buf)
 {
-	if (buf && buf->area) {
-		struct snd_dma_device dev;
-		memset(&dev, 0, sizeof(dev));
-		dev.type = SNDRV_DMA_TYPE_DEV;
-		dev.dev = snd_dma_isa_data();
-		snd_dma_free_pages(&dev, buf);
-	}
+	if (buf && buf->area)
+		snd_dma_free_pages(buf);
 }
 
 
diff -Nru a/sound/isa/wavefront/wavefront.c b/sound/isa/wavefront/wavefront.c
--- a/sound/isa/wavefront/wavefront.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/wavefront/wavefront.c	2004-08-04 17:48:49 -07:00
@@ -30,13 +30,10 @@
 #include <sound/opl3.h>
 #include <sound/snd_wavefront.h>
 
-#define chip_t cs4231_t
-
 MODULE_AUTHOR("Paul Barton-Davis <pbd@op.net>");
 MODULE_DESCRIPTION("Turtle Beach Wavefront");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{Turtle Beach,Maui/Tropez/Tropez+}}");
+MODULE_SUPPORTED_DEVICE("{{Turtle Beach,Maui/Tropez/Tropez+}}");
 
 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;	    /* Index 0-MAX */
 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;	    /* ID for this card */
@@ -56,48 +53,34 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for WaveFront soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for WaveFront soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable WaveFront soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 #ifdef CONFIG_PNP
 module_param_array(isapnp, bool, boot_devs, 0444);
 MODULE_PARM_DESC(isapnp, "ISA PnP detection for WaveFront soundcards.");
-MODULE_PARM_SYNTAX(isapnp, SNDRV_ISAPNP_DESC);
 #endif
 module_param_array(cs4232_pcm_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(cs4232_pcm_port, "Port # for CS4232 PCM interface.");
-MODULE_PARM_SYNTAX(cs4232_pcm_port, SNDRV_PORT12_DESC);
 module_param_array(cs4232_pcm_irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(cs4232_pcm_irq, "IRQ # for CS4232 PCM interface.");
-MODULE_PARM_SYNTAX(cs4232_pcm_irq, SNDRV_ENABLED ",allows:{{5},{7},{9},{11},{12},{15}},dialog:list");
 module_param_array(dma1, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma1, "DMA1 # for CS4232 PCM interface.");
-MODULE_PARM_SYNTAX(dma1, SNDRV_DMA_DESC);
 module_param_array(dma2, int, boot_devs, 0444);
 MODULE_PARM_DESC(dma2, "DMA2 # for CS4232 PCM interface.");
-MODULE_PARM_SYNTAX(dma2, SNDRV_DMA_DESC);
 module_param_array(cs4232_mpu_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(cs4232_mpu_port, "port # for CS4232 MPU-401 interface.");
-MODULE_PARM_SYNTAX(cs4232_mpu_port, SNDRV_PORT12_DESC);
 module_param_array(cs4232_mpu_irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(cs4232_mpu_irq, "IRQ # for CS4232 MPU-401 interface.");
-MODULE_PARM_SYNTAX(cs4232_mpu_irq, SNDRV_ENABLED ",allows:{{9},{11},{12},{15}},dialog:list");
 module_param_array(ics2115_irq, int, boot_devs, 0444);
 MODULE_PARM_DESC(ics2115_irq, "IRQ # for ICS2115.");
-MODULE_PARM_SYNTAX(ics2115_irq, SNDRV_ENABLED ",allows:{{9},{11},{12},{15}},dialog:list");
 module_param_array(ics2115_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(ics2115_port, "Port # for ICS2115.");
-MODULE_PARM_SYNTAX(ics2115_port, SNDRV_PORT12_DESC);
 module_param_array(fm_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(fm_port, "FM port #.");
-MODULE_PARM_SYNTAX(fm_port, SNDRV_PORT12_DESC);
 module_param_array(use_cs4232_midi, bool, boot_devs, 0444);
 MODULE_PARM_DESC(use_cs4232_midi, "Use CS4232 MPU-401 interface (inaccessibly located inside your computer)");
-MODULE_PARM_SYNTAX(use_cs4232_midi, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC);
 
 static snd_card_t *snd_wavefront_legacy[SNDRV_CARDS] = SNDRV_DEFAULT_PTR;
 
diff -Nru a/sound/isa/wavefront/wavefront_fx.c b/sound/isa/wavefront/wavefront_fx.c
--- a/sound/isa/wavefront/wavefront_fx.c	2004-08-04 17:48:49 -07:00
+++ b/sound/isa/wavefront/wavefront_fx.c	2004-08-04 17:48:49 -07:00
@@ -486,8 +486,9 @@
 	snd_wavefront_card_t *acard;
 	snd_wavefront_t *dev;
 	wavefront_fx_info r;
-	unsigned short page_data[256];
+	unsigned short *page_data = NULL;
 	unsigned short *pd;
+	int err = 0;
 
 	snd_assert(sdev->card != NULL, return -ENODEV);
 	
@@ -514,23 +515,30 @@
 		} else if (r.data[2] == 1) {
 			pd = (unsigned short *) &r.data[3];
 		} else {
-			if (r.data[2] > (long)sizeof (page_data)) {
+			if (r.data[2] > 256) {
 				snd_printk ("cannot write "
-					    "> 255 bytes to FX\n");
+					    "> 512 bytes to FX\n");
 				return -EIO;
 			}
+			page_data = kmalloc(r.data[2] * sizeof(short), GFP_KERNEL);
+			if (!page_data)
+				return -ENOMEM;
 			if (copy_from_user (page_data,
 					    (unsigned char __user *) r.data[3],
-					    r.data[2]))
+					    r.data[2] * sizeof(short))) {
+				kfree(page_data);
 				return -EFAULT;
+			}
 			pd = page_data;
 		}
 
-		wavefront_fx_memset (dev,
+		err = wavefront_fx_memset (dev,
 			     r.data[0], /* page */
 			     r.data[1], /* addr */
 			     r.data[2], /* cnt */
 			     pd);
+		if (page_data)
+			kfree(page_data);
 		break;
 
 	default:
@@ -538,7 +546,7 @@
 			    r.request);
 		return -ENOTTY;
 	}
-	return 0;
+	return err;
 }
 
 /* YSS225 initialization.
diff -Nru a/sound/isa/wavefront/wavefront_synth.c b/sound/isa/wavefront/wavefront_synth.c
--- a/sound/isa/wavefront/wavefront_synth.c	2004-08-04 17:48:48 -07:00
+++ b/sound/isa/wavefront/wavefront_synth.c	2004-08-04 17:48:49 -07:00
@@ -1961,6 +1961,12 @@
 			break;
 		}
 
+		if (section_length < 0 || section_length > WF_SECTION_MAX) {
+			snd_printk ("invalid firmware section length %d\n",
+				    section_length);
+			goto failure;
+		}
+
 		if (sys_read (fd, section, section_length) != section_length) {
 			snd_printk ("firmware section "
 				"read error.\n");
diff -Nru a/sound/parisc/harmony.c b/sound/parisc/harmony.c
--- a/sound/parisc/harmony.c	2004-08-04 17:48:49 -07:00
+++ b/sound/parisc/harmony.c	2004-08-04 17:48:49 -07:00
@@ -80,8 +80,7 @@
 MODULE_AUTHOR("Laurent Canet <canetl@esiee.fr>");
 MODULE_DESCRIPTION("ALSA Harmony sound driver");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{ALSA,Harmony soundcard}}");
+MODULE_SUPPORTED_DEVICE("{{ALSA,Harmony soundcard}}");
 
 #undef DEBUG
 #ifdef DEBUG
@@ -138,13 +137,10 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for Sun CS4231 soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for Sun CS4231 soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable Sun CS4231 soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 
 /* Register offset (from base hpa) */
 #define REG_ID		0x00
@@ -216,7 +212,6 @@
 	snd_pcm_substream_t *capture_substream;
 	snd_info_entry_t *proc_entry;
 } snd_card_harmony_t;
-#define chip_t snd_card_harmony_t
 
 static snd_card_t *snd_harmony_cards[SNDRV_CARDS] = SNDRV_DEFAULT_PTR;
 
@@ -243,10 +238,8 @@
 	44100, 48000
 };
 
-#define RATES sizeof(snd_card_harmony_rates) / sizeof(snd_card_harmony_rates[0])
-
 static snd_pcm_hw_constraint_list_t hw_constraint_rates = {
-	.count = RATES,
+	.count = ARRAY_SIZE(snd_card_harmony_rates),
 	.list = snd_card_harmony_rates,
 	.mask = 0,
 };
@@ -283,7 +276,7 @@
 {
 	unsigned int idx;
 	
-	for (idx = 0; idx <= RATES; idx++)
+	for (idx = 0; idx <= ARRAY_SIZE(snd_card_harmony_rates); idx++)
 		if (snd_card_harmony_rates[idx] == rate)
 			return rate_bits[idx];
 	return HARMONY_SR_44KHZ; /* fallback */
@@ -556,7 +549,7 @@
 	harmony->sample_rate = snd_card_harmony_rate_bits(runtime->rate);
 
 	/* data format */
-	harmony->data_format = snd_harmony_set_data_format(haromny, runtime->format);
+	harmony->data_format = snd_harmony_set_data_format(harmony, runtime->format);
 
 	/* number of channels */
 	if (runtime->channels == 2)
@@ -587,7 +580,7 @@
 	harmony->sample_rate = snd_card_harmony_rate_bits(runtime->rate);
 	
 	/* data format */
-	harmony->data_format = snd_harmony_set_data_format(haromny, runtime->format);
+	harmony->data_format = snd_harmony_set_data_format(harmony, runtime->format);
 	
 	/* number of channels */
 	if (runtime->channels == 1)
@@ -751,6 +744,8 @@
 	int err;
 	
 	err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
+	if (err > 0 && substream->dma_device.type == SNDRV_DMA_TYPE_CONTINUOUS)
+		substream->runtime->dma_addr = __pa(substream->runtime->dma_area);
 	DPRINTK(KERN_INFO PFX "HW Params returned %d, dma_addr %lx\n", err,
 			(unsigned long)substream->runtime->dma_addr);
 	return err;
@@ -784,7 +779,7 @@
 	.pointer =		snd_card_harmony_capture_pointer,
 };
 
-static int snd_card_harmony_pcm_init(snd_card_harmony_t *harmony, int device)
+static int snd_card_harmony_pcm_init(snd_card_harmony_t *harmony)
 {
 	snd_pcm_t *pcm;
 	int err;
@@ -797,7 +792,7 @@
 	
 	snd_harmony_disable_interrupts(harmony);
 	
-   	if ((err = snd_pcm_new(harmony->card, "Harmony", device, 1, 1, &pcm)) < 0)
+   	if ((err = snd_pcm_new(harmony->card, "Harmony", 0, 1, 1, &pcm)) < 0)
 		return err;
 	
 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_card_harmony_playback_ops);
@@ -811,28 +806,54 @@
 	/* initialize graveyard buffer */
 	harmony->dma_dev.type = SNDRV_DMA_TYPE_DEV;
 	harmony->dma_dev.dev = &harmony->pa_dev->dev;
-	err = snd_dma_alloc_pages(&harmony->dma_dev, HARMONY_BUF_SIZE*GRAVEYARD_BUFS,
+	err = snd_dma_alloc_pages(harmony->dma_dev.type,
+				  harmony->dma_dev.dev,
+				  HARMONY_BUF_SIZE*GRAVEYARD_BUFS,
 				  &harmony->graveyard_dma);
-	if (err < 0)
+	if (err == -ENOMEM) {
+		/* use continuous buffers */
+		harmony->dma_dev.type = SNDRV_DMA_TYPE_CONTINUOUS;
+		harmony->dma_dev.dev = snd_dma_continuous_data(GFP_KERNEL);
+		err = snd_dma_alloc_pages(harmony->dma_dev.type,
+					  harmony->dma_dev.dev,
+					  HARMONY_BUF_SIZE*GRAVEYARD_BUFS,
+					  &harmony->graveyard_dma);
+	}
+	if (err < 0) {
+		printk(KERN_ERR PFX "can't allocate graveyard buffer\n");
 		return err;
+	}
 	harmony->graveyard_count = 0;
 	
 	/* initialize silence buffers */
-	err = snd_dma_alloc_pages(&harmony->dma_dev, HARMONY_BUF_SIZE*SILENCE_BUFS,
+	err = snd_dma_alloc_pages(harmony->dma_dev.type,
+				  harmony->dma_dev.dev,
+				  HARMONY_BUF_SIZE*SILENCE_BUFS,
 				  &harmony->silence_dma);
-	if (err < 0)
+	if (err < 0) {
+		printk(KERN_ERR PFX "can't allocate silence buffer\n");
 		return err;
+	}
 	harmony->silence_count = 0;
 
+	if (harmony->dma_dev.type == SNDRV_DMA_TYPE_CONTINUOUS) {
+		harmony->graveyard_dma.addr = __pa(harmony->graveyard_dma.area);
+		harmony->silence_dma.addr = __pa(harmony->silence_dma.area);
+	}
+
 	harmony->ply_stopped = harmony->cap_stopped = 1;
 	
 	harmony->playback_substream = NULL;
 	harmony->capture_substream = NULL;
 	harmony->graveyard_count = 0;
-	
-	snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
-					      &harmony->pa_dev->dev,
-					      MAX_BUFFER_SIZE, MAX_BUFFER_SIZE);
+
+	err = snd_pcm_lib_preallocate_pages_for_all(pcm, harmony->dma_dev.type,
+						    harmony->dma_dev.dev,
+						    MAX_BUFFER_SIZE, MAX_BUFFER_SIZE);
+	if (err < 0) {
+		printk(KERN_ERR PFX "buffer allocation error %d\n", err);
+		// return err;
+	}
 
 	return 0;
 }
@@ -871,7 +892,7 @@
  
 static int snd_harmony_volume_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	snd_card_harmony_t *harmony = _snd_kcontrol_chip(kcontrol);
+	snd_card_harmony_t *harmony = snd_kcontrol_chip(kcontrol);
 	int shift_left = (kcontrol->private_value) & 0xff;
 	int shift_right = (kcontrol->private_value >> 8) & 0xff;
 	int mask = (kcontrol->private_value >> 16) & 0xff;
@@ -896,7 +917,7 @@
 
 static int snd_harmony_volume_put(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	snd_card_harmony_t *harmony = _snd_kcontrol_chip(kcontrol);
+	snd_card_harmony_t *harmony = snd_kcontrol_chip(kcontrol);
 	int shift_left = (kcontrol->private_value) & 0xff;
 	int shift_right = (kcontrol->private_value >> 8) & 0xff;
 	int mask = (kcontrol->private_value >> 16) & 0xff;
@@ -1037,7 +1058,7 @@
 		snd_card_free(card);
 		return err;
 	}
-	if ((err = snd_card_harmony_pcm_init(chip, dev)) < 0) {
+	if ((err = snd_card_harmony_pcm_init(chip)) < 0) {
 		printk(KERN_ERR PFX "PCM Init failed\n");
 		snd_card_free(card);
 		return err;
diff -Nru a/sound/pci/Kconfig b/sound/pci/Kconfig
--- a/sound/pci/Kconfig	2004-08-04 17:48:48 -07:00
+++ b/sound/pci/Kconfig	2004-08-04 17:48:48 -07:00
@@ -22,6 +22,14 @@
 	help
 	  Say 'Y' or 'M' to include support for ATI IXP 150/200/250/300 AC97 controller.
 
+config SND_ATIIXP_MODEM
+	tristate "ATI IXP 150/200/250 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.
+
 config SND_AU8810
         tristate "Aureal Advantage"
         depends on SND
@@ -290,12 +298,12 @@
 	  SiS 7012, AMD768/8111, NVidia NForce and ALi 5455 chips.
 
 config SND_INTEL8X0M
-	tristate "Intel i8x0/MX440; AMD768/8111 modems (EXPERIMENTAL)"
+	tristate "Intel i8x0/MX440; NForce; AMD768/8111 modems (EXPERIMENTAL)"
 	depends on SND && EXPERIMENTAL
 	select SND_AC97_CODEC
 	help
-	  Say 'Y' or 'M' to include support for Intel8x0 and AMD768/8111 based
-	  modems.
+	  Say 'Y' or 'M' to include support for Intel8x0, NVidia NForce and
+	  AMD768/8111 base modems.
 
 config SND_SONICVIBES
 	tristate "S3 SonicVibes"
diff -Nru a/sound/pci/Makefile b/sound/pci/Makefile
--- a/sound/pci/Makefile	2004-08-04 17:48:48 -07:00
+++ b/sound/pci/Makefile	2004-08-04 17:48:48 -07:00
@@ -5,6 +5,7 @@
 
 snd-als4000-objs := als4000.o
 snd-atiixp-objs := atiixp.o
+snd-atiixp-modem-objs := atiixp_modem.o
 snd-azt3328-objs := azt3328.o
 snd-bt87x-objs := bt87x.o
 snd-cmipci-objs := cmipci.o
@@ -25,6 +26,7 @@
 # Toplevel Module Dependency
 obj-$(CONFIG_SND_ALS4000) += snd-als4000.o
 obj-$(CONFIG_SND_ATIIXP) += snd-atiixp.o
+obj-$(CONFIG_SND_ATIIXP_MODEM) += snd-atiixp-modem.o
 obj-$(CONFIG_SND_AZT3328) += snd-azt3328.o
 obj-$(CONFIG_SND_BT87X) += snd-bt87x.o
 obj-$(CONFIG_SND_CMIPCI) += snd-cmipci.o
diff -Nru a/sound/pci/ac97/ac97_codec.c b/sound/pci/ac97/ac97_codec.c
--- a/sound/pci/ac97/ac97_codec.c	2004-08-04 17:48:48 -07:00
+++ b/sound/pci/ac97/ac97_codec.c	2004-08-04 17:48:48 -07:00
@@ -45,9 +45,6 @@
 
 module_param(enable_loopback, bool, 0444);
 MODULE_PARM_DESC(enable_loopback, "Enable AC97 ADC/DAC Loopback Control");
-MODULE_PARM_SYNTAX(enable_loopback, SNDRV_BOOLEAN_FALSE_DESC);
-
-#define chip_t ac97_t
 
 /*
 
@@ -108,12 +105,13 @@
 { 0x41445375, 0xffffffff, "AD1985",		patch_ad1985,	NULL },
 { 0x414c4300, 0xffffff00, "ALC100/100P", 	NULL,		NULL },
 { 0x414c4710, 0xfffffff0, "ALC200/200P",	NULL,		NULL },
+{ 0x414c4721, 0xffffffff, "ALC650D",		NULL,	NULL }, /* already patched */
+{ 0x414c4722, 0xffffffff, "ALC650E",		NULL,	NULL }, /* already patched */
+{ 0x414c4723, 0xffffffff, "ALC650F",		NULL,	NULL }, /* already patched */
 { 0x414c4720, 0xfffffff0, "ALC650",		patch_alc650,	NULL },
-{ 0x414c4721, 0xfffffff0, "ALC650D",		patch_alc650,	NULL },
-{ 0x414c4722, 0xfffffff0, "ALC650E",		patch_alc650,	NULL },
-{ 0x414c4723, 0xfffffff0, "ALC650F",		patch_alc650,	NULL },
 { 0x414c4760, 0xfffffff0, "ALC655",		patch_alc655,	NULL },
 { 0x414c4780, 0xfffffff0, "ALC658",		patch_alc655,	NULL },
+{ 0x414c4790, 0xfffffff0, "ALC850",		patch_alc850,	NULL },
 { 0x414c4730, 0xffffffff, "ALC101",		NULL,		NULL },
 { 0x414c4740, 0xfffffff0, "ALC202",		NULL,		NULL },
 { 0x414c4750, 0xfffffff0, "ALC250",		NULL,		NULL },
@@ -214,6 +212,13 @@
 };
 
 /*
+ * Shared AC97 controllers (ICH, ATIIXP...)
+ */
+static DECLARE_MUTEX(shared_codec_mutex);
+static ac97_t *shared_codec[AC97_SHARED_TYPES][4];
+
+
+/*
  *  I/O routines
  */
 
@@ -274,12 +279,12 @@
 {
 	if (!snd_ac97_valid_reg(ac97, reg))
 		return;
-	if ((ac97->id & 0xffffff00) == 0x414c4300) {
+	if ((ac97->id & 0xffffff00) == AC97_ID_ALC100) {
 		/* Fix H/W bug of ALC100/100P */
 		if (reg == AC97_MASTER || reg == AC97_HEADPHONE)
-			ac97->bus->write(ac97, AC97_RESET, 0);	/* reset audio codec */
+			ac97->bus->ops->write(ac97, AC97_RESET, 0);	/* reset audio codec */
 	}
-	ac97->bus->write(ac97, reg, value);
+	ac97->bus->ops->write(ac97, reg, value);
 }
 
 /**
@@ -297,14 +302,14 @@
 {
 	if (!snd_ac97_valid_reg(ac97, reg))
 		return 0;
-	return ac97->bus->read(ac97, reg);
+	return ac97->bus->ops->read(ac97, reg);
 }
 
 /* read a register - return the cached value if already read */
 static inline unsigned short snd_ac97_read_cache(ac97_t *ac97, unsigned short reg)
 {
 	if (! test_bit(reg, ac97->reg_accessed)) {
-		ac97->regs[reg] = ac97->bus->read(ac97, reg);
+		ac97->regs[reg] = ac97->bus->ops->read(ac97, reg);
 		// set_bit(reg, ac97->reg_accessed);
 	}
 	return ac97->regs[reg];
@@ -327,7 +332,7 @@
 	spin_lock(&ac97->reg_lock);
 	ac97->regs[reg] = value;
 	spin_unlock(&ac97->reg_lock);
-	ac97->bus->write(ac97, reg, value);
+	ac97->bus->ops->write(ac97, reg, value);
 	set_bit(reg, ac97->reg_accessed);
 }
 
@@ -354,7 +359,7 @@
 	if (change) {
 		ac97->regs[reg] = value;
 		spin_unlock(&ac97->reg_lock);
-		ac97->bus->write(ac97, reg, value);
+		ac97->bus->ops->write(ac97, reg, value);
 	} else
 		spin_unlock(&ac97->reg_lock);
 	return change;
@@ -387,7 +392,7 @@
 	if (change) {
 		ac97->regs[reg] = new;
 		spin_unlock(&ac97->reg_lock);
-		ac97->bus->write(ac97, reg, new);
+		ac97->bus->ops->write(ac97, reg, new);
 	} else
 		spin_unlock(&ac97->reg_lock);
 	return change;
@@ -398,7 +403,7 @@
 	int change;
 	unsigned short old, new, cfg;
 
-	down(&ac97->spec.ad18xx.mutex);
+	down(&ac97->mutex);
 	spin_lock(&ac97->reg_lock);
 	old = ac97->spec.ad18xx.pcmreg[codec];
 	new = (old & ~mask) | value;
@@ -408,17 +413,17 @@
 		ac97->spec.ad18xx.pcmreg[codec] = new;
 		spin_unlock(&ac97->reg_lock);
 		/* select single codec */
-		ac97->bus->write(ac97, AC97_AD_SERIAL_CFG,
+		ac97->bus->ops->write(ac97, AC97_AD_SERIAL_CFG,
 				 (cfg & ~0x7000) |
 				 ac97->spec.ad18xx.unchained[codec] | ac97->spec.ad18xx.chained[codec]);
 		/* update PCM bits */
-		ac97->bus->write(ac97, AC97_PCM, new);
+		ac97->bus->ops->write(ac97, AC97_PCM, new);
 		/* select all codecs */
-		ac97->bus->write(ac97, AC97_AD_SERIAL_CFG,
+		ac97->bus->ops->write(ac97, AC97_AD_SERIAL_CFG,
 				 cfg | 0x7000);
 	} else
 		spin_unlock(&ac97->reg_lock);
-	up(&ac97->spec.ad18xx.mutex);
+	up(&ac97->mutex);
 	return change;
 }
 
@@ -545,7 +550,7 @@
 	int reg = kcontrol->private_value & 0xff;
 	int shift = (kcontrol->private_value >> 8) & 0xff;
 	int mask = (kcontrol->private_value >> 16) & 0xff;
-	int invert = (kcontrol->private_value >> 24) & 0xff;
+	int invert = (kcontrol->private_value >> 24) & 0x01;
 	
 	ucontrol->value.integer.value[0] = (snd_ac97_read_cache(ac97, reg) >> shift) & mask;
 	if (invert)
@@ -559,7 +564,7 @@
 	int reg = kcontrol->private_value & 0xff;
 	int shift = (kcontrol->private_value >> 8) & 0xff;
 	int mask = (kcontrol->private_value >> 16) & 0xff;
-	int invert = (kcontrol->private_value >> 24) & 0xff;
+	int invert = (kcontrol->private_value >> 24) & 0x01;
 	unsigned short val;
 	
 	val = (ucontrol->value.integer.value[0] & mask);
@@ -625,6 +630,40 @@
 				    (val1 << shift_left) | (val2 << shift_right));
 }
 
+int snd_ac97_getput_page(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol,
+			 int (*func)(snd_kcontrol_t *, snd_ctl_elem_value_t *))
+{
+	ac97_t *ac97 = snd_kcontrol_chip(kcontrol);
+	int reg = kcontrol->private_value & 0xff;
+	int err;
+
+	if ((ac97->ext_id & AC97_EI_REV_MASK) >= AC97_EI_REV_23 &&
+	    (reg >= 0x60 && reg < 0x70)) {
+		unsigned short page_save;
+		unsigned short page = (kcontrol->private_value >> 25) & 0x0f;
+		down(&ac97->mutex); /* lock paging */
+		page_save = snd_ac97_read(ac97, AC97_INT_PAGING) & AC97_PAGE_MASK;
+		snd_ac97_update_bits(ac97, AC97_INT_PAGING, AC97_PAGE_MASK, page);
+		err = func(kcontrol, ucontrol);
+		snd_ac97_update_bits(ac97, AC97_INT_PAGING, AC97_PAGE_MASK, page_save);
+		up(&ac97->mutex); /* unlock paging */
+	} else
+		err = func(kcontrol, ucontrol);
+	return err;
+}
+
+/* for rev2.3 paging */
+int snd_ac97_page_get_single(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	return snd_ac97_getput_page(kcontrol, ucontrol, snd_ac97_get_single);
+}
+
+/* for rev2.3 paging */
+int snd_ac97_page_put_single(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	return snd_ac97_getput_page(kcontrol, ucontrol, snd_ac97_put_single);
+}
+
 static const snd_kcontrol_new_t snd_ac97_controls_master_mono[2] = {
 AC97_SINGLE("Master Mono Playback Switch", AC97_MASTER_MONO, 15, 1, 1),
 AC97_SINGLE("Master Mono Playback Volume", AC97_MASTER_MONO, 0, 31, 1)
@@ -1009,14 +1048,14 @@
 			kfree(bus->pcms);
 		if (bus->private_free)
 			bus->private_free(bus);
-		snd_magic_kfree(bus);
+		kfree(bus);
 	}
 	return 0;
 }
 
 static int snd_ac97_bus_dev_free(snd_device_t *device)
 {
-	ac97_bus_t *bus = snd_magic_cast(ac97_bus_t, device->device_data, return -ENXIO);
+	ac97_bus_t *bus = device->device_data;
 	return snd_ac97_bus_free(bus);
 }
 
@@ -1024,18 +1063,24 @@
 {
 	if (ac97) {
 		snd_ac97_proc_done(ac97);
-		if (ac97->bus)
+		if (ac97->bus) {
 			ac97->bus->codec[ac97->num] = NULL;
+			if (ac97->bus->shared_type) {
+				down(&shared_codec_mutex);
+				shared_codec[ac97->bus->shared_type-1][ac97->num] = NULL;
+				up(&shared_codec_mutex);
+			}
+		}
 		if (ac97->private_free)
 			ac97->private_free(ac97);
-		snd_magic_kfree(ac97);
+		kfree(ac97);
 	}
 	return 0;
 }
 
 static int snd_ac97_dev_free(snd_device_t *device)
 {
-	ac97_t *ac97 = snd_magic_cast(ac97_t, device->device_data, return -ENXIO);
+	ac97_t *ac97 = device->device_data;
 	snd_ac97_powerdown(ac97); /* for avoiding click noises during shut down */
 	return snd_ac97_free(ac97);
 }
@@ -1120,6 +1165,7 @@
 	snd_ac97_write_cache(ac97, reg, 0x8000);
 }
 
+/* check the volume resolution of center/lfe */
 static void snd_ac97_change_volume_params2(ac97_t * ac97, int reg, int shift, unsigned char *max)
 {
 	unsigned short val, val1;
@@ -1135,6 +1181,7 @@
 	snd_ac97_write_cache(ac97, reg, 0x8080);
 }
 
+/* check whether the volume resolution is 4 or 5 bits */
 static void snd_ac97_change_volume_params3(ac97_t * ac97, int reg, unsigned char *max)
 {
 	unsigned short val, val1;
@@ -1150,6 +1197,18 @@
 	snd_ac97_write_cache(ac97, reg, 0x8000);
 }
 
+/* check whether the volume is mono or stereo */
+static int snd_ac97_is_stereo_vol(ac97_t *ac97, int reg)
+{
+	unsigned short val, val1, val2;
+	val = snd_ac97_read(ac97, reg);
+	val1 = val | 0x8000 | (0x01 << 8);
+	snd_ac97_write(ac97, reg, val1);
+	val2 = snd_ac97_read(ac97, reg);
+	snd_ac97_write(ac97, reg, val); /* restore */
+	return val1 == val2;
+}
+
 static inline int printable(unsigned int x)
 {
 	x &= 0xff;
@@ -1178,6 +1237,9 @@
 	snd_kcontrol_t *kctl;
 	int stereo = 0;
 
+	if (! snd_ac97_valid_reg(ac97, reg))
+		return 0;
+
 	if (ac97->flags & AC97_STEREO_MUTES) {
 		/* check whether both mute bits work */
 		unsigned short val, val1;
@@ -1208,6 +1270,9 @@
 	int err;
 	snd_kcontrol_new_t tmp = AC97_DOUBLE(name, reg, 8, 0, (unsigned int)max, 1);
 	tmp.index = ac97->num;
+
+	if (! snd_ac97_valid_reg(ac97, reg))
+		return 0;
 	if ((err = snd_ctl_add(card, snd_ctl_new1(&tmp, ac97))) < 0)
 		return err;
 	snd_ac97_write_cache(ac97, reg,
@@ -1225,6 +1290,9 @@
 	char name[44];
 	unsigned char max;
 
+	if (! snd_ac97_valid_reg(ac97, reg))
+		return 0;
+
 	sprintf(name, "%s Switch", pfx);
 	if ((err = snd_ac97_cmute_new(card, name, reg, ac97)) < 0)
 		return err;
@@ -1239,6 +1307,8 @@
 }
 
 
+static unsigned int snd_ac97_determine_spdif_rates(ac97_t *ac97);
+
 static int snd_ac97_mixer_build(ac97_t * ac97)
 {
 	snd_card_t *card = ac97->bus->card;
@@ -1293,11 +1363,8 @@
 	}
 
 	/* build headphone controls */
-	if (snd_ac97_try_volume_mix(ac97, AC97_HEADPHONE) || ac97->id == AC97_ID_STAC9708) {
-		const char *name = ac97->id == AC97_ID_STAC9708 ? 
-			"Sigmatel Surround Playback" :
-			"Headphone Playback";
-		if ((err = snd_ac97_cmix_new(card, name, AC97_HEADPHONE, 1, ac97)) < 0)
+	if (snd_ac97_try_volume_mix(ac97, AC97_HEADPHONE)) {
+		if ((err = snd_ac97_cmix_new(card, "Headphone Playback", AC97_HEADPHONE, 1, ac97)) < 0)
 			return err;
 	}
 	
@@ -1332,7 +1399,8 @@
 		for (idx = 0; idx < 2; idx++)
 			if ((err = snd_ctl_add(card, snd_ac97_cnew(&snd_ac97_controls_pc_beep[idx], ac97))) < 0)
 				return err;
-		snd_ac97_write_cache(ac97, AC97_PC_BEEP, 0x801e);
+		snd_ac97_write_cache(ac97, AC97_PC_BEEP,
+				     snd_ac97_read(ac97, AC97_PC_BEEP) | 0x801e);
 	}
 	
 	/* build Phone controls */
@@ -1349,15 +1417,26 @@
 	
 	/* build MIC controls */
 	snd_ac97_change_volume_params3(ac97, AC97_MIC, &max);
-	for (idx = 0; idx < 3; idx++) {
-		if ((err = snd_ctl_add(card, kctl = snd_ac97_cnew(&snd_ac97_controls_mic[idx], ac97))) < 0)
+	if (snd_ac97_is_stereo_vol(ac97, AC97_MIC)) {
+		/* build stereo mic */
+		if ((err = snd_ac97_cmute_new(card, "Mic Playback Switch", AC97_MIC, ac97)) < 0)
+			return err;
+		if ((err = snd_ac97_cvol_new(card, "Mic Playback Volume", AC97_MIC, max, ac97)) < 0)
+			return err;
+		if ((err = snd_ctl_add(card, snd_ac97_cnew(&snd_ac97_controls_mic[2], ac97))) < 0)
 			return err;
-		if (idx == 1) {		// volume
-			kctl->private_value &= ~(0xff << 16);
-			kctl->private_value |= (int)max << 16;
+	} else {
+		/* build mono mic */
+		for (idx = 0; idx < 3; idx++) {
+			if ((err = snd_ctl_add(card, kctl = snd_ac97_cnew(&snd_ac97_controls_mic[idx], ac97))) < 0)
+				return err;
+			if (idx == 1) {		// volume
+				kctl->private_value &= ~(0xff << 16);
+				kctl->private_value |= (int)max << 16;
+			}
 		}
+		snd_ac97_write_cache(ac97, AC97_MIC, 0x8000 | max);
 	}
-	snd_ac97_write_cache(ac97, AC97_MIC, 0x8000 | max);
 
 	/* build Line controls */
 	if ((err = snd_ac97_cmix_new(card, "Line Playback", AC97_LINE, 0, ac97)) < 0)
@@ -1410,9 +1489,7 @@
 		if ((err = snd_ac97_cmute_new(card, "PCM Playback Switch", AC97_PCM, ac97)) < 0)
 			return err;
 		/* FIXME: C-Media chips have no PCM volume!! */
-		if (/*ac97->id == 0x434d4941 ||*/
-		    ac97->id == 0x434d4942 ||
-		    ac97->id == 0x434d4961)
+		if (ac97->id == AC97_ID_CM9739)
 			snd_ac97_write_cache(ac97, AC97_PCM, 0x9f1f);
 		else {
 			if ((err = snd_ac97_cvol_new(card, "PCM Playback Volume", AC97_PCM, 31, ac97)) < 0)
@@ -1520,6 +1597,7 @@
 			/* set default PCM S/PDIF params */
 			/* consumer,PCM audio,no copyright,no preemphasis,PCM coder,original,48000Hz */
 			snd_ac97_write_cache(ac97, AC97_SPDIF, 0x2a20);
+			ac97->rates[AC97_RATES_SPDIF] = snd_ac97_determine_spdif_rates(ac97);
 		}
 		ac97->spdif_status = SNDRV_PCM_DEFAULT_CON_SPDIF;
 	}
@@ -1675,7 +1753,7 @@
 		if (snd_ac97_read(ac97, AC97_REC_GAIN) == 0x8a05)
 			return 0;
 		set_current_state(TASK_UNINTERRUPTIBLE);
-		schedule_timeout(HZ/100);
+		schedule_timeout(1);
 	} while (time_after_eq(end_time, jiffies));
 	return -ENODEV;
 }
@@ -1683,45 +1761,47 @@
 /**
  * snd_ac97_bus - create an AC97 bus component
  * @card: the card instance
- * @_bus: the template of AC97 bus, callbacks and
- *         the private data.
+ * @num: the bus number
+ * @ops: the bus callbacks table
+ * @private_data: private data pointer for the new instance
  * @rbus: the pointer to store the new AC97 bus instance.
  *
  * Creates an AC97 bus component.  An ac97_bus_t instance is newly
- * allocated and initialized from the template (_bus).
+ * allocated and initialized.
  *
- * The template must include the valid callbacks (at least read and
- * write), the bus number (num), and the private data (private_data).
- * The other callbacks, wait and reset, are not mandatory.
+ * The ops table must include valid callbacks (at least read and
+ * write).  The other callbacks, wait and reset, are not mandatory.
  * 
  * The clock is set to 48000.  If another clock is needed, set
- * bus->clock manually.
+ * (*rbus)->clock manually.
  *
  * The AC97 bus instance is registered as a low-level device, so you don't
  * have to release it manually.
  *
  * Returns zero if successful, or a negative error code on failure.
  */
-int snd_ac97_bus(snd_card_t * card, ac97_bus_t * _bus, ac97_bus_t ** rbus)
+int snd_ac97_bus(snd_card_t *card, int num, ac97_bus_ops_t *ops,
+		 void *private_data, ac97_bus_t **rbus)
 {
 	int err;
 	ac97_bus_t *bus;
-	static snd_device_ops_t ops = {
+	static snd_device_ops_t dev_ops = {
 		.dev_free =	snd_ac97_bus_dev_free,
 	};
 
 	snd_assert(card != NULL, return -EINVAL);
-	snd_assert(_bus != NULL && rbus != NULL, return -EINVAL);
-	bus = snd_magic_kmalloc(ac97_bus_t, 0, GFP_KERNEL);
+	snd_assert(rbus != NULL, return -EINVAL);
+	bus = kcalloc(1, sizeof(*bus), GFP_KERNEL);
 	if (bus == NULL)
 		return -ENOMEM;
-	*bus = *_bus;
 	bus->card = card;
-	if (bus->clock == 0)
-		bus->clock = 48000;
+	bus->num = num;
+	bus->ops = ops;
+	bus->private_data = private_data;
+	bus->clock = 48000;
 	spin_lock_init(&bus->bus_lock);
 	snd_ac97_bus_proc_init(bus);
-	if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, bus, &ops)) < 0) {
+	if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, bus, &dev_ops)) < 0) {
 		snd_ac97_bus_free(bus);
 		return err;
 	}
@@ -1732,25 +1812,23 @@
 /**
  * snd_ac97_mixer - create an Codec97 component
  * @bus: the AC97 bus which codec is attached to
- * @_ac97: the template of ac97, including index, callbacks and
+ * @template: the template of ac97, including index, callbacks and
  *         the private data.
  * @rac97: the pointer to store the new ac97 instance.
  *
  * Creates an Codec97 component.  An ac97_t instance is newly
- * allocated and initialized from the template (_ac97).  The codec
+ * allocated and initialized from the template.  The codec
  * is then initialized by the standard procedure.
  *
- * The template must include the valid callbacks (at least read and
- * write), the codec number (num) and address (addr), and the private
- * data (private_data).  The other callbacks, wait and reset, are not
- * mandatory.
+ * The template must include the codec number (num) and address (addr),
+ * and the private data (private_data).
  * 
  * The ac97 instance is registered as a low-level device, so you don't
  * have to release it manually.
  *
  * Returns zero if successful, or a negative error code on failure.
  */
-int snd_ac97_mixer(ac97_bus_t * bus, ac97_t * _ac97, ac97_t ** rac97)
+int snd_ac97_mixer(ac97_bus_t *bus, ac97_template_t *template, ac97_t **rac97)
 {
 	int err;
 	ac97_t *ac97;
@@ -1764,33 +1842,63 @@
 
 	snd_assert(rac97 != NULL, return -EINVAL);
 	*rac97 = NULL;
-	snd_assert(bus != NULL && _ac97 != NULL, return -EINVAL);
-	snd_assert(_ac97->num < 4 && bus->codec[_ac97->num] == NULL, return -EINVAL);
+	snd_assert(bus != NULL && template != NULL, return -EINVAL);
+	snd_assert(template->num < 4 && bus->codec[template->num] == NULL, return -EINVAL);
+
+	snd_assert(bus->shared_type <= AC97_SHARED_TYPES, return -EINVAL);
+	if (bus->shared_type) {
+		/* already shared? */
+		down(&shared_codec_mutex);
+		ac97 = shared_codec[bus->shared_type-1][template->num];
+		if (ac97) {
+			if ((ac97_is_audio(ac97) && (template->scaps & AC97_SCAP_SKIP_AUDIO)) ||
+			    (ac97_is_modem(ac97) && (template->scaps & AC97_SCAP_SKIP_MODEM))) {
+				up(&shared_codec_mutex);
+				return -EACCES; /* skip this */
+			}
+		}
+		up(&shared_codec_mutex);
+	}
+
 	card = bus->card;
-	ac97 = snd_magic_kmalloc(ac97_t, 0, GFP_KERNEL);
+	ac97 = kcalloc(1, sizeof(*ac97), GFP_KERNEL);
 	if (ac97 == NULL)
 		return -ENOMEM;
-	*ac97 = *_ac97;
+	ac97->private_data = template->private_data;
+	ac97->private_free = template->private_free;
 	ac97->bus = bus;
+	ac97->pci = template->pci;
+	ac97->num = template->num;
+	ac97->addr = template->addr;
+	ac97->scaps = template->scaps;
+	ac97->limited_regs = template->limited_regs;
+	memcpy(ac97->reg_accessed, template->reg_accessed, sizeof(ac97->reg_accessed));
 	bus->codec[ac97->num] = ac97;
 	spin_lock_init(&ac97->reg_lock);
+	init_MUTEX(&ac97->mutex);
 
 	if (ac97->pci) {
 		pci_read_config_word(ac97->pci, PCI_SUBSYSTEM_VENDOR_ID, &ac97->subsystem_vendor);
 		pci_read_config_word(ac97->pci, PCI_SUBSYSTEM_ID, &ac97->subsystem_device);
 	}
-	if (bus->reset) {
-		bus->reset(ac97);
+	if (bus->ops->reset) {
+		bus->ops->reset(ac97);
 		goto __access_ok;
 	}
 
 	snd_ac97_write(ac97, AC97_RESET, 0);	/* reset to defaults */
-	if (bus->wait)
-		bus->wait(ac97);
+	if (bus->ops->wait)
+		bus->ops->wait(ac97);
 	else {
 		udelay(50);
-		if (ac97_reset_wait(ac97, HZ/2, 0) < 0 &&
-		    ac97_reset_wait(ac97, HZ/2, 1) < 0) {
+		if (ac97->scaps & AC97_SCAP_SKIP_AUDIO)
+			err = ac97_reset_wait(ac97, HZ/2, 1);
+		else {
+			err = ac97_reset_wait(ac97, HZ/2, 0);
+			if (err < 0)
+				err = ac97_reset_wait(ac97, 0, 1);
+		}
+		if (err < 0) {
 			snd_printk(KERN_WARNING "AC'97 %d does not respond - RESET\n", ac97->num);
 			/* proceed anyway - it's often non-critical */
 		}
@@ -1803,20 +1911,6 @@
 		snd_ac97_free(ac97);
 		return -EIO;
 	}
-	/* AC97 audio codec chip revision detection. */
-	/* Currently only Realtek ALC650 detection implemented. */
-	switch(ac97->id & 0xfffffff0) {
-	case 0x414c4720:        /* ALC650 */
-		reg = snd_ac97_read(ac97, AC97_ALC650_REVISION);
-		if (((reg & 0x3f) >= 0) && ((reg & 0x3f) < 3))
-			ac97->id = 0x414c4720;          /* Old version */
-		else if (((reg & 0x3f) >= 3) && ((reg & 0x3f) < 0x10))
-			ac97->id = 0x414c4721;          /* D version */
-		else if ((reg&0x30) == 0x10)
-			ac97->id = 0x414c4722;          /* E version */
-		else if ((reg&0x30) == 0x20)
-			ac97->id = 0x414c4723;          /* F version */
-        }
 	
 	/* test for AC'97 */
 	if (!(ac97->scaps & AC97_SCAP_SKIP_AUDIO) && !(ac97->scaps & AC97_SCAP_AUDIO)) {
@@ -1848,7 +1942,7 @@
 		return -EACCES;
 	}
 
-	if (bus->reset) // FIXME: always skipping?
+	if (bus->ops->reset) // FIXME: always skipping?
 		goto __ready_ok;
 
 	/* FIXME: add powerdown control */
@@ -1865,9 +1959,9 @@
 			if ((snd_ac97_read(ac97, AC97_POWERDOWN) & 0x0f) == 0x0f)
 				goto __ready_ok;
 			set_current_state(TASK_UNINTERRUPTIBLE);
-			schedule_timeout(HZ/10);
+			schedule_timeout(1);
 		} while (time_after_eq(end_time, jiffies));
-		snd_printk(KERN_ERR "AC'97 %d analog subsections not ready\n", ac97->num);
+		snd_printk(KERN_WARNING "AC'97 %d analog subsections not ready\n", ac97->num);
 	}
 
 	/* FIXME: add powerdown control */
@@ -1898,9 +1992,9 @@
 			if ((snd_ac97_read(ac97, AC97_EXTENDED_MSTATUS) & tmp) == tmp)
 				goto __ready_ok;
 			set_current_state(TASK_UNINTERRUPTIBLE);
-			schedule_timeout(HZ/10);
+			schedule_timeout(1);
 		} while (time_after_eq(end_time, jiffies));
-		snd_printk(KERN_ERR "MC'97 %d converters and GPIO not ready (0x%x)\n", ac97->num, snd_ac97_read(ac97, AC97_EXTENDED_MSTATUS));
+		snd_printk(KERN_WARNING "MC'97 %d converters and GPIO not ready (0x%x)\n", ac97->num, snd_ac97_read(ac97, AC97_EXTENDED_MSTATUS));
 	}
 	
       __ready_ok:
@@ -1919,12 +2013,7 @@
 	}
 	if (ac97->ext_id & AC97_EI_SPDIF) {
 		/* codec specific code (patch) should override these values */
-		if (ac97->flags & AC97_CS_SPDIF)
-			ac97->rates[AC97_RATES_SPDIF] = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_44100;
-		else if (ac97->id == AC97_ID_CM9739)
-			ac97->rates[AC97_RATES_SPDIF] = SNDRV_PCM_RATE_48000;
-		else
-			ac97->rates[AC97_RATES_SPDIF] = snd_ac97_determine_spdif_rates(ac97);
+		ac97->rates[AC97_RATES_SPDIF] = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_32000;
 	}
 	if (ac97->ext_id & AC97_EI_VRM) {	/* MIC VRA support */
 		snd_ac97_determine_rates(ac97, AC97_PCM_MIC_ADC_RATE, 0, &ac97->rates[AC97_RATES_MIC_ADC]);
@@ -1940,10 +2029,10 @@
 		ac97->scaps |= AC97_SCAP_CENTER_LFE_DAC;
 	}
 	/* additional initializations */
-	if (bus->init)
-		bus->init(ac97);
-	snd_ac97_get_name(ac97, ac97->id, name, 0);
-	snd_ac97_get_name(NULL, ac97->id, name, 0);  // ac97->id might be changed in the special setup code
+	if (bus->ops->init)
+		bus->ops->init(ac97);
+	snd_ac97_get_name(ac97, ac97->id, name, !ac97_is_audio(ac97));
+	snd_ac97_get_name(NULL, ac97->id, name, !ac97_is_audio(ac97));  // ac97->id might be changed in the special setup code
 	if (ac97_is_audio(ac97)) {
 		if (card->mixername[0] == '\0') {
 			strcpy(card->mixername, name);
@@ -1995,6 +2084,13 @@
 		return err;
 	}
 	*rac97 = ac97;
+
+	if (bus->shared_type) {
+		down(&shared_codec_mutex);
+		shared_codec[bus->shared_type-1][ac97->num] = ac97;
+		up(&shared_codec_mutex);
+	}
+
 	return 0;
 }
 
@@ -2054,8 +2150,8 @@
 {
 	int i, is_ad18xx, codec;
 
-	if (ac97->bus->reset) {
-		ac97->bus->reset(ac97);
+	if (ac97->bus->ops->reset) {
+		ac97->bus->ops->reset(ac97);
 		goto  __reset_ready;
 	}
 
@@ -2066,23 +2162,33 @@
 	snd_ac97_write(ac97, AC97_GENERAL_PURPOSE, 0);
 
 	snd_ac97_write(ac97, AC97_POWERDOWN, ac97->regs[AC97_POWERDOWN]);
-	ac97->bus->write(ac97, AC97_MASTER, 0x8101);
-	for (i = 0; i < 10; i++) {
-		if (snd_ac97_read(ac97, AC97_MASTER) == 0x8101)
-			break;
-		set_current_state(TASK_UNINTERRUPTIBLE);
-		schedule_timeout(1);
-	}
-	/* FIXME: extra delay */
-	ac97->bus->write(ac97, AC97_MASTER, 0x8000);
-	if (snd_ac97_read(ac97, AC97_MASTER) != 0x8000) {
-		set_current_state(TASK_UNINTERRUPTIBLE);
-		schedule_timeout(HZ/4);
+	if (ac97_is_audio(ac97)) {
+		ac97->bus->ops->write(ac97, AC97_MASTER, 0x8101);
+		for (i = HZ/10; i >= 0; i--) {
+			if (snd_ac97_read(ac97, AC97_MASTER) == 0x8101)
+				break;
+			set_current_state(TASK_UNINTERRUPTIBLE);
+			schedule_timeout(1);
+		}
+		/* FIXME: extra delay */
+		ac97->bus->ops->write(ac97, AC97_MASTER, 0x8000);
+		if (snd_ac97_read(ac97, AC97_MASTER) != 0x8000) {
+			set_current_state(TASK_UNINTERRUPTIBLE);
+			schedule_timeout(HZ/4);
+		}
+	} else {
+		for (i = HZ/10; i >= 0; i--) {
+			unsigned short val = snd_ac97_read(ac97, AC97_EXTENDED_MID);
+			if (val != 0xffff && (val & 1) != 0)
+				break;
+			set_current_state(TASK_UNINTERRUPTIBLE);
+			schedule_timeout(1);
+		}
 	}
 __reset_ready:
 
-	if (ac97->bus->init)
-		ac97->bus->init(ac97);
+	if (ac97->bus->ops->init)
+		ac97->bus->ops->init(ac97);
 
 	is_ad18xx = (ac97->flags & AC97_AD_MULTI);
 	if (is_ad18xx) {
@@ -2093,7 +2199,7 @@
 			/* select single codec */
 			snd_ac97_update_bits(ac97, AC97_AD_SERIAL_CFG, 0x7000,
 					     ac97->spec.ad18xx.unchained[codec] | ac97->spec.ad18xx.chained[codec]);
-			ac97->bus->write(ac97, AC97_AD_CODEC_CFG, ac97->spec.ad18xx.codec_cfg[codec]);
+			ac97->bus->ops->write(ac97, AC97_AD_CODEC_CFG, ac97->spec.ad18xx.codec_cfg[codec]);
 		}
 		/* select all codecs */
 		snd_ac97_update_bits(ac97, AC97_AD_SERIAL_CFG, 0x7000, 0x7000);
@@ -2118,7 +2224,7 @@
 						snd_ac97_update_bits(ac97, AC97_AD_SERIAL_CFG, 0x7000,
 								     ac97->spec.ad18xx.unchained[codec] | ac97->spec.ad18xx.chained[codec]);
 						/* update PCM bits */
-						ac97->bus->write(ac97, AC97_PCM, ac97->spec.ad18xx.pcmreg[codec]);
+						ac97->bus->ops->write(ac97, AC97_PCM, ac97->spec.ad18xx.pcmreg[codec]);
 					}
 					/* select all codecs */
 					snd_ac97_update_bits(ac97, AC97_AD_SERIAL_CFG, 0x7000, 0x7000);
@@ -2151,42 +2257,57 @@
 
 /*
  */
-int snd_ac97_remove_ctl(ac97_t *ac97, const char *name)
+static void set_ctl_name(char *dst, const char *src, const char *suffix)
+{
+	if (suffix)
+		sprintf(dst, "%s %s", src, suffix);
+	else
+		strcpy(dst, src);
+}	
+
+int snd_ac97_remove_ctl(ac97_t *ac97, const char *name, const char *suffix)
 {
 	snd_ctl_elem_id_t id;
 	memset(&id, 0, sizeof(id));
-	strcpy(id.name, name);
+	set_ctl_name(id.name, name, suffix);
 	id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
 	return snd_ctl_remove_id(ac97->bus->card, &id);
 }
 
-static snd_kcontrol_t *ctl_find(ac97_t *ac97, const char *name)
+static snd_kcontrol_t *ctl_find(ac97_t *ac97, const char *name, const char *suffix)
 {
 	snd_ctl_elem_id_t sid;
 	memset(&sid, 0, sizeof(sid));
-	strcpy(sid.name, name);
+	set_ctl_name(sid.name, name, suffix);
 	sid.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
 	return snd_ctl_find_id(ac97->bus->card, &sid);
 }
 
-int snd_ac97_rename_ctl(ac97_t *ac97, const char *src, const char *dst)
+int snd_ac97_rename_ctl(ac97_t *ac97, const char *src, const char *dst, const char *suffix)
 {
-	snd_kcontrol_t *kctl = ctl_find(ac97, src);
+	snd_kcontrol_t *kctl = ctl_find(ac97, src, suffix);
 	if (kctl) {
-		strcpy(kctl->id.name, dst);
+		set_ctl_name(kctl->id.name, dst, suffix);
 		return 0;
 	}
 	return -ENOENT;
 }
 
-int snd_ac97_swap_ctl(ac97_t *ac97, const char *s1, const char *s2)
+/* rename both Volume and Switch controls - don't check the return value */
+void snd_ac97_rename_vol_ctl(ac97_t *ac97, const char *src, const char *dst)
+{
+	snd_ac97_rename_ctl(ac97, src, dst, "Switch");
+	snd_ac97_rename_ctl(ac97, src, dst, "Volume");
+}
+
+int snd_ac97_swap_ctl(ac97_t *ac97, const char *s1, const char *s2, const char *suffix)
 {
 	snd_kcontrol_t *kctl1, *kctl2;
-	kctl1 = ctl_find(ac97, s1);
-	kctl2 = ctl_find(ac97, s2);
+	kctl1 = ctl_find(ac97, s1, suffix);
+	kctl2 = ctl_find(ac97, s2, suffix);
 	if (kctl1 && kctl2) {
-		strcpy(kctl1->id.name, s2);
-		strcpy(kctl2->id.name, s1);
+		set_ctl_name(kctl1->id.name, s2, suffix);
+		set_ctl_name(kctl2->id.name, s1, suffix);
 		return 0;
 	}
 	return -ENOENT;
@@ -2194,26 +2315,22 @@
 
 static int swap_headphone(ac97_t *ac97, int remove_master)
 {
-	/* FIXME: error checks.. */
 	if (remove_master) {
-		if (ctl_find(ac97, "Headphone Playback Switch") == NULL)
+		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 {
-		snd_ac97_rename_ctl(ac97, "Master Playback Switch", "Line-Out Playback Switch");
-		snd_ac97_rename_ctl(ac97, "Master Playback Volume", "Line-Out Playback Volume");
-	}
-	snd_ac97_rename_ctl(ac97, "Headphone Playback Switch", "Master Playback Switch");
-	snd_ac97_rename_ctl(ac97, "Headphone Playback Volume", "Master Playback Volume");
+		snd_ac97_remove_ctl(ac97, "Master Playback", "Switch");
+		snd_ac97_remove_ctl(ac97, "Master Playback", "Volume");
+	} else
+		snd_ac97_rename_vol_ctl(ac97, "Master Playback", "Line-Out Playback");
+	snd_ac97_rename_vol_ctl(ac97, "Headphone Playback", "Master Playback");
 	return 0;
 }
 
 static int swap_surround(ac97_t *ac97)
 {
 	/* FIXME: error checks.. */
-	snd_ac97_swap_ctl(ac97, "Master Playback Switch", "Surround Playback Switch");
-	snd_ac97_swap_ctl(ac97, "Master Playback Volume", "Surround Playback Volume");
+	snd_ac97_swap_ctl(ac97, "Master Playback", "Surround Playback", "Switch");
+	snd_ac97_swap_ctl(ac97, "Master Playback", "Surround Playback", "Volume");
 	return 0;
 }
 
diff -Nru a/sound/pci/ac97/ac97_id.h b/sound/pci/ac97/ac97_id.h
--- a/sound/pci/ac97/ac97_id.h	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/ac97/ac97_id.h	2004-08-04 17:48:49 -07:00
@@ -45,7 +45,14 @@
 #define AC97_ID_CS4201		0x43525948
 #define AC97_ID_CS4205		0x43525958
 #define AC97_ID_CS_MASK		0xfffffff8	/* bit 0-2: rev */
+#define AC97_ID_ALC100		0x414c4300
 #define AC97_ID_ALC650		0x414c4720
+#define AC97_ID_ALC650D		0x414c4721
+#define AC97_ID_ALC650E		0x414c4722
+#define AC97_ID_ALC650F		0x414c4723
+#define AC97_ID_ALC655		0x414c4760
+#define AC97_ID_ALC658		0x414c4780
+#define AC97_ID_ALC850		0x414c4790
 #define AC97_ID_YMF753		0x594d4803
 #define AC97_ID_VT1616		0x49434551
 #define AC97_ID_CM9738		0x434d4941
diff -Nru a/sound/pci/ac97/ac97_local.h b/sound/pci/ac97/ac97_local.h
--- a/sound/pci/ac97/ac97_local.h	2004-08-04 17:48:48 -07:00
+++ b/sound/pci/ac97/ac97_local.h	2004-08-04 17:48:48 -07:00
@@ -23,10 +23,15 @@
  */
 
 #define AC97_SINGLE_VALUE(reg,shift,mask,invert) ((reg) | ((shift) << 8) | ((mask) << 16) | ((invert) << 24))
+#define AC97_PAGE_SINGLE_VALUE(reg,shift,mask,invert,page) ((reg) | ((shift) << 8) | ((mask) << 16) | ((invert) << 24) | ((page) << 25))
 #define AC97_SINGLE(xname, reg, shift, mask, invert) \
 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .info = snd_ac97_info_single, \
   .get = snd_ac97_get_single, .put = snd_ac97_put_single, \
   .private_value =  AC97_SINGLE_VALUE(reg, shift, mask, invert) }
+#define AC97_PAGE_SINGLE(xname, reg, shift, mask, invert, page)		\
+{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .info = snd_ac97_info_single, \
+  .get = snd_ac97_page_get_single, .put = snd_ac97_page_put_single, \
+  .private_value =  AC97_PAGE_SINGLE_VALUE(reg, shift, mask, invert, page) }
 
 /* ac97_codec.c */
 extern const char *snd_ac97_stereo_enhancements[];
@@ -37,10 +42,13 @@
 int snd_ac97_info_single(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo);
 int snd_ac97_get_single(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol);
 int snd_ac97_put_single(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol);
+int snd_ac97_page_get_single(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol);
+int snd_ac97_page_put_single(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol);
 int snd_ac97_try_bit(ac97_t * ac97, int reg, int bit);
-int snd_ac97_remove_ctl(ac97_t *ac97, const char *name);
-int snd_ac97_rename_ctl(ac97_t *ac97, const char *src, const char *dst);
-int snd_ac97_swap_ctl(ac97_t *ac97, const char *s1, const char *s2);
+int snd_ac97_remove_ctl(ac97_t *ac97, const char *name, const char *suffix);
+int snd_ac97_rename_ctl(ac97_t *ac97, const char *src, const char *dst, const char *suffix);
+int snd_ac97_swap_ctl(ac97_t *ac97, const char *s1, const char *s2, const char *suffix);
+void snd_ac97_rename_vol_ctl(ac97_t *ac97, const char *src, const char *dst);
 
 /* ac97_proc.c */
 void snd_ac97_bus_proc_init(ac97_bus_t * ac97);
diff -Nru a/sound/pci/ac97/ac97_patch.c b/sound/pci/ac97/ac97_patch.c
--- a/sound/pci/ac97/ac97_patch.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/ac97/ac97_patch.c	2004-08-04 17:48:49 -07:00
@@ -35,8 +35,6 @@
 #include "ac97_id.h"
 #include "ac97_local.h"
 
-#define chip_t ac97_t
-
 /*
  *  Chip specific initialization
  */
@@ -51,6 +49,21 @@
 	return 0;
 }
 
+/* set to the page, update bits and restore the page */
+static int ac97_update_bits_page(ac97_t *ac97, unsigned short reg, unsigned short mask, unsigned short value, unsigned short page)
+{
+	unsigned short page_save;
+	int ret;
+
+	down(&ac97->mutex);
+	page_save = snd_ac97_read(ac97, AC97_INT_PAGING) & AC97_PAGE_MASK;
+	snd_ac97_update_bits(ac97, AC97_INT_PAGING, AC97_PAGE_MASK, page);
+	ret = snd_ac97_update_bits(ac97, reg, mask, value);
+	snd_ac97_update_bits(ac97, AC97_INT_PAGING, AC97_PAGE_MASK, page_save);
+	up(&ac97->mutex); /* unlock paging */
+	return ret;
+}
+
 /* The following snd_ac97_ymf753_... items added by David Shust (dshust@shustring.com) */
 
 /* It is possible to indicate to the Yamaha YMF753 the type of speakers being used. */
@@ -204,7 +217,7 @@
 	if ((err = snd_ctl_add(ac97->bus->card, kctl = snd_ac97_cnew(&snd_ac97_controls_3d[0], ac97))) < 0)
 		return err;
 	strcpy(kctl->id.name, "3D Control - Wide");
-	kctl->private_value = AC97_3D_CONTROL | (9 << 8) | (7 << 16);
+	kctl->private_value = AC97_SINGLE_VALUE(AC97_3D_CONTROL, 9, 7, 0);
 	snd_ac97_write_cache(ac97, AC97_3D_CONTROL, 0x0000);
 	if ((err = snd_ctl_add(ac97->bus->card, snd_ac97_cnew(&snd_ac97_ymf753_controls_speaker, ac97))) < 0)
 		return err;
@@ -315,7 +328,7 @@
 	if ((err = snd_ctl_add(ac97->bus->card, kctl = snd_ac97_cnew(&snd_ac97_controls_3d[0], ac97))) < 0)
 		return err;
 	strcpy(kctl->id.name, "3D Control Sigmatel - Depth");
-	kctl->private_value = AC97_3D_CONTROL | (3 << 16);
+	kctl->private_value = AC97_SINGLE_VALUE(AC97_3D_CONTROL, 2, 3, 0);
 	snd_ac97_write_cache(ac97, AC97_3D_CONTROL, 0x0000);
 	return 0;
 }
@@ -328,11 +341,11 @@
 	if ((err = snd_ctl_add(ac97->bus->card, kctl = snd_ac97_cnew(&snd_ac97_controls_3d[0], ac97))) < 0)
 		return err;
 	strcpy(kctl->id.name, "3D Control Sigmatel - Depth");
-	kctl->private_value = AC97_3D_CONTROL | (3 << 16);
+	kctl->private_value = AC97_SINGLE_VALUE(AC97_3D_CONTROL, 0, 3, 0);
 	if ((err = snd_ctl_add(ac97->bus->card, kctl = snd_ac97_cnew(&snd_ac97_controls_3d[0], ac97))) < 0)
 		return err;
 	strcpy(kctl->id.name, "3D Control Sigmatel - Rear Depth");
-	kctl->private_value = AC97_3D_CONTROL | (2 << 8) | (3 << 16);
+	kctl->private_value = AC97_SINGLE_VALUE(AC97_3D_CONTROL, 2, 3, 0);
 	snd_ac97_write_cache(ac97, AC97_3D_CONTROL, 0x0000);
 	return 0;
 }
@@ -373,22 +386,29 @@
 	.build_specific	= patch_sigmatel_stac97xx_specific
 };
 
-static struct snd_ac97_build_ops patch_sigmatel_stac9708_ops = {
-	.build_3d	= patch_sigmatel_stac9708_3d,
-	.build_specific	= patch_sigmatel_stac97xx_specific
-};
-
 int patch_sigmatel_stac9700(ac97_t * ac97)
 {
 	ac97->build_ops = &patch_sigmatel_stac9700_ops;
 	return 0;
 }
 
+static int patch_sigmatel_stac9708_specific(ac97_t *ac97)
+{
+	snd_ac97_rename_vol_ctl(ac97, "Headphone Playback", "Sigmatel Surround Playback");
+	return patch_sigmatel_stac97xx_specific(ac97);
+}
+
+static struct snd_ac97_build_ops patch_sigmatel_stac9708_ops = {
+	.build_3d	= patch_sigmatel_stac9708_3d,
+	.build_specific	= patch_sigmatel_stac9708_specific
+};
+
 int patch_sigmatel_stac9708(ac97_t * ac97)
 {
 	unsigned int codec72, codec6c;
 
 	ac97->build_ops = &patch_sigmatel_stac9708_ops;
+	ac97->caps |= 0x10;	/* HP (sigmatel surround) support */
 
 	codec72 = snd_ac97_read(ac97, AC97_SIGMATEL_BIAS2) & 0x8000;
 	codec6c = snd_ac97_read(ac97, AC97_SIGMATEL_ANALOG);
@@ -467,11 +487,11 @@
 	int shift = kcontrol->private_value;
 	unsigned short val;
 
-	val = ac97->regs[AC97_SIGMATEL_OUTSEL];
-	if (!((val >> shift) & 4))
+	val = ac97->regs[AC97_SIGMATEL_OUTSEL] >> shift;
+	if (!(val & 4))
 		ucontrol->value.enumerated.item[0] = 0;
 	else
-		ucontrol->value.enumerated.item[0] = 1 + ((val >> shift) & 3);
+		ucontrol->value.enumerated.item[0] = 1 + (val & 3);
 	return 0;
 }
 
@@ -487,8 +507,8 @@
 		val = 0;
 	else
 		val = 4 | (ucontrol->value.enumerated.item[0] - 1);
-	return snd_ac97_update_bits(ac97, AC97_SIGMATEL_OUTSEL,
-				    7 << shift, val << shift);
+	return ac97_update_bits_page(ac97, AC97_SIGMATEL_OUTSEL,
+				     7 << shift, val << shift, 0);
 }
 
 static int snd_ac97_stac9758_input_jack_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo)
@@ -521,8 +541,8 @@
 	ac97_t *ac97 = snd_kcontrol_chip(kcontrol);
 	int shift = kcontrol->private_value;
 
-	return snd_ac97_update_bits(ac97, AC97_SIGMATEL_INSEL, 7 << shift,
-				    ucontrol->value.enumerated.item[0] << shift);
+	return ac97_update_bits_page(ac97, AC97_SIGMATEL_INSEL, 7 << shift,
+				     ucontrol->value.enumerated.item[0] << shift, 0);
 }
 
 static int snd_ac97_stac9758_phonesel_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo)
@@ -550,8 +570,8 @@
 {
 	ac97_t *ac97 = snd_kcontrol_chip(kcontrol);
 
-	return snd_ac97_update_bits(ac97, AC97_SIGMATEL_IOMISC, 3,
-				    ucontrol->value.enumerated.item[0]);
+	return ac97_update_bits_page(ac97, AC97_SIGMATEL_IOMISC, 3,
+				     ucontrol->value.enumerated.item[0], 0);
 }
 
 #define STAC9758_OUTPUT_JACK(xname, shift) \
@@ -596,6 +616,14 @@
 				   ARRAY_SIZE(snd_ac97_sigmatel_stac9758_controls));
 	if (err < 0)
 		return err;
+	/* DAC-A direct */
+	snd_ac97_rename_vol_ctl(ac97, "Headphone Playback", "Front Playback");
+	/* DAC-A to Mix = PCM */
+	/* DAC-B direct = Surround */
+	/* DAC-B to Mix */
+	snd_ac97_rename_vol_ctl(ac97, "Video Playback", "Surround Mix Playback");
+	/* DAC-C direct = Center/LFE */
+
 	return 0;
 }
 
@@ -613,16 +641,16 @@
 		AC97_SIGMATEL_VARIOUS
 	};
 	static unsigned short def_regs[4] = {
-		/* OUTSEL */ 0xd794,
+		/* OUTSEL */ 0xd794, /* CL:CL, SR:SR, LO:MX, LI:DS, MI:DS */
 		/* IOMISC */ 0x2001,
-		/* INSEL */ 0x0201,
+		/* INSEL */ 0x0201, /* LI:LI, MI:M1 */
 		/* VARIOUS */ 0x0040
 	};
 	static unsigned short m675_regs[4] = {
-		/* OUTSEL */ 0x9040,
-		/* IOMISC */ 0x2102,
-		/* INSEL */ 0x0203,
-		/* VARIOUS */ 0x0041
+		/* OUTSEL */ 0xfc70, /* CL:MX, SR:MX, LO:DS, LI:MX, MI:DS */
+		/* IOMISC */ 0x2102, /* HP amp on */
+		/* INSEL */ 0x0203, /* LI:LI, MI:FR */
+		/* VARIOUS */ 0x0041 /* stereo mic */
 	};
 	unsigned short *pregs = def_regs;
 	int i;
@@ -635,6 +663,8 @@
 
 	// patch for SigmaTel
 	ac97->build_ops = &patch_sigmatel_stac9758_ops;
+	/* FIXME: assume only page 0 for writing cache */
+	snd_ac97_update_bits(ac97, AC97_INT_PAGING, AC97_PAGE_MASK, AC97_PAGE_VENDOR);
 	for (i = 0; i < 4; i++)
 		snd_ac97_write_cache(ac97, regs[i], pregs[i]);
 
@@ -654,8 +684,10 @@
 {
 	int err;
 
+	/* con mask, pro mask, default */
 	if ((err = patch_build_controls(ac97, &snd_ac97_controls_spdif[0], 3)) < 0)
 		return err;
+	/* switch, spsa */
 	if ((err = patch_build_controls(ac97, &snd_ac97_cirrus_controls_spdif[0], 1)) < 0)
 		return err;
 	switch (ac97->id & AC97_ID_CS_MASK) {
@@ -714,8 +746,10 @@
 {
 	int err;
 
+	/* con mask, pro mask, default */
 	if ((err = patch_build_controls(ac97, &snd_ac97_controls_spdif[0], 3)) < 0)
 		return err;
+	/* switch */
 	if ((err = patch_build_controls(ac97, &snd_ac97_conexant_controls_spdif[0], 1)) < 0)
 		return err;
 	/* set default PCM S/PDIF params */
@@ -734,6 +768,7 @@
 	ac97->build_ops = &patch_conexant_ops;
 	ac97->flags |= AC97_CX_SPDIF;
         ac97->ext_id |= AC97_EI_SPDIF;	/* force the detection of spdif */
+	ac97->rates[AC97_RATES_SPDIF] = SNDRV_PCM_RATE_48000; /* 48k only */
 	return 0;
 }
 
@@ -821,8 +856,6 @@
 	unsigned short val;
 	int idx, num;
 
-	init_MUTEX(&ac97->spec.ad18xx.mutex);
-
 	val = snd_ac97_read(ac97, AC97_AD_SERIAL_CFG);
 	snd_ac97_write_cache(ac97, AC97_AD_SERIAL_CFG, val);
 	codecs[0] = patch_ad1881_unchained(ac97, 0, (1<<12));
@@ -1114,10 +1147,8 @@
 static int patch_ad1888_specific(ac97_t *ac97)
 {
 	/* rename 0x04 as "Master" and 0x02 as "Master Surround" */
-	snd_ac97_rename_ctl(ac97, "Master Playback Switch", "Master Surround Playback Switch");
-	snd_ac97_rename_ctl(ac97, "Master Playback Volume", "Master Surround Playback Volume");
-	snd_ac97_rename_ctl(ac97, "Headphone Playback Switch", "Master Playback Switch");
-	snd_ac97_rename_ctl(ac97, "Headphone Playback Volume", "Master Playback Volume");
+	snd_ac97_rename_vol_ctl(ac97, "Master Playback", "Master Surround Playback");
+	snd_ac97_rename_vol_ctl(ac97, "Headphone Playback", "Master Playback");
 	return patch_build_controls(ac97, snd_ac97_ad1888_controls, ARRAY_SIZE(snd_ac97_ad1888_controls));
 }
 
@@ -1213,7 +1244,7 @@
 }
 
 /*
- * realtek ALC65x codecs
+ * realtek ALC65x/850 codecs
  */
 static int snd_ac97_alc650_mic_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
@@ -1303,6 +1334,17 @@
 
 	ac97->build_ops = &patch_alc650_ops;
 
+	/* determine the revision */
+	val = snd_ac97_read(ac97, AC97_ALC650_REVISION) & 0x3f;
+	if (val < 3)
+		ac97->id = 0x414c4720;          /* Old version */
+	else if (val < 0x10)
+		ac97->id = 0x414c4721;          /* D version */
+	else if (val < 0x20)
+		ac97->id = 0x414c4722;          /* E version */
+	else if (val < 0x30)
+		ac97->id = 0x414c4723;          /* F version */
+
 	/* revision E or F */
 	/* FIXME: what about revision D ? */
 	ac97->spec.dev_flags = (ac97->id == 0x414c4722 ||
@@ -1351,20 +1393,19 @@
 static int snd_ac97_alc655_mic_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
         ac97_t *ac97 = snd_kcontrol_chip(kcontrol);
-        int change;
 
 	/* misc control; vrefout disable */
 	snd_ac97_update_bits(ac97, AC97_ALC650_CLOCK, 1 << 12,
 			     ucontrol->value.integer.value[0] ? (1 << 12) : 0);
-	change = snd_ac97_update_bits(ac97, AC97_ALC650_MULTICH, 1 << 10,
-				      ucontrol->value.integer.value[0] ? (1 << 10) : 0);
-	return change;
+	return ac97_update_bits_page(ac97, AC97_ALC650_MULTICH, 1 << 10,
+				     ucontrol->value.integer.value[0] ? (1 << 10) : 0,
+				     0);
 }
 
 
 static const snd_kcontrol_new_t snd_ac97_controls_alc655[] = {
-	AC97_SINGLE("Duplicate Front", AC97_ALC650_MULTICH, 0, 1, 0),
-	AC97_SINGLE("Line-In As Surround", AC97_ALC650_MULTICH, 9, 1, 0),
+	AC97_PAGE_SINGLE("Duplicate Front", AC97_ALC650_MULTICH, 0, 1, 0, 0),
+	AC97_PAGE_SINGLE("Line-In As Surround", AC97_ALC650_MULTICH, 9, 1, 0, 0),
 	{
 		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
 		.name = "Mic As Center/LFE",
@@ -1391,7 +1432,6 @@
 	       texts_658[uinfo->value.enumerated.item] :
 	       texts_655[uinfo->value.enumerated.item]);
 	return 0;
-
 }
 
 static int alc655_iec958_route_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
@@ -1410,13 +1450,15 @@
 static int alc655_iec958_route_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
 {
 	ac97_t *ac97 = snd_kcontrol_chip(kcontrol);
-	return snd_ac97_update_bits(ac97, AC97_ALC650_MULTICH, 3 << 12,
-				    (unsigned short)ucontrol->value.enumerated.item[0]);
+
+	return ac97_update_bits_page(ac97, AC97_ALC650_MULTICH, 3 << 12,
+				     (unsigned short)ucontrol->value.enumerated.item[0],
+				     0);
 }
 
 static const snd_kcontrol_new_t snd_ac97_spdif_controls_alc655[] = {
-        AC97_SINGLE("IEC958 Capture Switch", AC97_ALC650_MULTICH, 11, 1, 0),
-        AC97_SINGLE("IEC958 Input Monitor", AC97_ALC650_MULTICH, 14, 1, 0),
+        AC97_PAGE_SINGLE("IEC958 Capture Switch", AC97_ALC650_MULTICH, 11, 1, 0, 0),
+        AC97_PAGE_SINGLE("IEC958 Input Monitor", AC97_ALC650_MULTICH, 14, 1, 0, 0),
 	{
 		.iface  = SNDRV_CTL_ELEM_IFACE_MIXER,
 		.name   = "IEC958 Playback Route",
@@ -1451,6 +1493,9 @@
 
 	ac97->build_ops = &patch_alc655_ops;
 
+	/* assume only page 0 for writing cache */
+	snd_ac97_update_bits(ac97, AC97_INT_PAGING, AC97_PAGE_MASK, AC97_PAGE_VENDOR);
+
 	/* adjust default values */
 	val = snd_ac97_read(ac97, 0x7a); /* misc control */
 	val |= (1 << 1); /* spdif input pin */
@@ -1469,6 +1514,120 @@
 	return 0;
 }
 
+
+#define AC97_ALC850_JACK_SELECT	0x76
+#define AC97_ALC850_MISC1	0x7a
+
+static int ac97_alc850_surround_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t * ucontrol)
+{
+        ac97_t *ac97 = snd_kcontrol_chip(kcontrol);
+        ucontrol->value.integer.value[0] = ((ac97->regs[AC97_ALC850_JACK_SELECT] >> 12) & 7) == 2;
+        return 0;
+}
+
+static int ac97_alc850_surround_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t * ucontrol)
+{
+        ac97_t *ac97 = snd_kcontrol_chip(kcontrol);
+
+	/* SURR 1kOhm (bit4), Amp (bit5) */
+	snd_ac97_update_bits(ac97, AC97_ALC850_MISC1, (1<<4)|(1<<5),
+			     ucontrol->value.integer.value[0] ? (1<<5) : (1<<4));
+	/* LINE-IN = 0, SURROUND = 2 */
+	return snd_ac97_update_bits(ac97, AC97_ALC850_JACK_SELECT, 7 << 12,
+				    ucontrol->value.integer.value[0] ? (2<<12) : (0<<12));
+}
+
+static int ac97_alc850_mic_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t * ucontrol)
+{
+        ac97_t *ac97 = snd_kcontrol_chip(kcontrol);
+        ucontrol->value.integer.value[0] = ((ac97->regs[AC97_ALC850_JACK_SELECT] >> 4) & 7) == 2;
+        return 0;
+}
+
+static int ac97_alc850_mic_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t * ucontrol)
+{
+        ac97_t *ac97 = snd_kcontrol_chip(kcontrol);
+
+	/* Vref disable (bit12), 1kOhm (bit13) */
+	snd_ac97_update_bits(ac97, AC97_ALC850_MISC1, (1<<12)|(1<<13),
+			     ucontrol->value.integer.value[0] ? (1<<12) : (1<<13));
+	/* MIC-IN = 1, CENTER-LFE = 2 */
+	return snd_ac97_update_bits(ac97, AC97_ALC850_JACK_SELECT, 7 << 4,
+				    ucontrol->value.integer.value[0] ? (2<<4) : (1<<4));
+}
+
+static const snd_kcontrol_new_t snd_ac97_controls_alc850[] = {
+	AC97_PAGE_SINGLE("Duplicate Front", AC97_ALC650_MULTICH, 0, 1, 0, 0),
+	{
+		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+		.name = "Line-In As Surround",
+		.info = snd_ac97_info_single,
+		.get = ac97_alc850_surround_get,
+		.put = ac97_alc850_surround_put,
+		.private_value = AC97_SINGLE_VALUE(0, 0, 1, 0) /* only mask needed */
+	},
+	{
+		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+		.name = "Mic As Center/LFE",
+		.info = snd_ac97_info_single,
+		.get = ac97_alc850_mic_get,
+		.put = ac97_alc850_mic_put,
+		.private_value = AC97_SINGLE_VALUE(0, 0, 1, 0) /* only mask needed */
+	},
+
+};
+
+static int patch_alc850_specific(ac97_t *ac97)
+{
+	int err;
+
+	if ((err = patch_build_controls(ac97, snd_ac97_controls_alc850, ARRAY_SIZE(snd_ac97_controls_alc850))) < 0)
+		return err;
+	if (ac97->ext_id & AC97_EI_SPDIF) {
+		if ((err = patch_build_controls(ac97, snd_ac97_spdif_controls_alc655, ARRAY_SIZE(snd_ac97_spdif_controls_alc655))) < 0)
+			return err;
+	}
+	return 0;
+}
+
+static struct snd_ac97_build_ops patch_alc850_ops = {
+	.build_specific	= patch_alc850_specific
+};
+
+int patch_alc850(ac97_t *ac97)
+{
+	ac97->build_ops = &patch_alc850_ops;
+
+	ac97->spec.dev_flags = 0; /* for IEC958 playback route - ALC655 compatible */
+
+	/* assume only page 0 for writing cache */
+	snd_ac97_update_bits(ac97, AC97_INT_PAGING, AC97_PAGE_MASK, AC97_PAGE_VENDOR);
+
+	/* adjust default values */
+	/* set default: spdif-in enabled,
+	   spdif-in monitor off, spdif-in PCM off
+	   center on mic off, surround on line-in off
+	   duplicate front off
+	*/
+	snd_ac97_write_cache(ac97, AC97_ALC650_MULTICH, 1<<15);
+	/* SURR_OUT: on, Surr 1kOhm: on, Surr Amp: off, Front 1kOhm: off
+	 * Front Amp: on, Vref: enable, Center 1kOhm: on, Mix: on
+	 */
+	snd_ac97_write_cache(ac97, 0x7a, (1<<1)|(1<<4)|(0<<5)|(1<<6)|
+			     (1<<7)|(0<<12)|(1<<13)|(0<<14));
+	/* detection UIO2,3: all path floating, UIO3: MIC, Vref2: disable,
+	 * UIO1: FRONT, Vref3: disable, UIO3: LINE, Front-Mic: mute
+	 */
+	snd_ac97_write_cache(ac97, 0x76, (0<<0)|(0<<2)|(1<<4)|(1<<7)|(2<<8)|
+			     (1<<11)|(0<<12)|(1<<15));
+
+	/* full DAC volume */
+	snd_ac97_write_cache(ac97, AC97_ALC650_SURR_DAC_VOL, 0x0808);
+	snd_ac97_write_cache(ac97, AC97_ALC650_LFE_DAC_VOL, 0x0808);
+	return 0;
+}
+
+
 /*
  * C-Media CM97xx codecs
  */
@@ -1599,8 +1758,10 @@
 		/* enable spdif in */
 		snd_ac97_write_cache(ac97, AC97_CM9739_SPDIF_CTRL,
 				     snd_ac97_read(ac97, AC97_CM9739_SPDIF_CTRL) | 0x01);
+		ac97->rates[AC97_RATES_SPDIF] = SNDRV_PCM_RATE_48000; /* 48k only */
 	} else {
 		ac97->ext_id &= ~AC97_EI_SPDIF; /* disable extended-id */
+		ac97->rates[AC97_RATES_SPDIF] = 0;
 	}
 
 	/* set-up multi channel */
diff -Nru a/sound/pci/ac97/ac97_patch.h b/sound/pci/ac97/ac97_patch.h
--- a/sound/pci/ac97/ac97_patch.h	2004-08-04 17:48:48 -07:00
+++ b/sound/pci/ac97/ac97_patch.h	2004-08-04 17:48:48 -07:00
@@ -49,6 +49,7 @@
 int patch_ad1985(ac97_t * ac97);
 int patch_alc650(ac97_t * ac97);
 int patch_alc655(ac97_t * ac97);
+int patch_alc850(ac97_t * ac97);
 int patch_cm9738(ac97_t * ac97);
 int patch_cm9739(ac97_t * ac97);
 int patch_vt1616(ac97_t * ac97);
diff -Nru a/sound/pci/ac97/ac97_pcm.c b/sound/pci/ac97/ac97_pcm.c
--- a/sound/pci/ac97/ac97_pcm.c	2004-08-04 17:48:48 -07:00
+++ b/sound/pci/ac97/ac97_pcm.c	2004-08-04 17:48:48 -07:00
@@ -36,8 +36,6 @@
 #include "ac97_id.h"
 #include "ac97_local.h"
 
-#define chip_t ac97_t
-
 /*
  *  PCM support
  */
@@ -430,7 +428,7 @@
 	unsigned int rates;
 	ac97_t *codec;
 
-	rpcms = snd_kcalloc(sizeof(struct ac97_pcm) * pcms_count, GFP_KERNEL);
+	rpcms = kcalloc(pcms_count, sizeof(struct ac97_pcm), GFP_KERNEL);
 	if (rpcms == NULL)
 		return -ENOMEM;
 	memset(avail_slots, 0, sizeof(avail_slots));
@@ -489,7 +487,10 @@
 				rpcm->r[0].rslots[j] = tmp;
 				rpcm->r[0].codec[j] = bus->codec[j];
 				rpcm->r[0].rate_table[j] = rate_table[pcm->stream][j];
-				rates = get_rates(rpcm, j, tmp, 0);
+				if (bus->no_vra)
+					rates = SNDRV_PCM_RATE_48000;
+				else
+					rates = get_rates(rpcm, j, tmp, 0);
 				if (pcm->exclusive)
 					avail_slots[pcm->stream][j] &= ~tmp;
 			}
diff -Nru a/sound/pci/ac97/ac97_proc.c b/sound/pci/ac97/ac97_proc.c
--- a/sound/pci/ac97/ac97_proc.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/ac97/ac97_proc.c	2004-08-04 17:48:49 -07:00
@@ -290,11 +290,11 @@
 
 static void snd_ac97_proc_read(snd_info_entry_t *entry, snd_info_buffer_t * buffer)
 {
-	ac97_t *ac97 = snd_magic_cast(ac97_t, entry->private_data, return);
+	ac97_t *ac97 = entry->private_data;
 	
+	down(&ac97->mutex);
 	if ((ac97->id & 0xffffff40) == AC97_ID_AD1881) {	// Analog Devices AD1881/85/86
 		int idx;
-		down(&ac97->spec.ad18xx.mutex);
 		for (idx = 0; idx < 3; idx++)
 			if (ac97->spec.ad18xx.id[idx]) {
 				/* select single codec */
@@ -305,7 +305,6 @@
 			}
 		/* select all codecs */
 		snd_ac97_update_bits(ac97, AC97_AD_SERIAL_CFG, 0x7000, 0x7000);
-		up(&ac97->spec.ad18xx.mutex);
 		
 		snd_iprintf(buffer, "\nAD18XX configuration\n");
 		snd_iprintf(buffer, "Unchained        : 0x%04x,0x%04x,0x%04x\n",
@@ -319,22 +318,25 @@
 	} else {
 		snd_ac97_proc_read_main(ac97, buffer, 0);
 	}
+	up(&ac97->mutex);
 }
 
 #ifdef CONFIG_SND_DEBUG
 /* direct register write for debugging */
 static void snd_ac97_proc_regs_write(snd_info_entry_t *entry, snd_info_buffer_t *buffer)
 {
-	ac97_t *ac97 = snd_magic_cast(ac97_t, entry->private_data, return);
+	ac97_t *ac97 = entry->private_data;
 	char line[64];
 	unsigned int reg, val;
+	down(&ac97->mutex);
 	while (!snd_info_get_line(buffer, line, sizeof(line))) {
 		if (sscanf(line, "%x %x", &reg, &val) != 2)
 			continue;
-		/* register must be odd */
+		/* register must be even */
 		if (reg < 0x80 && (reg & 1) == 0 && val <= 0xffff)
 			snd_ac97_write_cache(ac97, reg, val);
 	}
+	up(&ac97->mutex);
 }
 #endif
 
@@ -351,12 +353,12 @@
 static void snd_ac97_proc_regs_read(snd_info_entry_t *entry, 
 				    snd_info_buffer_t * buffer)
 {
-	ac97_t *ac97 = snd_magic_cast(ac97_t, entry->private_data, return);
+	ac97_t *ac97 = entry->private_data;
 
+	down(&ac97->mutex);
 	if ((ac97->id & 0xffffff40) == AC97_ID_AD1881) {	// Analog Devices AD1881/85/86
 
 		int idx;
-		down(&ac97->spec.ad18xx.mutex);
 		for (idx = 0; idx < 3; idx++)
 			if (ac97->spec.ad18xx.id[idx]) {
 				/* select single codec */
@@ -366,10 +368,10 @@
 			}
 		/* select all codecs */
 		snd_ac97_update_bits(ac97, AC97_AD_SERIAL_CFG, 0x7000, 0x7000);
-		up(&ac97->spec.ad18xx.mutex);
 	} else {
 		snd_ac97_proc_regs_read_main(ac97, buffer, 0);
 	}	
+	up(&ac97->mutex);
 }
 
 void snd_ac97_proc_init(ac97_t * ac97)
diff -Nru a/sound/pci/ac97/ak4531_codec.c b/sound/pci/ac97/ak4531_codec.c
--- a/sound/pci/ac97/ak4531_codec.c	2004-08-04 17:48:48 -07:00
+++ b/sound/pci/ac97/ak4531_codec.c	2004-08-04 17:48:48 -07:00
@@ -30,8 +30,6 @@
 MODULE_DESCRIPTION("Universal routines for AK4531 codec");
 MODULE_LICENSE("GPL");
 
-#define chip_t ak4531_t
-
 static void snd_ak4531_proc_init(snd_card_t * card, ak4531_t * ak4531);
 
 /*
@@ -89,7 +87,7 @@
 	}
 	ucontrol->value.integer.value[0] = val;
 	return 0;
-}                                                                                                                                                                                                                                                                                                            
+}
 
 static int snd_ak4531_put_single(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
@@ -113,7 +111,7 @@
 	ak4531->write(ak4531, reg, ak4531->regs[reg] = val);
 	spin_unlock_irqrestore(&ak4531->reg_lock, flags);
 	return change;
-}                                                                                                                                                                                                                                                                                                            
+}
 
 #define AK4531_DOUBLE(xname, xindex, left_reg, right_reg, left_shift, right_shift, mask, invert) \
 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .index = xindex, \
@@ -155,7 +153,7 @@
 	ucontrol->value.integer.value[0] = left;
 	ucontrol->value.integer.value[1] = right;
 	return 0;
-}                                                                                                                                                                                                                                                                                                            
+}
 
 static int snd_ak4531_put_double(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
@@ -192,7 +190,7 @@
 	}
 	spin_unlock_irqrestore(&ak4531->reg_lock, flags);
 	return change;
-}                                                                                                                                                                                                                                                                                                            
+}
 
 #define AK4531_INPUT_SW(xname, xindex, reg1, reg2, left_shift, right_shift) \
 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .index = xindex, \
@@ -225,7 +223,7 @@
 	ucontrol->value.integer.value[3] = (ak4531->regs[reg2] >> right_shift) & 1;
 	spin_unlock_irqrestore(&ak4531->reg_lock, flags);
 	return 0;
-}                                                                                                                                                                                                                                                                                                            
+}
 
 static int snd_ak4531_put_input_sw(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
@@ -250,9 +248,7 @@
 	ak4531->write(ak4531, reg2, ak4531->regs[reg2] = val2);
 	spin_unlock_irqrestore(&ak4531->reg_lock, flags);
 	return change;
-}                                                                                                                                                                                                                                                                                                            
-
-#define AK4531_CONTROLS (sizeof(snd_ak4531_controls)/sizeof(snd_kcontrol_new_t))
+}
 
 static snd_kcontrol_new_t snd_ak4531_controls[] = {
 
@@ -315,14 +311,14 @@
 	if (ak4531) {
 		if (ak4531->private_free)
 			ak4531->private_free(ak4531);
-		snd_magic_kfree(ak4531);
+		kfree(ak4531);
 	}
 	return 0;
 }
 
 static int snd_ak4531_dev_free(snd_device_t *device)
 {
-	ak4531_t *ak4531 = snd_magic_cast(ak4531_t, device->device_data, return -ENXIO);
+	ak4531_t *ak4531 = device->device_data;
 	return snd_ak4531_free(ak4531);
 }
 
@@ -367,7 +363,7 @@
 	snd_assert(rak4531 != NULL, return -EINVAL);
 	*rak4531 = NULL;
 	snd_assert(card != NULL && _ak4531 != NULL, return -EINVAL);
-	ak4531 = snd_magic_kcalloc(ak4531_t, 0, GFP_KERNEL);
+	ak4531 = kcalloc(1, sizeof(*ak4531), GFP_KERNEL);
 	if (ak4531 == NULL)
 		return -ENOMEM;
 	*ak4531 = *_ak4531;
@@ -385,7 +381,7 @@
 			continue;
 		ak4531->write(ak4531, idx, ak4531->regs[idx] = snd_ak4531_initial_map[idx]);	/* recording source is mixer */
 	}
-	for (idx = 0; idx < AK4531_CONTROLS; idx++) {
+	for (idx = 0; idx < ARRAY_SIZE(snd_ak4531_controls); idx++) {
 		if ((err = snd_ctl_add(card, snd_ctl_new1(&snd_ak4531_controls[idx], ak4531))) < 0) {
 			snd_ak4531_free(ak4531);
 			return err;
@@ -411,7 +407,7 @@
 static void snd_ak4531_proc_read(snd_info_entry_t *entry, 
 				 snd_info_buffer_t * buffer)
 {
-	ak4531_t *ak4531 = snd_magic_cast(ak4531_t, entry->private_data, return);
+	ak4531_t *ak4531 = entry->private_data;
 
 	snd_iprintf(buffer, "Asahi Kasei AK4531\n\n");
 	snd_iprintf(buffer, "Recording source   : %s\n"
diff -Nru a/sound/pci/ali5451/ali5451.c b/sound/pci/ali5451/ali5451.c
--- a/sound/pci/ali5451/ali5451.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/ali5451/ali5451.c	2004-08-04 17:48:49 -07:00
@@ -43,8 +43,7 @@
 MODULE_AUTHOR("Matt Wu <Matt_Wu@acersoftech.com.cn>");
 MODULE_DESCRIPTION("ALI M5451");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{ALI,M5451,pci},{ALI,M5451}}");
+MODULE_SUPPORTED_DEVICE("{{ALI,M5451,pci},{ALI,M5451}}");
 
 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;	/* Index 0-MAX */
 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;	/* ID for this card */
@@ -55,19 +54,14 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for ALI M5451 PCI Audio.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for ALI M5451 PCI Audio.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable ALI 5451 PCI Audio.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(pcm_channels, int, boot_devs, 0444);
 MODULE_PARM_DESC(pcm_channels, "PCM Channels");
-MODULE_PARM_SYNTAX(pcm_channels, SNDRV_ENABLED ",default:32,allows:{{1,32}}");
 module_param_array(spdif, bool, boot_devs, 0444);
 MODULE_PARM_DESC(spdif, "Support SPDIF I/O");
-MODULE_PARM_SYNTAX(spdif, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC);
 
 /*
  *  Debug part definitions
@@ -171,7 +165,6 @@
 
 typedef struct snd_stru_ali ali_t;
 typedef struct snd_ali_stru_voice snd_ali_voice_t;
-#define chip_t ali_t
 
 typedef struct snd_ali_channel_control {
 	// register data
@@ -247,7 +240,6 @@
 
 	unsigned int hw_initialized: 1;
 	unsigned int spdif_support: 1;
-	struct resource *res_port;
 
 	struct pci_dev	*pci;
 	struct pci_dev	*pci_m1533;
@@ -495,7 +487,7 @@
 				unsigned short reg,
 				unsigned short val )
 {
-	ali_t *codec = snd_magic_cast(ali_t, ac97->private_data, return);
+	ali_t *codec = ac97->private_data;
 
 	snd_ali_printk("codec_write: reg=%xh data=%xh.\n", reg, val);
 	snd_ali_codec_poke(codec, 0, reg, val);
@@ -505,7 +497,7 @@
 
 static unsigned short snd_ali_codec_read(ac97_t *ac97, unsigned short reg)
 {
-	ali_t *codec = snd_magic_cast(ali_t, ac97->private_data, return -ENXIO);
+	ali_t *codec = ac97->private_data;
 
 	snd_ali_printk("codec_read reg=%xh.\n", reg);
 	return (snd_ali_codec_peek(codec, 0, reg));
@@ -1051,7 +1043,7 @@
 				   void *dev_id,
 				   struct pt_regs *regs)
 {
-	ali_t 	*codec = snd_magic_cast(ali_t, dev_id, return IRQ_NONE);
+	ali_t 	*codec = dev_id;
 
 	if (codec == NULL)
 		return IRQ_NONE;
@@ -1247,7 +1239,7 @@
 	what = whati = capture_flag = 0;
 	snd_pcm_group_for_each(pos, substream) {
 		s = snd_pcm_group_substream_entry(pos);
-		if ((ali_t *) _snd_pcm_chip(s->pcm) == codec) {
+		if ((ali_t *) snd_pcm_substream_chip(s) == codec) {
 			pvoice = (snd_ali_voice_t *) s->runtime->private_data;
 			evoice = pvoice->extra;
 			what |= 1 << (pvoice->number & 0x1f);
@@ -1528,16 +1520,15 @@
 	snd_pcm_runtime_t *runtime = substream->runtime;
 	snd_ali_voice_t *pvoice = (snd_ali_voice_t *) runtime->private_data;
 	unsigned int cso;
-	unsigned long flags;
 
-	spin_lock_irqsave(&codec->reg_lock, flags);
+	spin_lock(&codec->reg_lock);
 	if (!pvoice->running) {
-		spin_unlock_irqrestore(&codec->reg_lock, flags);
+		spin_unlock(&codec->reg_lock);
 		return 0;
 	}
 	outb(pvoice->number, ALI_REG(codec, ALI_GC_CIR));
 	cso = inw(ALI_REG(codec, ALI_CSO_ALPHA_FMS + 2));
-	spin_unlock_irqrestore(&codec->reg_lock, flags);
+	spin_unlock(&codec->reg_lock);
 	snd_ali_printk("playback pointer returned cso=%xh.\n", cso);
 
 	return cso;
@@ -1720,7 +1711,7 @@
 
 static void snd_ali_pcm_free(snd_pcm_t *pcm)
 {
-	ali_t *codec = snd_magic_cast(ali_t, pcm->private_data, return);
+	ali_t *codec = pcm->private_data;
 	codec->pcm = NULL;
 }
 
@@ -1769,7 +1760,7 @@
 static int snd_ali5451_spdif_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
 	unsigned long flags;
-	ali_t *codec = snd_magic_cast(ali_t, kcontrol->private_data, -ENXIO);
+	ali_t *codec = kcontrol->private_data;
 	unsigned int enable;
 
 	enable = ucontrol->value.integer.value[0] ? 1 : 0;
@@ -1796,7 +1787,7 @@
 static int snd_ali5451_spdif_put(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
 	unsigned long flags;
-	ali_t *codec = snd_magic_cast(ali_t, kcontrol->private_data, -ENXIO);
+	ali_t *codec = kcontrol->private_data;
 	unsigned int change = 0, enable = 0;
 
 	enable = ucontrol->value.integer.value[0] ? 1 : 0;
@@ -1863,30 +1854,29 @@
 
 static void snd_ali_mixer_free_ac97_bus(ac97_bus_t *bus)
 {
-	ali_t *codec = snd_magic_cast(ali_t, bus->private_data, return);
+	ali_t *codec = bus->private_data;
 	codec->ac97_bus = NULL;
 }
 
 static void snd_ali_mixer_free_ac97(ac97_t *ac97)
 {
-	ali_t *codec = snd_magic_cast(ali_t, ac97->private_data, return);
+	ali_t *codec = ac97->private_data;
 	codec->ac97 = NULL;
 }
 
 static int __devinit snd_ali_mixer(ali_t * codec)
 {
-	ac97_bus_t bus;
-	ac97_t ac97;
+	ac97_template_t ac97;
 	unsigned int idx;
 	int err;
+	static ac97_bus_ops_t ops = {
+		.write = snd_ali_codec_write,
+		.read = snd_ali_codec_read,
+	};
 
-	memset(&bus, 0, sizeof(bus));
-	bus.write = snd_ali_codec_write;
-	bus.read = snd_ali_codec_read;
-	bus.private_data = codec;
-	bus.private_free = snd_ali_mixer_free_ac97_bus;
-	if ((err = snd_ac97_bus(codec->card, &bus, &codec->ac97_bus)) < 0)
+	if ((err = snd_ac97_bus(codec->card, 0, &ops, codec, &codec->ac97_bus)) < 0)
 		return err;
+	codec->ac97_bus->private_free = snd_ali_mixer_free_ac97_bus;
 
 	memset(&ac97, 0, sizeof(ac97));
 	ac97.private_data = codec;
@@ -1907,7 +1897,7 @@
 #ifdef CONFIG_PM
 static int ali_suspend(snd_card_t *card, unsigned int state)
 {
-	ali_t *chip = snd_magic_cast(ali_t, card->pm_private_data, return -EINVAL);
+	ali_t *chip = card->pm_private_data;
 	ali_image_t *im;
 	int i, j;
 
@@ -1943,12 +1933,13 @@
 	outl(0xffffffff, ALI_REG(chip, ALI_STOP));
 
 	spin_unlock_irq(&chip->reg_lock);
+	snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
 	return 0;
 }
 
 static int ali_resume(snd_card_t *card, unsigned int state)
 {
-	ali_t *chip = snd_magic_cast(ali_t, card->pm_private_data, return -EINVAL);
+	ali_t *chip = card->pm_private_data;
 	ali_image_t *im;
 	int i, j;
 
@@ -1980,6 +1971,7 @@
 	spin_unlock_irq(&chip->reg_lock);
 
 	snd_ac97_resume(chip->ac97);
+	snd_power_change_state(card, SNDRV_CTL_POWER_D0);
 	
 	return 0;
 }
@@ -1993,15 +1985,13 @@
 		synchronize_irq(codec->irq);
 		free_irq(codec->irq, (void *)codec);
 	}
-	if (codec->res_port) {
-		release_resource(codec->res_port);
-		kfree_nocheck(codec->res_port);
-	}
+	if (codec->port)
+		pci_release_regions(codec->pci);
 #ifdef CONFIG_PM
 	if (codec->image)
 		kfree(codec->image);
 #endif
-	snd_magic_kfree(codec);
+	kfree(codec);
 	return 0;
 }
 
@@ -2055,11 +2045,12 @@
 
 static int __devinit snd_ali_resources(ali_t *codec)
 {
+	int err;
+
 	snd_ali_printk("resouces allocation ...\n");
-	if ((codec->res_port = request_region(codec->port, 0x100, "ALI 5451")) == NULL) {
-		snd_printk("Unalbe to request io ports.\n");
-		return -EBUSY;
-	}
+	if ((err = pci_request_regions(codec->pci, "ALI 5451")) < 0)
+		return err;
+	codec->port = pci_resource_start(codec->pci, 0);
 
 	if (request_irq(codec->pci->irq, snd_ali_card_interrupt, SA_INTERRUPT|SA_SHIRQ, "ALI 5451", (void *)codec)) {
 		snd_printk("Unable to request irq.\n");
@@ -2071,7 +2062,7 @@
 }
 static int snd_ali_dev_free(snd_device_t *device) 
 {
-	ali_t *codec=snd_magic_cast(ali_t, device->device_data, return -ENXIO);
+	ali_t *codec=device->device_data;
 	snd_ali_free(codec);
 	return 0;
 }
@@ -2106,7 +2097,7 @@
 		return -ENXIO;
 	}
 
-	if ((codec = snd_magic_kcalloc(ali_t, 0, GFP_KERNEL)) == NULL)
+	if ((codec = kcalloc(1, sizeof(*codec), GFP_KERNEL)) == NULL)
 		return -ENOMEM;
 
 	spin_lock_init(&codec->reg_lock);
@@ -2115,7 +2106,6 @@
 	codec->card = card;
 	codec->pci = pci;
 	codec->irq = -1;
-	codec->port = pci_resource_start(pci, 0);
 	pci_read_config_byte(pci, PCI_REVISION_ID, &codec->revision);
 	codec->spdif_support = spdif_support;
 
diff -Nru a/sound/pci/als4000.c b/sound/pci/als4000.c
--- a/sound/pci/als4000.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/als4000.c	2004-08-04 17:48:49 -07:00
@@ -76,8 +76,7 @@
 MODULE_AUTHOR("Bart Hartgers <bart@etpmod.phys.tue.nl>");
 MODULE_DESCRIPTION("Avance Logic ALS4000");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{Avance Logic,ALS4000}}");
+MODULE_SUPPORTED_DEVICE("{{Avance Logic,ALS4000}}");
 
 #if defined(CONFIG_GAMEPORT) || (defined(MODULE) && defined(CONFIG_GAMEPORT_MODULE))
 #define SUPPORT_JOYSTICK 1
@@ -93,24 +92,18 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for ALS4000 soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for ALS4000 soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable ALS4000 soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_INDEX_DESC);
 #ifdef SUPPORT_JOYSTICK
 module_param_array(joystick_port, int, boot_devs, 0444);
 MODULE_PARM_DESC(joystick_port, "Joystick port address for ALS4000 soundcard. (0 = disabled)");
-MODULE_PARM_SYNTAX(joystick_port, SNDRV_ENABLED);
 #endif
 
-#define chip_t sb_t
-
 typedef struct {
+	struct pci_dev *pci;
 	unsigned long gcr;
-	struct resource *res_gcr;
 #ifdef SUPPORT_JOYSTICK
 	struct gameport gameport;
 	struct resource *res_joystick;
@@ -304,11 +297,10 @@
 
 static int snd_als4000_capture_trigger(snd_pcm_substream_t * substream, int cmd)
 {
-	unsigned long flags;
 	sb_t *chip = snd_pcm_substream_chip(substream);
 	int result = 0;
 	
-	spin_lock_irqsave(&chip->mixer_lock, flags);
+	spin_lock(&chip->mixer_lock);
 	if (cmd == SNDRV_PCM_TRIGGER_START) {
 		chip->mode |= SB_RATE_LOCK_CAPTURE;
 		snd_sbmixer_write(chip, 0xde, capture_cmd(chip));
@@ -318,17 +310,16 @@
 	} else {
 		result = -EINVAL;
 	}
-	spin_unlock_irqrestore(&chip->mixer_lock, flags);
+	spin_unlock(&chip->mixer_lock);
 	return result;
 }
 
 static int snd_als4000_playback_trigger(snd_pcm_substream_t * substream, int cmd)
 {
-	unsigned long flags;
 	sb_t *chip = snd_pcm_substream_chip(substream);
 	int result = 0;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock(&chip->reg_lock);
 	if (cmd == SNDRV_PCM_TRIGGER_START) {
 		chip->mode |= SB_RATE_LOCK_PLAYBACK;
 		snd_sbdsp_command(chip, playback_cmd(chip).dma_on);
@@ -338,38 +329,35 @@
 	} else {
 		result = -EINVAL;
 	}
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock(&chip->reg_lock);
 	return result;
 }
 
 static snd_pcm_uframes_t snd_als4000_capture_pointer(snd_pcm_substream_t * substream)
 {
-	unsigned long flags;
 	sb_t *chip = snd_pcm_substream_chip(substream);
 	unsigned int result;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);	
+	spin_lock(&chip->reg_lock);	
 	result = snd_als4000_gcr_read(chip, 0xa4) & 0xffff;
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock(&chip->reg_lock);
 	return bytes_to_frames( substream->runtime, result );
 }
 
 static snd_pcm_uframes_t snd_als4000_playback_pointer(snd_pcm_substream_t * substream)
 {
-	unsigned long flags;
 	sb_t *chip = snd_pcm_substream_chip(substream);
 	unsigned result;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);	
+	spin_lock(&chip->reg_lock);	
 	result = snd_als4000_gcr_read(chip, 0xa0) & 0xffff;
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock(&chip->reg_lock);
 	return bytes_to_frames( substream->runtime, result );
 }
 
 static irqreturn_t snd_als4000_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	sb_t *chip = snd_magic_cast(sb_t, dev_id, return IRQ_NONE);
-	unsigned long flags;
+	sb_t *chip = dev_id;
 	unsigned gcr_status;
 	unsigned sb_status;
 
@@ -385,9 +373,9 @@
 	/* release the gcr */
 	outb(gcr_status, chip->alt_port + 0xe);
 	
-	spin_lock_irqsave(&chip->mixer_lock, flags);
+	spin_lock(&chip->mixer_lock);
 	sb_status = snd_sbmixer_read(chip, SB_DSP4_IRQSTATUS);
-	spin_unlock_irqrestore(&chip->mixer_lock, flags);
+	spin_unlock(&chip->mixer_lock);
 	
 	if (sb_status & SB_IRQTYPE_8BIT) 
 		snd_sb_ack_8bit(chip);
@@ -506,7 +494,7 @@
 
 static void snd_als4000_pcm_free(snd_pcm_t *pcm)
 {
-	sb_t *chip = snd_magic_cast(sb_t, pcm->private_data, return);
+	sb_t *chip = pcm->private_data;
 	chip->pcm = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
@@ -557,27 +545,26 @@
 
 static void __devinit snd_als4000_configure(sb_t *chip)
 {
-	unsigned long flags;
 	unsigned tmp;
 	int i;
 
 	/* do some more configuration */
-	spin_lock_irqsave(&chip->mixer_lock, flags);
+	spin_lock_irq(&chip->mixer_lock);
 	tmp = snd_sbmixer_read(chip, 0xc0);
 	snd_sbmixer_write(chip, 0xc0, tmp|0x80);
 	/* always select DMA channel 0, since we do not actually use DMA */
 	snd_sbmixer_write(chip, SB_DSP4_DMASETUP, SB_DMASETUP_DMA0);
 	snd_sbmixer_write(chip, 0xc0, tmp&0x7f);
-	spin_unlock_irqrestore(&chip->mixer_lock, flags);
+	spin_unlock_irq(&chip->mixer_lock);
 	
-	spin_lock_irqsave(&chip->reg_lock,flags);
+	spin_lock_irq(&chip->reg_lock);
 	/* magic number. Enables interrupts(?) */
 	snd_als4000_gcr_write(chip, 0x8c, 0x28000);
 	for(i = 0x91; i <= 0x96; ++i)
 		snd_als4000_gcr_write(chip, i, 0);
 	
 	snd_als4000_gcr_write(chip, 0x99, snd_als4000_gcr_read(chip, 0x99));
-	spin_unlock_irqrestore(&chip->reg_lock,flags);
+	spin_unlock_irq(&chip->reg_lock);
 }
 
 static void snd_card_als4000_free( snd_card_t *card )
@@ -595,8 +582,7 @@
 		kfree_nocheck(acard->res_joystick);
 	}
 #endif
-	release_resource(acard->res_gcr);
-	kfree_nocheck(acard->res_gcr);
+	pci_release_regions(acard->pci);
 }
 
 static int __devinit snd_card_als4000_probe(struct pci_dev *pci,
@@ -606,7 +592,6 @@
 	snd_card_t *card;
 	snd_card_als4000_t *acard;
 	unsigned long gcr;
-	struct resource *res_gcr_port;
 	sb_t *chip;
 	opl3_t *opl3;
 	unsigned short word;
@@ -631,11 +616,9 @@
 		return -ENXIO;
 	}
 
+	if ((err = pci_request_regions(pci, "ALS4000")) < 0)
+		return err;
 	gcr = pci_resource_start(pci, 0);
-	if ((res_gcr_port = request_region(gcr, 0x40, "ALS4000")) == NULL) {
-		snd_printk("unable to grab region 0x%lx-0x%lx\n", gcr, gcr + 0x40 - 1);
-		return -EBUSY;
-	}
 
 	pci_read_config_word(pci, PCI_COMMAND, &word);
 	pci_write_config_word(pci, PCI_COMMAND, word | PCI_COMMAND_IO);
@@ -644,14 +627,13 @@
 	card = snd_card_new(index[dev], id[dev], THIS_MODULE, 
 			    sizeof( snd_card_als4000_t ) );
 	if (card == NULL) {
-		release_resource(res_gcr_port);
-		kfree_nocheck(res_gcr_port);
+		pci_release_regions(pci);
 		return -ENOMEM;
 	}
 
 	acard = (snd_card_als4000_t *)card->private_data;
+	acard->pci = pci;
 	acard->gcr = gcr;
-	acard->res_gcr = res_gcr_port;
 	card->private_free = snd_card_als4000_free;
 
 	/* disable all legacy ISA stuff except for joystick */
diff -Nru a/sound/pci/atiixp.c b/sound/pci/atiixp.c
--- a/sound/pci/atiixp.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/atiixp.c	2004-08-04 17:48:49 -07:00
@@ -1,5 +1,5 @@
 /*
- *   ALSA driver for ATI IXP 150/200/250 AC97 controllers
+ *   ALSA driver for ATI IXP 150/200/250/300 AC97 controllers
  *
  *	Copyright (c) 2004 Takashi Iwai <tiwai@suse.de>
  *
@@ -37,8 +37,7 @@
 MODULE_AUTHOR("Takashi Iwai <tiwai@suse.de>");
 MODULE_DESCRIPTION("ATI IXP AC97 controller");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{ATI,IXP150/200/250/300}}");
+MODULE_SUPPORTED_DEVICE("{{ATI,IXP150/200/250/300}}");
 
 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;	/* Index 0-MAX */
 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;	/* ID for this card */
@@ -49,19 +48,14 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for ATI IXP controller.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for ATI IXP controller.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable audio part of ATI IXP controller.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(ac97_clock, int, boot_devs, 0444);
 MODULE_PARM_DESC(ac97_clock, "AC'97 codec clock (default 48000Hz).");
-MODULE_PARM_SYNTAX(ac97_clock, SNDRV_ENABLED ",default:48000");
 module_param_array(spdif_aclink, bool, boot_devs, 0444);
 MODULE_PARM_DESC(spdif_aclink, "S/PDIF over AC-link.");
-MODULE_PARM_SYNTAX(spdif_aclink, SNDRV_ENABLED "," SNDRV_BOOLEAN_TRUE_DESC);
 
 
 /*
@@ -197,7 +191,6 @@
 #define  ATI_REG_DMA_STATE		(7U<<26)
 
 
-#define ATI_MEM_REGION		256	/* i/o memory size */
 #define ATI_MAX_DESCRIPTORS	256	/* max number of descriptor packets */
 
 
@@ -207,7 +200,6 @@
 typedef struct snd_atiixp atiixp_t;
 typedef struct snd_atiixp_dma atiixp_dma_t;
 typedef struct snd_atiixp_dma_ops atiixp_dma_ops_t;
-#define chip_t atiixp_t
 
 
 /*
@@ -248,7 +240,6 @@
  */
 struct snd_atiixp_dma {
 	const atiixp_dma_ops_t *ops;
-	struct snd_dma_device desc_dev;
 	struct snd_dma_buffer desc_buf;
 	snd_pcm_substream_t *substream;	/* assigned PCM substream */
 	unsigned int buf_addr, buf_bytes;	/* DMA buffer address, bytes */
@@ -266,7 +257,6 @@
 	snd_card_t *card;
 	struct pci_dev *pci;
 
-	struct resource *res;		/* memory i/o */
 	unsigned long addr;
 	unsigned long remap_addr;
 	int irq;
@@ -287,10 +277,6 @@
 
 	int spdif_over_aclink;		/* passed from the module option */
 	struct semaphore open_mutex;	/* playback open mutex */
-
-#ifdef CONFIG_PM
-	u32 pci_state[16];
-#endif
 };
 
 
@@ -376,15 +362,13 @@
 		return -ENOMEM;
 
 	if (dma->desc_buf.area == NULL) {
-		memset(&dma->desc_dev, 0, sizeof(dma->desc_dev));
-		dma->desc_dev.type = SNDRV_DMA_TYPE_DEV;
-		dma->desc_dev.dev = snd_dma_pci_data(chip->pci);
-		if (snd_dma_alloc_pages(&dma->desc_dev, ATI_DESC_LIST_SIZE, &dma->desc_buf) < 0)
+		if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(chip->pci),
+					ATI_DESC_LIST_SIZE, &dma->desc_buf) < 0)
 			return -ENOMEM;
 		dma->period_bytes = dma->periods = 0; /* clear */
 	}
 
-	if (dma->periods == dma->periods && dma->period_bytes == period_bytes)
+	if (dma->periods == periods && dma->period_bytes == period_bytes)
 		return 0;
 
 	/* reset DMA before changing the descriptor table */
@@ -426,7 +410,7 @@
 {
 	if (dma->desc_buf.area) {
 		writel(0, chip->remap_addr + dma->ops->llp_offset);
-		snd_dma_free_pages(&dma->desc_dev, &dma->desc_buf);
+		snd_dma_free_pages(&dma->desc_buf);
 		dma->desc_buf.area = NULL;
 	}
 }
@@ -491,7 +475,7 @@
 
 static unsigned short snd_atiixp_ac97_read(ac97_t *ac97, unsigned short reg)
 {
-	atiixp_t *chip = snd_magic_cast(atiixp_t, ac97->private_data, return 0xffff);
+	atiixp_t *chip = ac97->private_data;
 	unsigned short data;
 	spin_lock(&chip->ac97_lock);
 	data = snd_atiixp_codec_read(chip, ac97->num, reg);
@@ -502,7 +486,7 @@
 
 static void snd_atiixp_ac97_write(ac97_t *ac97, unsigned short reg, unsigned short val)
 {
-	atiixp_t *chip = snd_magic_cast(atiixp_t, ac97->private_data, return);
+	atiixp_t *chip = ac97->private_data;
 	spin_lock(&chip->ac97_lock);
 	snd_atiixp_codec_write(chip, ac97->num, reg, val);
 	spin_unlock(&chip->ac97_lock);
@@ -653,9 +637,8 @@
 	snd_pcm_runtime_t *runtime = substream->runtime;
 	atiixp_dma_t *dma = (atiixp_dma_t *)runtime->private_data;
 	unsigned int curptr;
-	unsigned long flags;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock(&chip->reg_lock);
 	curptr = readl(chip->remap_addr + dma->ops->dt_cur);
 	if (curptr < dma->buf_addr) {
 		snd_printdd("curptr = %x, base = %x\n", curptr, dma->buf_addr);
@@ -667,7 +650,7 @@
 			curptr = 0;
 		}
 	}
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock(&chip->reg_lock);
 	return bytes_to_frames(runtime, curptr);
 }
 
@@ -852,7 +835,7 @@
 {
 	atiixp_t *chip = snd_pcm_substream_chip(substream);
 
-	spin_lock(&chip->reg_lock);
+	spin_lock_irq(&chip->reg_lock);
 	if (chip->spdif_over_aclink) {
 		unsigned int data;
 		/* enable slots 10/11 */
@@ -870,7 +853,7 @@
 		atiixp_update(chip, CMD, ATI_REG_CMD_SPDF_CONFIG_MASK, 0);
 		atiixp_update(chip, CMD, ATI_REG_CMD_INTERLEAVE_SPDF, 0);
 	}
-	spin_unlock(&chip->reg_lock);
+	spin_unlock_irq(&chip->reg_lock);
 	return 0;
 }
 
@@ -880,7 +863,7 @@
 	atiixp_t *chip = snd_pcm_substream_chip(substream);
 	unsigned int data;
 
-	spin_lock(&chip->reg_lock);
+	spin_lock_irq(&chip->reg_lock);
 	data = atiixp_read(chip, OUT_DMA_SLOT) & ~ATI_REG_OUT_DMA_SLOT_MASK;
 	switch (substream->runtime->channels) {
 	case 8:
@@ -915,7 +898,7 @@
 	atiixp_update(chip, 6CH_REORDER, ATI_REG_6CH_REORDER_EN,
 		      substream->runtime->channels >= 6 ? ATI_REG_6CH_REORDER_EN: 0);
     
-	spin_unlock(&chip->reg_lock);
+	spin_unlock_irq(&chip->reg_lock);
 	return 0;
 }
 
@@ -924,11 +907,11 @@
 {
 	atiixp_t *chip = snd_pcm_substream_chip(substream);
 
-	spin_lock(&chip->reg_lock);
+	spin_lock_irq(&chip->reg_lock);
 	atiixp_update(chip, CMD, ATI_REG_CMD_INTERLEAVE_IN,
 		      substream->runtime->format == SNDRV_PCM_FORMAT_S16_LE ?
 		      ATI_REG_CMD_INTERLEAVE_IN : 0);
-	spin_unlock(&chip->reg_lock);
+	spin_unlock_irq(&chip->reg_lock);
 	return 0;
 }
 
@@ -996,6 +979,7 @@
 {
 	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
 				 SNDRV_PCM_INFO_BLOCK_TRANSFER |
+				 SNDRV_PCM_INFO_RESUME |
 				 SNDRV_PCM_INFO_MMAP_VALID),
 	.formats =		SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S32_LE,
 	.rates =		SNDRV_PCM_RATE_48000,
@@ -1014,7 +998,6 @@
 {
 	atiixp_t *chip = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	unsigned long flags;
 	int err;
 
 	snd_assert(dma->ops && dma->ops->enable_dma, return -EINVAL);
@@ -1036,9 +1019,9 @@
 	runtime->private_data = dma;
 
 	/* enable DMA bits */
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	dma->ops->enable_dma(chip, 1);
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	dma->opened = 1;
 
 	return 0;
@@ -1308,7 +1291,7 @@
  */
 static irqreturn_t snd_atiixp_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	atiixp_t *chip = snd_magic_cast(atiixp_t, dev_id, return IRQ_NONE);
+	atiixp_t *chip = dev_id;
 	unsigned int status;
 
 	status = atiixp_read(chip, ISR);
@@ -1355,10 +1338,14 @@
 
 static int __devinit snd_atiixp_mixer_new(atiixp_t *chip, int clock)
 {
-	ac97_bus_t bus, *pbus;
-	ac97_t ac97;
+	ac97_bus_t *pbus;
+	ac97_template_t ac97;
 	int i, err;
 	int codec_count;
+	static ac97_bus_ops_t ops = {
+		.write = snd_atiixp_ac97_write,
+		.read = snd_atiixp_ac97_read,
+	};
 	static unsigned int codec_skip[NUM_ATI_CODECS] = {
 		ATI_REG_ISR_CODEC0_NOT_READY,
 		ATI_REG_ISR_CODEC1_NOT_READY,
@@ -1368,13 +1355,10 @@
 	if (snd_atiixp_codec_detect(chip) < 0)
 		return -ENXIO;
 
-	memset(&bus, 0, sizeof(bus));
-	bus.write = snd_atiixp_ac97_write;
-	bus.read = snd_atiixp_ac97_read;
-	bus.private_data = chip;
-	bus.clock = clock;
-	if ((err = snd_ac97_bus(chip->card, &bus, &pbus)) < 0)
+	if ((err = snd_ac97_bus(chip->card, 0, &ops, chip, &pbus)) < 0)
 		return err;
+	pbus->clock = clock;
+	pbus->shared_type = AC97_SHARED_TYPE_ATIIXP;	/* shared with modem driver */
 	chip->ac97_bus = pbus;
 
 	codec_count = 0;
@@ -1387,17 +1371,9 @@
 		ac97.num = i;
 		ac97.scaps = AC97_SCAP_SKIP_MODEM;
 		if ((err = snd_ac97_mixer(pbus, &ac97, &chip->ac97[i])) < 0) {
-			if (chip->codec_not_ready_bits)
-				/* codec(s) was detected but not available.
-				 * return the error
-				 */
-				return err;
-			else {
-				/* codec(s) was NOT detected, so just ignore here */
-				chip->ac97[i] = NULL; /* to be sure */
-				snd_printd("atiixp: codec %d not found\n", i);
-				continue;
-			}
+			chip->ac97[i] = NULL; /* to be sure */
+			snd_printdd("atiixp: codec %d not available for audio\n", i);
+			continue;
 		}
 		codec_count++;
 	}
@@ -1419,7 +1395,7 @@
  */
 static int snd_atiixp_suspend(snd_card_t *card, unsigned int state)
 {
-	atiixp_t *chip = snd_magic_cast(atiixp_t, card->pm_private_data, return -EINVAL);
+	atiixp_t *chip = card->pm_private_data;
 	int i;
 
 	for (i = 0; i < NUM_ATI_PCMDEVS; i++)
@@ -1431,7 +1407,6 @@
 	snd_atiixp_aclink_down(chip);
 	snd_atiixp_chip_stop(chip);
 
-	pci_save_state(chip->pci, chip->pci_state);
 	pci_set_power_state(chip->pci, 3);
 	pci_disable_device(chip->pci);
 	snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
@@ -1440,11 +1415,10 @@
 
 static int snd_atiixp_resume(snd_card_t *card, unsigned int state)
 {
-	atiixp_t *chip = snd_magic_cast(atiixp_t, card->pm_private_data, return -EINVAL);
+	atiixp_t *chip = card->pm_private_data;
 	int i;
 
 	pci_enable_device(chip->pci);
-	pci_restore_state(chip->pci, chip->pci_state);
 	pci_set_power_state(chip->pci, 0);
 
 	snd_atiixp_aclink_reset(chip);
@@ -1466,7 +1440,7 @@
 
 static void snd_atiixp_proc_read(snd_info_entry_t *entry, snd_info_buffer_t *buffer)
 {
-	atiixp_t *chip = snd_magic_cast(atiixp_t, entry->private_data, return);
+	atiixp_t *chip = entry->private_data;
 	int i;
 
 	for (i = 0; i < 256; i += 4)
@@ -1494,21 +1468,18 @@
 	snd_atiixp_chip_stop(chip);
 	synchronize_irq(chip->irq);
       __hw_end:
-	if (chip->remap_addr)
-		iounmap((void *) chip->remap_addr);
-	if (chip->res) {
-		release_resource(chip->res);
-		kfree_nocheck(chip->res);
-	}
 	if (chip->irq >= 0)
 		free_irq(chip->irq, (void *)chip);
-	snd_magic_kfree(chip);
+	if (chip->remap_addr)
+		iounmap((void *) chip->remap_addr);
+	pci_release_regions(chip->pci);
+	kfree(chip);
 	return 0;
 }
 
 static int snd_atiixp_dev_free(snd_device_t *device)
 {
-	atiixp_t *chip = snd_magic_cast(atiixp_t, device->device_data, return -ENXIO);
+	atiixp_t *chip = device->device_data;
 	return snd_atiixp_free(chip);
 }
 
@@ -1528,7 +1499,7 @@
 	if ((err = pci_enable_device(pci)) < 0)
 		return err;
 
-	chip = snd_magic_kcalloc(atiixp_t, 0, GFP_KERNEL);
+	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
 	if (chip == NULL)
 		return -ENOMEM;
 
@@ -1538,13 +1509,12 @@
 	chip->card = card;
 	chip->pci = pci;
 	chip->irq = -1;
-	chip->addr = pci_resource_start(pci, 0);
-	if ((chip->res = request_mem_region(chip->addr, ATI_MEM_REGION, "ATI IXP AC97")) == NULL) {
-		snd_printk(KERN_ERR "unable to grab I/O memory 0x%lx\n", chip->addr);
-		snd_atiixp_free(chip);
-		return -EBUSY;
+	if ((err = pci_request_regions(pci, "ATI IXP AC97")) < 0) {
+		kfree(chip);
+		return err;
 	}
-	chip->remap_addr = (unsigned long) ioremap_nocache(chip->addr, ATI_MEM_REGION);
+	chip->addr = pci_resource_start(pci, 0);
+	chip->remap_addr = (unsigned long) ioremap_nocache(chip->addr, pci_resource_len(pci, 0));
 	if (chip->remap_addr == 0) {
 		snd_printk(KERN_ERR "AC'97 space ioremap problem\n");
 		snd_atiixp_free(chip);
diff -Nru a/sound/pci/atiixp_modem.c b/sound/pci/atiixp_modem.c
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/sound/pci/atiixp_modem.c	2004-08-04 17:48:49 -07:00
@@ -0,0 +1,1349 @@
+/*
+ *   ALSA driver for ATI IXP 150/200/250 AC97 modem controllers
+ *
+ *	Copyright (c) 2004 Takashi Iwai <tiwai@suse.de>
+ *
+ *   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/pci.h>
+#include <linux/slab.h>
+#include <linux/moduleparam.h>
+#include <sound/core.h>
+#include <sound/pcm.h>
+#include <sound/pcm_params.h>
+#include <sound/info.h>
+#include <sound/ac97_codec.h>
+#include <sound/initval.h>
+
+MODULE_AUTHOR("Takashi Iwai <tiwai@suse.de>");
+MODULE_DESCRIPTION("ATI IXP MC97 controller");
+MODULE_LICENSE("GPL");
+MODULE_SUPPORTED_DEVICE("{{ATI,IXP150/200/250}}");
+
+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)] = 48000};
+static int boot_devs;
+
+module_param_array(index, int, boot_devs, 0444);
+MODULE_PARM_DESC(index, "Index value for ATI IXP controller.");
+module_param_array(id, charp, boot_devs, 0444);
+MODULE_PARM_DESC(id, "ID string for ATI IXP controller.");
+module_param_array(enable, bool, boot_devs, 0444);
+MODULE_PARM_DESC(enable, "Enable audio part of ATI IXP controller.");
+module_param_array(ac97_clock, int, boot_devs, 0444);
+MODULE_PARM_DESC(ac97_clock, "AC'97 codec clock (default 48000Hz).");
+
+
+/*
+ */
+
+#define ATI_REG_ISR			0x00	/* interrupt source */
+#define  ATI_REG_ISR_MODEM_IN_XRUN	(1U<<0)
+#define  ATI_REG_ISR_MODEM_IN_STATUS	(1U<<1)
+#define  ATI_REG_ISR_MODEM_OUT1_XRUN	(1U<<2)
+#define  ATI_REG_ISR_MODEM_OUT1_STATUS	(1U<<3)
+#define  ATI_REG_ISR_MODEM_OUT2_XRUN	(1U<<4)
+#define  ATI_REG_ISR_MODEM_OUT2_STATUS	(1U<<5)
+#define  ATI_REG_ISR_MODEM_OUT3_XRUN	(1U<<6)
+#define  ATI_REG_ISR_MODEM_OUT3_STATUS	(1U<<7)
+#define  ATI_REG_ISR_PHYS_INTR		(1U<<8)
+#define  ATI_REG_ISR_PHYS_MISMATCH	(1U<<9)
+#define  ATI_REG_ISR_CODEC0_NOT_READY	(1U<<10)
+#define  ATI_REG_ISR_CODEC1_NOT_READY	(1U<<11)
+#define  ATI_REG_ISR_CODEC2_NOT_READY	(1U<<12)
+#define  ATI_REG_ISR_NEW_FRAME		(1U<<13)
+#define  ATI_REG_ISR_MODEM_GPIO_DATA	(1U<<14)
+
+#define ATI_REG_IER			0x04	/* interrupt enable */
+#define  ATI_REG_IER_MODEM_IN_XRUN_EN	(1U<<0)
+#define  ATI_REG_IER_MODEM_STATUS_EN	(1U<<1)
+#define  ATI_REG_IER_MODEM_OUT1_XRUN_EN	(1U<<2)
+#define  ATI_REG_IER_MODEM_OUT2_XRUN_EN	(1U<<4)
+#define  ATI_REG_IER_MODEM_OUT3_XRUN_EN	(1U<<6)
+#define  ATI_REG_IER_PHYS_INTR_EN	(1U<<8)
+#define  ATI_REG_IER_PHYS_MISMATCH_EN	(1U<<9)
+#define  ATI_REG_IER_CODEC0_INTR_EN	(1U<<10)
+#define  ATI_REG_IER_CODEC1_INTR_EN	(1U<<11)
+#define  ATI_REG_IER_CODEC2_INTR_EN	(1U<<12)
+#define  ATI_REG_IER_NEW_FRAME_EN	(1U<<13)	/* (RO */
+#define  ATI_REG_IER_MODEM_GPIO_DATA_EN	(1U<<14)	/* (WO) modem is running */
+#define  ATI_REG_IER_MODEM_SET_BUS_BUSY	(1U<<15)
+
+#define ATI_REG_CMD			0x08	/* command */
+#define  ATI_REG_CMD_POWERDOWN	(1U<<0)
+#define  ATI_REG_CMD_MODEM_RECEIVE_EN	(1U<<1)	/* modem only */
+#define  ATI_REG_CMD_MODEM_SEND1_EN	(1U<<2)	/* modem only */
+#define  ATI_REG_CMD_MODEM_SEND2_EN	(1U<<3)	/* modem only */
+#define  ATI_REG_CMD_MODEM_SEND3_EN	(1U<<4)	/* modem only */
+#define  ATI_REG_CMD_MODEM_STATUS_MEM	(1U<<5)	/* modem only */
+#define  ATI_REG_CMD_MODEM_IN_DMA_EN	(1U<<8)	/* modem only */
+#define  ATI_REG_CMD_MODEM_OUT_DMA1_EN	(1U<<9)	/* modem only */
+#define  ATI_REG_CMD_MODEM_OUT_DMA2_EN	(1U<<10)	/* modem only */
+#define  ATI_REG_CMD_MODEM_OUT_DMA3_EN	(1U<<11)	/* modem only */
+#define  ATI_REG_CMD_AUDIO_PRESENT	(1U<<20)
+#define  ATI_REG_CMD_MODEM_GPIO_THRU_DMA	(1U<<22)	/* modem only */
+#define  ATI_REG_CMD_LOOPBACK_EN	(1U<<23)
+#define  ATI_REG_CMD_PACKED_DIS		(1U<<24)
+#define  ATI_REG_CMD_BURST_EN		(1U<<25)
+#define  ATI_REG_CMD_PANIC_EN		(1U<<26)
+#define  ATI_REG_CMD_MODEM_PRESENT	(1U<<27)
+#define  ATI_REG_CMD_ACLINK_ACTIVE	(1U<<28)
+#define  ATI_REG_CMD_AC_SOFT_RESET	(1U<<29)
+#define  ATI_REG_CMD_AC_SYNC		(1U<<30)
+#define  ATI_REG_CMD_AC_RESET		(1U<<31)
+
+#define ATI_REG_PHYS_OUT_ADDR		0x0c
+#define  ATI_REG_PHYS_OUT_CODEC_MASK	(3U<<0)
+#define  ATI_REG_PHYS_OUT_RW		(1U<<2)
+#define  ATI_REG_PHYS_OUT_ADDR_EN	(1U<<8)
+#define  ATI_REG_PHYS_OUT_ADDR_SHIFT	9
+#define  ATI_REG_PHYS_OUT_DATA_SHIFT	16
+
+#define ATI_REG_PHYS_IN_ADDR		0x10
+#define  ATI_REG_PHYS_IN_READ_FLAG	(1U<<8)
+#define  ATI_REG_PHYS_IN_ADDR_SHIFT	9
+#define  ATI_REG_PHYS_IN_DATA_SHIFT	16
+
+#define ATI_REG_SLOTREQ			0x14
+
+#define ATI_REG_COUNTER			0x18
+#define  ATI_REG_COUNTER_SLOT		(3U<<0)	/* slot # */
+#define  ATI_REG_COUNTER_BITCLOCK	(31U<<8)
+
+#define ATI_REG_IN_FIFO_THRESHOLD	0x1c
+
+#define ATI_REG_MODEM_IN_DMA_LINKPTR	0x20
+#define ATI_REG_MODEM_IN_DMA_DT_START	0x24	/* RO */
+#define ATI_REG_MODEM_IN_DMA_DT_NEXT	0x28	/* RO */
+#define ATI_REG_MODEM_IN_DMA_DT_CUR	0x2c	/* RO */
+#define ATI_REG_MODEM_IN_DMA_DT_SIZE	0x30
+#define ATI_REG_MODEM_OUT_FIFO		0x34	/* output threshold */
+#define  ATI_REG_MODEM_OUT1_DMA_THRESHOLD_MASK	(0xf<<16)
+#define  ATI_REG_MODEM_OUT1_DMA_THRESHOLD_SHIFT	16
+#define ATI_REG_MODEM_OUT_DMA1_LINKPTR	0x38
+#define ATI_REG_MODEM_OUT_DMA2_LINKPTR	0x3c
+#define ATI_REG_MODEM_OUT_DMA3_LINKPTR	0x40
+#define ATI_REG_MODEM_OUT_DMA1_DT_START	0x44
+#define ATI_REG_MODEM_OUT_DMA1_DT_NEXT	0x48
+#define ATI_REG_MODEM_OUT_DMA1_DT_CUR	0x4c
+#define ATI_REG_MODEM_OUT_DMA2_DT_START	0x50
+#define ATI_REG_MODEM_OUT_DMA2_DT_NEXT	0x54
+#define ATI_REG_MODEM_OUT_DMA2_DT_CUR	0x58
+#define ATI_REG_MODEM_OUT_DMA3_DT_START	0x5c
+#define ATI_REG_MODEM_OUT_DMA3_DT_NEXT	0x60
+#define ATI_REG_MODEM_OUT_DMA3_DT_CUR	0x64
+#define ATI_REG_MODEM_OUT_DMA12_DT_SIZE	0x68
+#define ATI_REG_MODEM_OUT_DMA3_DT_SIZE	0x6c
+#define ATI_REG_MODEM_OUT_FIFO_USED     0x70
+#define ATI_REG_MODEM_OUT_GPIO		0x74
+#define  ATI_REG_MODEM_OUT_GPIO_EN	   1
+#define  ATI_REG_MODEM_OUT_GPIO_DATA_SHIFT 5
+#define ATI_REG_MODEM_IN_GPIO		0x78
+
+#define ATI_REG_MODEM_MIRROR		0x7c
+#define ATI_REG_AUDIO_MIRROR		0x80
+
+#define ATI_REG_MODEM_FIFO_FLUSH	0x88
+#define  ATI_REG_MODEM_FIFO_OUT1_FLUSH	(1U<<0)
+#define  ATI_REG_MODEM_FIFO_OUT2_FLUSH	(1U<<1)
+#define  ATI_REG_MODEM_FIFO_OUT3_FLUSH	(1U<<2)
+#define  ATI_REG_MODEM_FIFO_IN_FLUSH	(1U<<3)
+
+/* LINKPTR */
+#define  ATI_REG_LINKPTR_EN		(1U<<0)
+
+#define ATI_MAX_DESCRIPTORS	256	/* max number of descriptor packets */
+
+
+/*
+ */
+
+typedef struct snd_atiixp atiixp_t;
+typedef struct snd_atiixp_dma atiixp_dma_t;
+typedef struct snd_atiixp_dma_ops atiixp_dma_ops_t;
+
+
+/*
+ * DMA packate descriptor
+ */
+
+typedef struct atiixp_dma_desc {
+	u32 addr;	/* DMA buffer address */
+	u16 status;	/* status bits */
+	u16 size;	/* size of the packet in dwords */
+	u32 next;	/* address of the next packet descriptor */
+} atiixp_dma_desc_t;
+
+/*
+ * stream enum
+ */
+enum { ATI_DMA_PLAYBACK, ATI_DMA_CAPTURE, NUM_ATI_DMAS }; /* DMAs */
+enum { ATI_PCM_OUT, ATI_PCM_IN, NUM_ATI_PCMS }; /* AC97 pcm slots */
+enum { ATI_PCMDEV_ANALOG, NUM_ATI_PCMDEVS }; /* pcm devices */
+
+#define NUM_ATI_CODECS	3
+
+
+/*
+ * constants and callbacks for each DMA type
+ */
+struct snd_atiixp_dma_ops {
+	int type;			/* ATI_DMA_XXX */
+	unsigned int llp_offset;	/* LINKPTR offset */
+	unsigned int dt_cur;		/* DT_CUR offset */
+	void (*enable_dma)(atiixp_t *chip, int on);	/* called from open callback */
+	void (*enable_transfer)(atiixp_t *chip, int on); /* called from trigger (START/STOP) */
+	void (*flush_dma)(atiixp_t *chip);		/* called from trigger (STOP only) */
+};
+
+/*
+ * DMA stream
+ */
+struct snd_atiixp_dma {
+	const atiixp_dma_ops_t *ops;
+	struct snd_dma_buffer desc_buf;
+	snd_pcm_substream_t *substream;	/* assigned PCM substream */
+	unsigned int buf_addr, buf_bytes;	/* DMA buffer address, bytes */
+	unsigned int period_bytes, periods;
+	int opened;
+	int running;
+	int pcm_open_flag;
+	int ac97_pcm_type;	/* index # of ac97_pcm to access, -1 = not used */
+};
+
+/*
+ * ATI IXP chip
+ */
+struct snd_atiixp {
+	snd_card_t *card;
+	struct pci_dev *pci;
+
+	struct resource *res;		/* memory i/o */
+	unsigned long addr;
+	unsigned long remap_addr;
+	int irq;
+	
+	ac97_bus_t *ac97_bus;
+	ac97_t *ac97[NUM_ATI_CODECS];
+
+	spinlock_t reg_lock;
+	spinlock_t ac97_lock;
+
+	atiixp_dma_t dmas[NUM_ATI_DMAS];
+	struct ac97_pcm *pcms[NUM_ATI_PCMS];
+	snd_pcm_t *pcmdevs[NUM_ATI_PCMDEVS];
+
+	int max_channels;		/* max. channels for PCM out */
+
+	unsigned int codec_not_ready_bits;	/* for codec detection */
+
+	int spdif_over_aclink;		/* passed from the module option */
+	struct semaphore open_mutex;	/* playback open mutex */
+};
+
+
+/*
+ */
+static struct pci_device_id snd_atiixp_ids[] = {
+	{ 0x1002, 0x434d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* SB200 */
+	{ 0, }
+};
+
+MODULE_DEVICE_TABLE(pci, snd_atiixp_ids);
+
+
+/*
+ * lowlevel functions
+ */
+
+/*
+ * update the bits of the given register.
+ * return 1 if the bits changed.
+ */
+static int snd_atiixp_update_bits(atiixp_t *chip, unsigned int reg,
+				 unsigned int mask, unsigned int value)
+{
+	unsigned long addr = chip->remap_addr + reg;
+	unsigned int data, old_data;
+	old_data = data = readl(addr);
+	data &= ~mask;
+	data |= value;
+	if (old_data == data)
+		return 0;
+	writel(data, addr);
+	return 1;
+}
+
+/*
+ * macros for easy use
+ */
+#define atiixp_write(chip,reg,value) \
+	writel(value, chip->remap_addr + ATI_REG_##reg)
+#define atiixp_read(chip,reg) \
+	readl(chip->remap_addr + ATI_REG_##reg)
+#define atiixp_update(chip,reg,mask,val) \
+	snd_atiixp_update_bits(chip, ATI_REG_##reg, mask, val)
+
+/* delay for one tick */
+#define do_delay() do { \
+	set_current_state(TASK_UNINTERRUPTIBLE); \
+	schedule_timeout(1); \
+} while (0)
+
+
+/*
+ * handling DMA packets
+ *
+ * we allocate a linear buffer for the DMA, and split it to  each packet.
+ * in a future version, a scatter-gather buffer should be implemented.
+ */
+
+#define ATI_DESC_LIST_SIZE \
+	PAGE_ALIGN(ATI_MAX_DESCRIPTORS * sizeof(atiixp_dma_desc_t))
+
+/*
+ * build packets ring for the given buffer size.
+ *
+ * IXP handles the buffer descriptors, which are connected as a linked
+ * list.  although we can change the list dynamically, in this version,
+ * a static RING of buffer descriptors is used.
+ *
+ * the ring is built in this function, and is set up to the hardware. 
+ */
+static int atiixp_build_dma_packets(atiixp_t *chip, atiixp_dma_t *dma,
+				   snd_pcm_substream_t *substream,
+				   unsigned int periods,
+				   unsigned int period_bytes)
+{
+	unsigned int i;
+	u32 addr, desc_addr;
+	unsigned long flags;
+
+	if (periods > ATI_MAX_DESCRIPTORS)
+		return -ENOMEM;
+
+	if (dma->desc_buf.area == NULL) {
+		if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(chip->pci),
+					ATI_DESC_LIST_SIZE, &dma->desc_buf) < 0)
+			return -ENOMEM;
+		dma->period_bytes = dma->periods = 0; /* clear */
+	}
+
+	if (dma->periods == periods && dma->period_bytes == period_bytes)
+		return 0;
+
+	/* reset DMA before changing the descriptor table */
+	spin_lock_irqsave(&chip->reg_lock, flags);
+	writel(0, chip->remap_addr + dma->ops->llp_offset);
+	dma->ops->enable_dma(chip, 0);
+	dma->ops->enable_dma(chip, 1);
+	spin_unlock_irqrestore(&chip->reg_lock, flags);
+
+	/* fill the entries */
+	addr = (u32)substream->runtime->dma_addr;
+	desc_addr = (u32)dma->desc_buf.addr;
+	for (i = 0; i < periods; i++) {
+		atiixp_dma_desc_t *desc = &((atiixp_dma_desc_t *)dma->desc_buf.area)[i];
+		desc->addr = cpu_to_le32(addr);
+		desc->status = 0;
+		desc->size = period_bytes >> 2; /* in dwords */
+		desc_addr += sizeof(atiixp_dma_desc_t);
+		if (i == periods - 1)
+			desc->next = cpu_to_le32((u32)dma->desc_buf.addr);
+		else
+			desc->next = cpu_to_le32(desc_addr);
+		addr += period_bytes;
+	}
+
+	writel((u32)dma->desc_buf.addr | ATI_REG_LINKPTR_EN,
+	       chip->remap_addr + dma->ops->llp_offset);
+
+	dma->period_bytes = period_bytes;
+	dma->periods = periods;
+
+	return 0;
+}
+
+/*
+ * remove the ring buffer and release it if assigned
+ */
+static void atiixp_clear_dma_packets(atiixp_t *chip, atiixp_dma_t *dma, snd_pcm_substream_t *substream)
+{
+	if (dma->desc_buf.area) {
+		writel(0, chip->remap_addr + dma->ops->llp_offset);
+		snd_dma_free_pages(&dma->desc_buf);
+		dma->desc_buf.area = NULL;
+	}
+}
+
+/*
+ * AC97 interface
+ */
+static int snd_atiixp_acquire_codec(atiixp_t *chip)
+{
+	int timeout = 1000;
+
+	while (atiixp_read(chip, PHYS_OUT_ADDR) & ATI_REG_PHYS_OUT_ADDR_EN) {
+		if (! timeout--) {
+			snd_printk(KERN_WARNING "atiixp: codec acquire timeout\n");
+			return -EBUSY;
+		}
+		udelay(1);
+	}
+	return 0;
+}
+
+static unsigned short snd_atiixp_codec_read(atiixp_t *chip, unsigned short codec, unsigned short reg)
+{
+	unsigned int data;
+	int timeout;
+
+	if (snd_atiixp_acquire_codec(chip) < 0)
+		return 0xffff;
+	data = (reg << ATI_REG_PHYS_OUT_ADDR_SHIFT) |
+		ATI_REG_PHYS_OUT_ADDR_EN |
+		ATI_REG_PHYS_OUT_RW |
+		codec;
+	atiixp_write(chip, PHYS_OUT_ADDR, data);
+	if (snd_atiixp_acquire_codec(chip) < 0)
+		return 0xffff;
+	timeout = 1000;
+	do {
+		data = atiixp_read(chip, PHYS_IN_ADDR);
+		if (data & ATI_REG_PHYS_IN_READ_FLAG)
+			return data >> ATI_REG_PHYS_IN_DATA_SHIFT;
+		udelay(1);
+	} while (--timeout);
+	/* time out may happen during reset */
+	if (reg < 0x7c)
+		snd_printk(KERN_WARNING "atiixp: codec read timeout (reg %x)\n", reg);
+	return 0xffff;
+}
+
+
+static void snd_atiixp_codec_write(atiixp_t *chip, unsigned short codec, unsigned short reg, unsigned short val)
+{
+	unsigned int data;
+    
+	if (snd_atiixp_acquire_codec(chip) < 0)
+		return;
+	data = ((unsigned int)val << ATI_REG_PHYS_OUT_DATA_SHIFT) |
+		((unsigned int)reg << ATI_REG_PHYS_OUT_ADDR_SHIFT) |
+		ATI_REG_PHYS_OUT_ADDR_EN | codec;
+	atiixp_write(chip, PHYS_OUT_ADDR, data);
+}
+
+
+static unsigned short snd_atiixp_ac97_read(ac97_t *ac97, unsigned short reg)
+{
+	atiixp_t *chip = ac97->private_data;
+	unsigned short data;
+	spin_lock(&chip->ac97_lock);
+	data = snd_atiixp_codec_read(chip, ac97->num, reg);
+	spin_unlock(&chip->ac97_lock);
+	return data;
+    
+}
+
+static void snd_atiixp_ac97_write(ac97_t *ac97, unsigned short reg, unsigned short val)
+{
+	atiixp_t *chip = ac97->private_data;
+	spin_lock(&chip->ac97_lock);
+	snd_atiixp_codec_write(chip, ac97->num, reg, val);
+	spin_unlock(&chip->ac97_lock);
+}
+
+/*
+ * reset AC link
+ */
+static int snd_atiixp_aclink_reset(atiixp_t *chip)
+{
+	int timeout;
+
+	/* reset powerdoewn */
+	if (atiixp_update(chip, CMD, ATI_REG_CMD_POWERDOWN, 0))
+		udelay(10);
+
+	/* perform a software reset */
+	atiixp_update(chip, CMD, ATI_REG_CMD_AC_SOFT_RESET, ATI_REG_CMD_AC_SOFT_RESET);
+	atiixp_read(chip, CMD);
+	udelay(10);
+	atiixp_update(chip, CMD, ATI_REG_CMD_AC_SOFT_RESET, 0);
+    
+	timeout = 10;
+	while (! (atiixp_read(chip, CMD) & ATI_REG_CMD_ACLINK_ACTIVE)) {
+		/* do a hard reset */
+		atiixp_update(chip, CMD, ATI_REG_CMD_AC_SYNC|ATI_REG_CMD_AC_RESET,
+			      ATI_REG_CMD_AC_SYNC);
+		atiixp_read(chip, CMD);
+		do_delay();
+		atiixp_update(chip, CMD, ATI_REG_CMD_AC_RESET, ATI_REG_CMD_AC_RESET);
+		if (--timeout) {
+			snd_printk(KERN_ERR "atiixp: codec reset timeout\n");
+			break;
+		}
+	}
+
+	/* deassert RESET and assert SYNC to make sure */
+	atiixp_update(chip, CMD, ATI_REG_CMD_AC_SYNC|ATI_REG_CMD_AC_RESET,
+		      ATI_REG_CMD_AC_SYNC|ATI_REG_CMD_AC_RESET);
+
+	return 0;
+}
+
+#ifdef CONFIG_PM
+static int snd_atiixp_aclink_down(atiixp_t *chip)
+{
+	// if (atiixp_read(chip, MODEM_MIRROR) & 0x1) /* modem running, too? */
+	//	return -EBUSY;
+	atiixp_update(chip, CMD,
+		     ATI_REG_CMD_POWERDOWN | ATI_REG_CMD_AC_RESET,
+		     ATI_REG_CMD_POWERDOWN);
+	return 0;
+}
+#endif
+
+/*
+ * auto-detection of codecs
+ *
+ * the IXP chip can generate interrupts for the non-existing codecs.
+ * NEW_FRAME interrupt is used to make sure that the interrupt is generated
+ * even if all three codecs are connected.
+ */
+
+#define ALL_CODEC_NOT_READY \
+	    (ATI_REG_ISR_CODEC0_NOT_READY |\
+	     ATI_REG_ISR_CODEC1_NOT_READY |\
+	     ATI_REG_ISR_CODEC2_NOT_READY)
+#define CODEC_CHECK_BITS (ALL_CODEC_NOT_READY|ATI_REG_ISR_NEW_FRAME)
+
+static int snd_atiixp_codec_detect(atiixp_t *chip)
+{
+	int timeout;
+
+	chip->codec_not_ready_bits = 0;
+	atiixp_write(chip, IER, CODEC_CHECK_BITS);
+	/* wait for the interrupts */
+	timeout = HZ / 10;
+	while (timeout-- > 0) {
+		do_delay();
+		if (chip->codec_not_ready_bits)
+			break;
+	}
+	atiixp_write(chip, IER, 0); /* disable irqs */
+
+	if ((chip->codec_not_ready_bits & ALL_CODEC_NOT_READY) == ALL_CODEC_NOT_READY) {
+		snd_printk(KERN_ERR "atiixp: no codec detected!\n");
+		return -ENXIO;
+	}
+	return 0;
+}
+
+
+/*
+ * enable DMA and irqs
+ */
+static int snd_atiixp_chip_start(atiixp_t *chip)
+{
+	unsigned int reg;
+
+	/* set up spdif, enable burst mode */
+	reg = atiixp_read(chip, CMD);
+	reg |= ATI_REG_CMD_BURST_EN;
+	atiixp_write(chip, CMD, reg);
+
+	/* clear all interrupt source */
+	atiixp_write(chip, ISR, 0xffffffff);
+	/* enable irqs */
+	atiixp_write(chip, IER,
+		     ATI_REG_IER_MODEM_STATUS_EN |
+		     ATI_REG_IER_MODEM_IN_XRUN_EN |
+		     ATI_REG_IER_MODEM_OUT1_XRUN_EN);
+	return 0;
+}
+
+
+/*
+ * disable DMA and IRQs
+ */
+static int snd_atiixp_chip_stop(atiixp_t *chip)
+{
+	/* clear interrupt source */
+	atiixp_write(chip, ISR, atiixp_read(chip, ISR));
+	/* disable irqs */
+	atiixp_write(chip, IER, 0);
+	return 0;
+}
+
+
+/*
+ * PCM section
+ */
+
+/*
+ * pointer callback simplly reads XXX_DMA_DT_CUR register as the current
+ * position.  when SG-buffer is implemented, the offset must be calculated
+ * correctly...
+ */
+static snd_pcm_uframes_t snd_atiixp_pcm_pointer(snd_pcm_substream_t *substream)
+{
+	atiixp_t *chip = snd_pcm_substream_chip(substream);
+	snd_pcm_runtime_t *runtime = substream->runtime;
+	atiixp_dma_t *dma = (atiixp_dma_t *)runtime->private_data;
+	unsigned int curptr;
+
+	spin_lock(&chip->reg_lock);
+	curptr = readl(chip->remap_addr + dma->ops->dt_cur);
+	if (curptr < dma->buf_addr) {
+		snd_printdd("curptr = %x, base = %x\n", curptr, dma->buf_addr);
+		curptr = 0;
+	} else {
+		curptr -= dma->buf_addr;
+		if (curptr >= dma->buf_bytes) {
+			snd_printdd("curptr = %x, size = %x\n", curptr, dma->buf_bytes);
+			curptr = 0;
+		}
+	}
+	spin_unlock(&chip->reg_lock);
+	return bytes_to_frames(runtime, curptr);
+}
+
+/*
+ * XRUN detected, and stop the PCM substream
+ */
+static void snd_atiixp_xrun_dma(atiixp_t *chip, atiixp_dma_t *dma)
+{
+	if (! dma->substream || ! dma->running)
+		return;
+	snd_printdd("atiixp: XRUN detected (DMA %d)\n", dma->ops->type);
+	snd_pcm_stop(dma->substream, SNDRV_PCM_STATE_XRUN);
+}
+
+/*
+ * the period ack.  update the substream.
+ */
+static void snd_atiixp_update_dma(atiixp_t *chip, atiixp_dma_t *dma)
+{
+	if (! dma->substream || ! dma->running)
+		return;
+	snd_pcm_period_elapsed(dma->substream);
+}
+
+/* set BUS_BUSY interrupt bit if any DMA is running */
+/* call with spinlock held */
+static void snd_atiixp_check_bus_busy(atiixp_t *chip)
+{
+	unsigned int bus_busy;
+	if (atiixp_read(chip, CMD) & (ATI_REG_CMD_MODEM_SEND1_EN |
+				      ATI_REG_CMD_MODEM_RECEIVE_EN))
+		bus_busy = ATI_REG_IER_MODEM_SET_BUS_BUSY;
+	else
+		bus_busy = 0;
+	atiixp_update(chip, IER, ATI_REG_IER_MODEM_SET_BUS_BUSY, bus_busy);
+}
+
+/* common trigger callback
+ * calling the lowlevel callbacks in it
+ */
+static int snd_atiixp_pcm_trigger(snd_pcm_substream_t *substream, int cmd)
+{
+	atiixp_t *chip = snd_pcm_substream_chip(substream);
+	atiixp_dma_t *dma = (atiixp_dma_t *)substream->runtime->private_data;
+	unsigned int reg = 0;
+	int i;
+
+	snd_assert(dma->ops->enable_transfer && dma->ops->flush_dma, return -EINVAL);
+
+	if (cmd != SNDRV_PCM_TRIGGER_START && cmd != SNDRV_PCM_TRIGGER_STOP)
+		return -EINVAL;
+
+	spin_lock(&chip->reg_lock);
+
+	/* hook off/on: via GPIO_OUT */
+	for (i = 0; i < NUM_ATI_CODECS; i++) {
+		if (chip->ac97[i]) {
+			reg = snd_ac97_read(chip->ac97[i], AC97_GPIO_STATUS);
+			break;
+	}
+	}
+	if(cmd == SNDRV_PCM_TRIGGER_START)
+		reg |= AC97_GPIO_LINE1_OH;
+	else
+		reg &= ~AC97_GPIO_LINE1_OH;
+	reg = (reg << ATI_REG_MODEM_OUT_GPIO_DATA_SHIFT) | ATI_REG_MODEM_OUT_GPIO_EN ;
+	atiixp_write(chip, MODEM_OUT_GPIO, reg);
+
+	if (cmd == SNDRV_PCM_TRIGGER_START) {
+		dma->ops->enable_transfer(chip, 1);
+		dma->running = 1;
+	} else {
+		dma->ops->enable_transfer(chip, 0);
+		dma->running = 0;
+	}
+	snd_atiixp_check_bus_busy(chip);
+	if (cmd == SNDRV_PCM_TRIGGER_STOP) {
+		dma->ops->flush_dma(chip);
+		snd_atiixp_check_bus_busy(chip);
+	}
+	spin_unlock(&chip->reg_lock);
+	return 0;
+}
+
+
+/*
+ * lowlevel callbacks for each DMA type
+ *
+ * every callback is supposed to be called in chip->reg_lock spinlock
+ */
+
+/* flush FIFO of analog OUT DMA */
+static void atiixp_out_flush_dma(atiixp_t *chip)
+{
+	atiixp_write(chip, MODEM_FIFO_FLUSH, ATI_REG_MODEM_FIFO_OUT1_FLUSH);
+}
+
+/* enable/disable analog OUT DMA */
+static void atiixp_out_enable_dma(atiixp_t *chip, int on)
+{
+	unsigned int data;
+	data = atiixp_read(chip, CMD);
+	if (on) {
+		if (data & ATI_REG_CMD_MODEM_OUT_DMA1_EN)
+			return;
+		atiixp_out_flush_dma(chip);
+		data |= ATI_REG_CMD_MODEM_OUT_DMA1_EN;
+	} else
+		data &= ~ATI_REG_CMD_MODEM_OUT_DMA1_EN;
+	atiixp_write(chip, CMD, data);
+}
+
+/* start/stop transfer over OUT DMA */
+static void atiixp_out_enable_transfer(atiixp_t *chip, int on)
+{
+	atiixp_update(chip, CMD, ATI_REG_CMD_MODEM_SEND1_EN,
+		      on ? ATI_REG_CMD_MODEM_SEND1_EN : 0);
+}
+
+/* enable/disable analog IN DMA */
+static void atiixp_in_enable_dma(atiixp_t *chip, int on)
+{
+	atiixp_update(chip, CMD, ATI_REG_CMD_MODEM_IN_DMA_EN,
+		      on ? ATI_REG_CMD_MODEM_IN_DMA_EN : 0);
+}
+
+/* start/stop analog IN DMA */
+static void atiixp_in_enable_transfer(atiixp_t *chip, int on)
+{
+	if (on) {
+		unsigned int data = atiixp_read(chip, CMD);
+		if (! (data & ATI_REG_CMD_MODEM_RECEIVE_EN)) {
+			data |= ATI_REG_CMD_MODEM_RECEIVE_EN;
+			atiixp_write(chip, CMD, data);
+		}
+	} else
+		atiixp_update(chip, CMD, ATI_REG_CMD_MODEM_RECEIVE_EN, 0);
+}
+
+/* flush FIFO of analog IN DMA */
+static void atiixp_in_flush_dma(atiixp_t *chip)
+{
+	atiixp_write(chip, MODEM_FIFO_FLUSH, ATI_REG_MODEM_FIFO_IN_FLUSH);
+}
+
+/* set up slots and formats for analog OUT */
+static int snd_atiixp_playback_prepare(snd_pcm_substream_t *substream)
+{
+	atiixp_t *chip = snd_pcm_substream_chip(substream);
+	unsigned int data;
+
+	spin_lock_irq(&chip->reg_lock);
+	/* set output threshold */
+	data = atiixp_read(chip, MODEM_OUT_FIFO);
+	data &= ~ATI_REG_MODEM_OUT1_DMA_THRESHOLD_MASK;
+	data |= 0x04 << ATI_REG_MODEM_OUT1_DMA_THRESHOLD_SHIFT;
+	atiixp_write(chip, MODEM_OUT_FIFO, data);
+	spin_unlock_irq(&chip->reg_lock);
+	return 0;
+}
+
+/* set up slots and formats for analog IN */
+static int snd_atiixp_capture_prepare(snd_pcm_substream_t *substream)
+{
+	return 0;
+}
+
+/*
+ * hw_params - allocate the buffer and set up buffer descriptors
+ */
+static int snd_atiixp_pcm_hw_params(snd_pcm_substream_t *substream,
+				   snd_pcm_hw_params_t *hw_params)
+{
+	atiixp_t *chip = snd_pcm_substream_chip(substream);
+	atiixp_dma_t *dma = (atiixp_dma_t *)substream->runtime->private_data;
+	int err;
+	int i;
+
+	err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
+	if (err < 0)
+		return err;
+	dma->buf_addr = substream->runtime->dma_addr;
+	dma->buf_bytes = params_buffer_bytes(hw_params);
+
+	err = atiixp_build_dma_packets(chip, dma, substream,
+				       params_periods(hw_params),
+				       params_period_bytes(hw_params));
+	if (err < 0)
+		return err;
+
+	/* set up modem rate */
+	for (i = 0; i < NUM_ATI_CODECS; i++) {
+		if (! chip->ac97[i])
+			continue;
+		snd_ac97_write(chip->ac97[i], AC97_LINE1_RATE, params_rate(hw_params));
+		snd_ac97_write(chip->ac97[i], AC97_LINE1_LEVEL, 0);
+	}
+
+	return err;
+}
+
+static int snd_atiixp_pcm_hw_free(snd_pcm_substream_t * substream)
+{
+	atiixp_t *chip = snd_pcm_substream_chip(substream);
+	atiixp_dma_t *dma = (atiixp_dma_t *)substream->runtime->private_data;
+
+	atiixp_clear_dma_packets(chip, dma, substream);
+	snd_pcm_lib_free_pages(substream);
+	return 0;
+}
+
+
+/*
+ * pcm hardware definition, identical for all DMA types
+ */
+static snd_pcm_hardware_t snd_atiixp_pcm_hw =
+{
+	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
+				 SNDRV_PCM_INFO_BLOCK_TRANSFER |
+				 SNDRV_PCM_INFO_MMAP_VALID),
+	.formats =		SNDRV_PCM_FMTBIT_S16_LE,
+	.rates =		SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_KNOT,
+	.rate_min =		8000,
+	.rate_max =		16000,
+	.channels_min =		2,
+	.channels_max =		2,
+	.buffer_bytes_max =	256 * 1024,
+	.period_bytes_min =	32,
+	.period_bytes_max =	128 * 1024,
+	.periods_min =		2,
+	.periods_max =		ATI_MAX_DESCRIPTORS,
+};
+
+static int snd_atiixp_pcm_open(snd_pcm_substream_t *substream, atiixp_dma_t *dma, int pcm_type)
+{
+	atiixp_t *chip = snd_pcm_substream_chip(substream);
+	snd_pcm_runtime_t *runtime = substream->runtime;
+	int err;
+	static unsigned int rates[] = { 8000,  9600, 12000, 16000 };
+	static snd_pcm_hw_constraint_list_t hw_constraints_rates = {
+		.count = ARRAY_SIZE(rates),
+		.list = rates,
+		.mask = 0,
+	};
+
+	snd_assert(dma->ops && dma->ops->enable_dma, return -EINVAL);
+
+	if (dma->opened)
+		return -EBUSY;
+	dma->substream = substream;
+	runtime->hw = snd_atiixp_pcm_hw;
+	dma->ac97_pcm_type = pcm_type;
+	if ((err = snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &hw_constraints_rates)) < 0)
+		return err;
+	if ((err = snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS)) < 0)
+		return err;
+	runtime->private_data = dma;
+
+	/* enable DMA bits */
+	spin_lock_irq(&chip->reg_lock);
+	dma->ops->enable_dma(chip, 1);
+	spin_unlock_irq(&chip->reg_lock);
+	dma->opened = 1;
+
+	return 0;
+}
+
+static int snd_atiixp_pcm_close(snd_pcm_substream_t *substream, atiixp_dma_t *dma)
+{
+	atiixp_t *chip = snd_pcm_substream_chip(substream);
+	/* disable DMA bits */
+	snd_assert(dma->ops && dma->ops->enable_dma, return -EINVAL);
+	spin_lock_irq(&chip->reg_lock);
+	dma->ops->enable_dma(chip, 0);
+	spin_unlock_irq(&chip->reg_lock);
+	dma->substream = NULL;
+	dma->opened = 0;
+	return 0;
+}
+
+/*
+ */
+static int snd_atiixp_playback_open(snd_pcm_substream_t *substream)
+{
+	atiixp_t *chip = snd_pcm_substream_chip(substream);
+	int err;
+
+	down(&chip->open_mutex);
+	err = snd_atiixp_pcm_open(substream, &chip->dmas[ATI_DMA_PLAYBACK], 0);
+	up(&chip->open_mutex);
+	if (err < 0)
+		return err;
+	return 0;
+}
+
+static int snd_atiixp_playback_close(snd_pcm_substream_t *substream)
+{
+	atiixp_t *chip = snd_pcm_substream_chip(substream);
+	int err;
+	down(&chip->open_mutex);
+	err = snd_atiixp_pcm_close(substream, &chip->dmas[ATI_DMA_PLAYBACK]);
+	up(&chip->open_mutex);
+	return err;
+}
+
+static int snd_atiixp_capture_open(snd_pcm_substream_t *substream)
+{
+	atiixp_t *chip = snd_pcm_substream_chip(substream);
+	return snd_atiixp_pcm_open(substream, &chip->dmas[ATI_DMA_CAPTURE], 1);
+}
+
+static int snd_atiixp_capture_close(snd_pcm_substream_t *substream)
+{
+	atiixp_t *chip = snd_pcm_substream_chip(substream);
+	return snd_atiixp_pcm_close(substream, &chip->dmas[ATI_DMA_CAPTURE]);
+}
+
+
+/* AC97 playback */
+static snd_pcm_ops_t snd_atiixp_playback_ops = {
+	.open =		snd_atiixp_playback_open,
+	.close =	snd_atiixp_playback_close,
+	.ioctl =	snd_pcm_lib_ioctl,
+	.hw_params =	snd_atiixp_pcm_hw_params,
+	.hw_free =	snd_atiixp_pcm_hw_free,
+	.prepare =	snd_atiixp_playback_prepare,
+	.trigger =	snd_atiixp_pcm_trigger,
+	.pointer =	snd_atiixp_pcm_pointer,
+};
+
+/* AC97 capture */
+static snd_pcm_ops_t snd_atiixp_capture_ops = {
+	.open =		snd_atiixp_capture_open,
+	.close =	snd_atiixp_capture_close,
+	.ioctl =	snd_pcm_lib_ioctl,
+	.hw_params =	snd_atiixp_pcm_hw_params,
+	.hw_free =	snd_atiixp_pcm_hw_free,
+	.prepare =	snd_atiixp_capture_prepare,
+	.trigger =	snd_atiixp_pcm_trigger,
+	.pointer =	snd_atiixp_pcm_pointer,
+};
+
+static atiixp_dma_ops_t snd_atiixp_playback_dma_ops = {
+	.type = ATI_DMA_PLAYBACK,
+	.llp_offset = ATI_REG_MODEM_OUT_DMA1_LINKPTR,
+	.dt_cur = ATI_REG_MODEM_OUT_DMA1_DT_CUR,
+	.enable_dma = atiixp_out_enable_dma,
+	.enable_transfer = atiixp_out_enable_transfer,
+	.flush_dma = atiixp_out_flush_dma,
+};
+	
+static atiixp_dma_ops_t snd_atiixp_capture_dma_ops = {
+	.type = ATI_DMA_CAPTURE,
+	.llp_offset = ATI_REG_MODEM_IN_DMA_LINKPTR,
+	.dt_cur = ATI_REG_MODEM_IN_DMA_DT_CUR,
+	.enable_dma = atiixp_in_enable_dma,
+	.enable_transfer = atiixp_in_enable_transfer,
+	.flush_dma = atiixp_in_flush_dma,
+};
+
+static int __devinit snd_atiixp_pcm_new(atiixp_t *chip)
+{
+	snd_pcm_t *pcm;
+	int err;
+
+	/* initialize constants */
+	chip->dmas[ATI_DMA_PLAYBACK].ops = &snd_atiixp_playback_dma_ops;
+	chip->dmas[ATI_DMA_CAPTURE].ops = &snd_atiixp_capture_dma_ops;
+
+	/* PCM #0: analog I/O */
+	err = snd_pcm_new(chip->card, "ATI IXP MC97", ATI_PCMDEV_ANALOG, 1, 1, &pcm);
+	if (err < 0)
+		return err;
+	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_atiixp_playback_ops);
+	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_atiixp_capture_ops);
+	pcm->private_data = chip;
+	strcpy(pcm->name, "ATI IXP MC97");
+	chip->pcmdevs[ATI_PCMDEV_ANALOG] = pcm;
+
+	snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
+					      snd_dma_pci_data(chip->pci), 64*1024, 128*1024);
+
+	return 0;
+}
+
+
+
+/*
+ * interrupt handler
+ */
+static irqreturn_t snd_atiixp_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+{
+	atiixp_t *chip = dev_id;
+	unsigned int status;
+
+	status = atiixp_read(chip, ISR);
+
+	if (! status)
+		return IRQ_NONE;
+
+	/* process audio DMA */
+	if (status & ATI_REG_ISR_MODEM_OUT1_XRUN)
+		snd_atiixp_xrun_dma(chip,  &chip->dmas[ATI_DMA_PLAYBACK]);
+	else if (status & ATI_REG_ISR_MODEM_OUT1_STATUS)
+		snd_atiixp_update_dma(chip, &chip->dmas[ATI_DMA_PLAYBACK]);
+	if (status & ATI_REG_ISR_MODEM_IN_XRUN)
+		snd_atiixp_xrun_dma(chip,  &chip->dmas[ATI_DMA_CAPTURE]);
+	else if (status & ATI_REG_ISR_MODEM_IN_STATUS)
+		snd_atiixp_update_dma(chip, &chip->dmas[ATI_DMA_CAPTURE]);
+
+	/* for codec detection */
+	if (status & CODEC_CHECK_BITS) {
+		unsigned int detected;
+		detected = status & CODEC_CHECK_BITS;
+		spin_lock(&chip->reg_lock);
+		chip->codec_not_ready_bits |= detected;
+		atiixp_update(chip, IER, detected, 0); /* disable the detected irqs */
+		spin_unlock(&chip->reg_lock);
+	}
+
+	/* ack */
+	atiixp_write(chip, ISR, status);
+
+	return IRQ_HANDLED;
+}
+
+
+/*
+ * ac97 mixer section
+ */
+
+static int __devinit snd_atiixp_mixer_new(atiixp_t *chip, int clock)
+{
+	ac97_bus_t *pbus;
+	ac97_template_t ac97;
+	int i, err;
+	int codec_count;
+	static ac97_bus_ops_t ops = {
+		.write = snd_atiixp_ac97_write,
+		.read = snd_atiixp_ac97_read,
+	};
+	static unsigned int codec_skip[NUM_ATI_CODECS] = {
+		ATI_REG_ISR_CODEC0_NOT_READY,
+		ATI_REG_ISR_CODEC1_NOT_READY,
+		ATI_REG_ISR_CODEC2_NOT_READY,
+	};
+
+	if (snd_atiixp_codec_detect(chip) < 0)
+		return -ENXIO;
+
+	if ((err = snd_ac97_bus(chip->card, 0, &ops, chip, &pbus)) < 0)
+		return err;
+	pbus->clock = clock;
+	pbus->shared_type = AC97_SHARED_TYPE_ATIIXP;	/* shared with audio driver */
+	chip->ac97_bus = pbus;
+
+	codec_count = 0;
+	for (i = 0; i < NUM_ATI_CODECS; i++) {
+		if (chip->codec_not_ready_bits & codec_skip[i])
+			continue;
+		memset(&ac97, 0, sizeof(ac97));
+		ac97.private_data = chip;
+		ac97.pci = chip->pci;
+		ac97.num = i;
+		ac97.scaps = AC97_SCAP_SKIP_AUDIO;
+		if ((err = snd_ac97_mixer(pbus, &ac97, &chip->ac97[i])) < 0) {
+			chip->ac97[i] = NULL; /* to be sure */
+			snd_printdd("atiixp: codec %d not available for modem\n", i);
+			continue;
+		}
+		codec_count++;
+	}
+
+	if (! codec_count) {
+		snd_printk(KERN_ERR "atiixp: no codec available\n");
+		return -ENODEV;
+	}
+
+	/* snd_ac97_tune_hardware(chip->ac97, ac97_quirks); */
+
+	return 0;
+}
+
+
+#ifdef CONFIG_PM
+/*
+ * power management
+ */
+static int snd_atiixp_suspend(snd_card_t *card, unsigned int state)
+{
+	atiixp_t *chip = card->pm_private_data;
+	int i;
+
+	for (i = 0; i < NUM_ATI_PCMDEVS; i++)
+		if (chip->pcmdevs[i])
+			snd_pcm_suspend_all(chip->pcmdevs[i]);
+	for (i = 0; i < NUM_ATI_CODECS; i++)
+		if (chip->ac97[i])
+			snd_ac97_suspend(chip->ac97[i]);
+	snd_atiixp_aclink_down(chip);
+	snd_atiixp_chip_stop(chip);
+
+	pci_set_power_state(chip->pci, 3);
+	pci_disable_device(chip->pci);
+	snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
+	return 0;
+}
+
+static int snd_atiixp_resume(snd_card_t *card, unsigned int state)
+{
+	atiixp_t *chip = card->pm_private_data;
+	int i;
+
+	pci_enable_device(chip->pci);
+	pci_set_power_state(chip->pci, 0);
+
+	snd_atiixp_aclink_reset(chip);
+	snd_atiixp_chip_start(chip);
+
+	for (i = 0; i < NUM_ATI_CODECS; i++)
+		if (chip->ac97[i])
+			snd_ac97_resume(chip->ac97[i]);
+
+	snd_power_change_state(card, SNDRV_CTL_POWER_D0);
+	return 0;
+}
+#endif /* CONFIG_PM */
+
+
+/*
+ * proc interface for register dump
+ */
+
+static void snd_atiixp_proc_read(snd_info_entry_t *entry, snd_info_buffer_t *buffer)
+{
+	atiixp_t *chip = entry->private_data;
+	int i;
+
+	for (i = 0; i < 256; i += 4)
+		snd_iprintf(buffer, "%02x: %08x\n", i, readl(chip->remap_addr + i));
+}
+
+static void __devinit snd_atiixp_proc_init(atiixp_t *chip)
+{
+	snd_info_entry_t *entry;
+
+	if (! snd_card_proc_new(chip->card, "atiixp", &entry))
+		snd_info_set_text_ops(entry, chip, 1024, snd_atiixp_proc_read);
+}
+
+
+
+/*
+ * destructor
+ */
+
+static int snd_atiixp_free(atiixp_t *chip)
+{
+	if (chip->irq < 0)
+		goto __hw_end;
+	snd_atiixp_chip_stop(chip);
+	synchronize_irq(chip->irq);
+      __hw_end:
+	if (chip->irq >= 0)
+		free_irq(chip->irq, (void *)chip);
+	if (chip->remap_addr)
+		iounmap((void *) chip->remap_addr);
+	pci_release_regions(chip->pci);
+	kfree(chip);
+	return 0;
+}
+
+static int snd_atiixp_dev_free(snd_device_t *device)
+{
+	atiixp_t *chip = device->device_data;
+	return snd_atiixp_free(chip);
+}
+
+/*
+ * constructor for chip instance
+ */
+static int __devinit snd_atiixp_create(snd_card_t *card,
+				      struct pci_dev *pci,
+				      atiixp_t **r_chip)
+{
+	static snd_device_ops_t ops = {
+		.dev_free =	snd_atiixp_dev_free,
+	};
+	atiixp_t *chip;
+	int err;
+
+	if ((err = pci_enable_device(pci)) < 0)
+		return err;
+
+	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
+	if (chip == NULL)
+		return -ENOMEM;
+
+	spin_lock_init(&chip->reg_lock);
+	spin_lock_init(&chip->ac97_lock);
+	init_MUTEX(&chip->open_mutex);
+	chip->card = card;
+	chip->pci = pci;
+	chip->irq = -1;
+	if ((err = pci_request_regions(pci, "ATI IXP MC97")) < 0) {
+		kfree(chip);
+		return err;
+	}
+	chip->addr = pci_resource_start(pci, 0);
+	chip->remap_addr = (unsigned long) ioremap_nocache(chip->addr, pci_resource_len(pci, 0));
+	if (chip->remap_addr == 0) {
+		snd_printk(KERN_ERR "AC'97 space ioremap problem\n");
+		snd_atiixp_free(chip);
+		return -EIO;
+	}
+
+	if (request_irq(pci->irq, snd_atiixp_interrupt, SA_INTERRUPT|SA_SHIRQ, card->shortname, (void *)chip)) {
+		snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
+		snd_atiixp_free(chip);
+		return -EBUSY;
+	}
+	chip->irq = pci->irq;
+	pci_set_master(pci);
+	synchronize_irq(chip->irq);
+
+	if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) {
+		snd_atiixp_free(chip);
+		return err;
+	}
+
+	snd_card_set_dev(card, &pci->dev);
+
+	*r_chip = chip;
+	return 0;
+}
+
+
+static int __devinit snd_atiixp_probe(struct pci_dev *pci,
+				      const struct pci_device_id *pci_id)
+{
+	static int dev;
+	snd_card_t *card;
+	atiixp_t *chip;
+	unsigned char revision;
+	int err;
+
+	if (dev >= SNDRV_CARDS)
+		return -ENODEV;
+	if (!enable[dev]) {
+		dev++;
+		return -ENOENT;
+	}
+
+	card = snd_card_new(index[dev], id[dev], THIS_MODULE, 0);
+	if (card == NULL)
+		return -ENOMEM;
+
+	pci_read_config_byte(pci, PCI_REVISION_ID, &revision);
+
+	strcpy(card->driver, "ATIIXP-MODEM");
+	strcpy(card->shortname, "ATI IXP Modem");
+	if ((err = snd_atiixp_create(card, pci, &chip)) < 0)
+		goto __error;
+
+	if ((err = snd_atiixp_aclink_reset(chip)) < 0)
+		goto __error;
+
+	if ((err = snd_atiixp_mixer_new(chip, ac97_clock[dev])) < 0)
+		goto __error;
+
+	if ((err = snd_atiixp_pcm_new(chip)) < 0)
+		goto __error;
+	
+	snd_atiixp_proc_init(chip);
+
+	snd_atiixp_chip_start(chip);
+
+	sprintf(card->longname, "%s rev %x at 0x%lx, irq %i",
+		card->shortname, revision, chip->addr, chip->irq);
+
+	snd_card_set_pm_callback(card, snd_atiixp_suspend, snd_atiixp_resume, chip);
+
+	if ((err = snd_card_register(card)) < 0)
+		goto __error;
+
+	pci_set_drvdata(pci, card);
+	dev++;
+	return 0;
+
+ __error:
+	snd_card_free(card);
+	return err;
+}
+
+static void __devexit snd_atiixp_remove(struct pci_dev *pci)
+{
+	snd_card_free(pci_get_drvdata(pci));
+	pci_set_drvdata(pci, NULL);
+}
+
+static struct pci_driver driver = {
+	.name = "ATI IXP MC97 controller",
+	.id_table = snd_atiixp_ids,
+	.probe = snd_atiixp_probe,
+	.remove = __devexit_p(snd_atiixp_remove),
+	SND_PCI_PM_CALLBACKS
+};
+
+
+static int __init alsa_card_atiixp_init(void)
+{
+	return pci_module_init(&driver);
+}
+
+static void __exit alsa_card_atiixp_exit(void)
+{
+	pci_unregister_driver(&driver);
+}
+
+module_init(alsa_card_atiixp_init)
+module_exit(alsa_card_atiixp_exit)
diff -Nru a/sound/pci/au88x0/au88x0.c b/sound/pci/au88x0/au88x0.c
--- a/sound/pci/au88x0/au88x0.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/au88x0/au88x0.c	2004-08-04 17:48:49 -07:00
@@ -31,23 +31,16 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(pcifix, int, boot_devs, 0444);
 MODULE_PARM_DESC(pcifix, "Enable VIA-workaround for " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(pcifix,
-		   SNDRV_ENABLED
-		   ",allows:{{0,Disabled},{1,Latency},{2,Bridge},{3,Both},{255,Auto}},default:4,dialog:check");
 
 MODULE_DESCRIPTION("Aureal vortex");
-MODULE_CLASSES("{sound}");
 MODULE_LICENSE("GPL");
-MODULE_DEVICES("{{Aureal Semiconductor Inc., Aureal Vortex Sound Processor}}");
+MODULE_SUPPORTED_DEVICE("{{Aureal Semiconductor Inc., Aureal Vortex Sound Processor}}");
 
 MODULE_DEVICE_TABLE(pci, snd_vortex_ids);
 
@@ -122,8 +115,7 @@
 // (see "Management of Cards and Components")
 static int snd_vortex_dev_free(snd_device_t * device)
 {
-	vortex_t *vortex = snd_magic_cast(vortex_t, device->device_data,
-					  return -ENXIO);
+	vortex_t *vortex = device->device_data;
 
 	vortex_gameport_unregister(vortex);
 	vortex_core_shutdown(vortex);
@@ -132,7 +124,7 @@
 	free_irq(vortex->irq, vortex);
 	pci_release_regions(vortex->pci_dev);
 	pci_disable_device(vortex->pci_dev);
-	snd_magic_kfree(vortex);
+	kfree(vortex);
 
 	return 0;
 }
@@ -159,7 +151,7 @@
 	}
 	pci_set_dma_mask(pci, VORTEX_DMA_MASK);
 
-	chip = snd_magic_kcalloc(vortex_t, 0, GFP_KERNEL);
+	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
 	if (chip == NULL)
 		return -ENOMEM;
 
diff -Nru a/sound/pci/au88x0/au88x0.h b/sound/pci/au88x0/au88x0.h
--- a/sound/pci/au88x0/au88x0.h	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/au88x0/au88x0.h	2004-08-04 17:48:49 -07:00
@@ -180,8 +180,6 @@
 	u8 rev;
 };
 
-#define chip_t vortex_t
-
 /* Functions. */
 
 /* SRC */
diff -Nru a/sound/pci/au88x0/au88x0_a3d.c b/sound/pci/au88x0/au88x0_a3d.c
--- a/sound/pci/au88x0/au88x0_a3d.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/au88x0/au88x0_a3d.c	2004-08-04 17:48:49 -07:00
@@ -567,7 +567,7 @@
 	v->xt_mode = mode;	/* this_14 */
 
 	vortex_XtalkHw_init(v);
-	vortex_XtalkHw_SetGains(v, asXtalkGainsAllChan);
+	vortex_XtalkHw_SetGains(v, vortex_asXtalkGainsAllChan);
 	switch (v->xt_mode) {
 	case XT_SPEAKER0:
 		vortex_XtalkHw_ProgramXtalkNarrow(v);
@@ -862,9 +862,8 @@
 	/* HRTF controls. */
 	for (i = 0; i < NR_A3D; i++) {
 		if ((kcontrol =
-		     snd_ctl_new1(&vortex_a3d_kcontrol, vortex)) == NULL)
+		     snd_ctl_new1(&vortex_a3d_kcontrol, &vortex->a3d[i])) == NULL)
 			return -ENOMEM;
-		kcontrol->private_data = &vortex->a3d[i];
 		kcontrol->id.numid = CTRLID_HRTF;
 		kcontrol->info = snd_vortex_a3d_hrtf_info;
 		kcontrol->put = snd_vortex_a3d_hrtf_put;
@@ -874,9 +873,8 @@
 	/* ITD controls. */
 	for (i = 0; i < NR_A3D; i++) {
 		if ((kcontrol =
-		     snd_ctl_new1(&vortex_a3d_kcontrol, vortex)) == NULL)
+		     snd_ctl_new1(&vortex_a3d_kcontrol, &vortex->a3d[i])) == NULL)
 			return -ENOMEM;
-		kcontrol->private_data = &vortex->a3d[i];
 		kcontrol->id.numid = CTRLID_ITD;
 		kcontrol->info = snd_vortex_a3d_itd_info;
 		kcontrol->put = snd_vortex_a3d_itd_put;
@@ -886,9 +884,8 @@
 	/* ILD (gains) controls. */
 	for (i = 0; i < NR_A3D; i++) {
 		if ((kcontrol =
-		     snd_ctl_new1(&vortex_a3d_kcontrol, vortex)) == NULL)
+		     snd_ctl_new1(&vortex_a3d_kcontrol, &vortex->a3d[i])) == NULL)
 			return -ENOMEM;
-		kcontrol->private_data = &vortex->a3d[i];
 		kcontrol->id.numid = CTRLID_GAINS;
 		kcontrol->info = snd_vortex_a3d_ild_info;
 		kcontrol->put = snd_vortex_a3d_ild_put;
@@ -898,9 +895,8 @@
 	/* Filter controls. */
 	for (i = 0; i < NR_A3D; i++) {
 		if ((kcontrol =
-		     snd_ctl_new1(&vortex_a3d_kcontrol, vortex)) == NULL)
+		     snd_ctl_new1(&vortex_a3d_kcontrol, &vortex->a3d[i])) == NULL)
 			return -ENOMEM;
-		kcontrol->private_data = &vortex->a3d[i];
 		kcontrol->id.numid = CTRLID_FILTER;
 		kcontrol->info = snd_vortex_a3d_filter_info;
 		kcontrol->put = snd_vortex_a3d_filter_put;
diff -Nru a/sound/pci/au88x0/au88x0_core.c b/sound/pci/au88x0/au88x0_core.c
--- a/sound/pci/au88x0/au88x0_core.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/au88x0/au88x0_core.c	2004-08-04 17:48:49 -07:00
@@ -2362,7 +2362,7 @@
 
 static irqreturn_t vortex_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	vortex_t *vortex = snd_magic_cast(vortex_t, dev_id, return IRQ_NONE);
+	vortex_t *vortex = dev_id;
 	int i, handled;
 	u32 source;
 
diff -Nru a/sound/pci/au88x0/au88x0_game.c b/sound/pci/au88x0/au88x0_game.c
--- a/sound/pci/au88x0/au88x0_game.c	2004-08-04 17:48:48 -07:00
+++ b/sound/pci/au88x0/au88x0_game.c	2004-08-04 17:48:48 -07:00
@@ -96,7 +96,7 @@
 
 static int vortex_gameport_register(vortex_t * vortex)
 {
-	if ((vortex->gameport = snd_kcalloc(sizeof(struct gameport), GFP_KERNEL)) == NULL) {
+	if ((vortex->gameport = kcalloc(1, sizeof(struct gameport), GFP_KERNEL)) == NULL) {
 		return -1;
 	};
 	
diff -Nru a/sound/pci/au88x0/au88x0_mixer.c b/sound/pci/au88x0/au88x0_mixer.c
--- a/sound/pci/au88x0/au88x0_mixer.c	2004-08-04 17:48:48 -07:00
+++ b/sound/pci/au88x0/au88x0_mixer.c	2004-08-04 17:48:48 -07:00
@@ -13,14 +13,15 @@
 
 static int __devinit snd_vortex_mixer(vortex_t * vortex)
 {
-	ac97_bus_t bus, *pbus;
-	ac97_t ac97;
+	ac97_bus_t *pbus;
+	ac97_template_t ac97;
 	int err;
+	static ac97_bus_ops_t ops = {
+		.write = vortex_codec_write,
+		.read = vortex_codec_read,
+	};
 
-	memset(&bus, 0, sizeof(bus));
-	bus.write = vortex_codec_write;
-	bus.read = vortex_codec_read;
-	if ((err = snd_ac97_bus(vortex->card, &bus, &pbus)) < 0)
+	if ((err = snd_ac97_bus(vortex->card, 0, &ops, NULL, &pbus)) < 0)
 		return err;
 	memset(&ac97, 0, sizeof(ac97));
 	// Intialize AC97 codec stuff.
diff -Nru a/sound/pci/au88x0/au88x0_mpu401.c b/sound/pci/au88x0/au88x0_mpu401.c
--- a/sound/pci/au88x0/au88x0_mpu401.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/au88x0/au88x0_mpu401.c	2004-08-04 17:48:49 -07:00
@@ -104,7 +104,7 @@
 			 ~CTRL_MIDI_PORT) & ~CTRL_MIDI_EN);
 		return temp;
 	}
-	mpu = snd_magic_cast(mpu401_t, rmidi->private_data, return -ENOMEM);
+	mpu = rmidi->private_data;
 	mpu->cport = (unsigned long)(vortex->mmio + (VORTEX_MIDI_CMD >> 2));
 #endif
 	vortex->rmidi = rmidi;
diff -Nru a/sound/pci/au88x0/au88x0_pcm.c b/sound/pci/au88x0/au88x0_pcm.c
--- a/sound/pci/au88x0/au88x0_pcm.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/au88x0/au88x0_pcm.c	2004-08-04 17:48:49 -07:00
@@ -28,7 +28,6 @@
 #include <sound/pcm_params.h>
 #include "au88x0.h"
 
-#define chip_t vortex_t
 #define VORTEX_PCM_TYPE(x) (x->name[40])
 
 /* hardware definition */
@@ -189,7 +188,7 @@
 snd_vortex_pcm_hw_params(snd_pcm_substream_t * substream,
 			 snd_pcm_hw_params_t * hw_params)
 {
-	chip_t *chip = snd_pcm_substream_chip(substream);
+	vortex_t *chip = snd_pcm_substream_chip(substream);
 	stream_t *stream = (stream_t *) (substream->runtime->private_data);
 	snd_pcm_sgbuf_t *sgbuf;
 	int err;
@@ -250,7 +249,7 @@
 /* hw_free callback */
 static int snd_vortex_pcm_hw_free(snd_pcm_substream_t * substream)
 {
-	chip_t *chip = snd_pcm_substream_chip(substream);
+	vortex_t *chip = snd_pcm_substream_chip(substream);
 	stream_t *stream = (stream_t *) (substream->runtime->private_data);
 
 	// Delete audio routes.
@@ -305,7 +304,7 @@
 /* trigger callback */
 static int snd_vortex_pcm_trigger(snd_pcm_substream_t * substream, int cmd)
 {
-	chip_t *chip = snd_pcm_substream_chip(substream);
+	vortex_t *chip = snd_pcm_substream_chip(substream);
 	stream_t *stream = (stream_t *) substream->runtime->private_data;
 	int dma = stream->dma;
 
diff -Nru a/sound/pci/au88x0/au88x0_xtalk.c b/sound/pci/au88x0/au88x0_xtalk.c
--- a/sound/pci/au88x0/au88x0_xtalk.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/au88x0/au88x0_xtalk.c	2004-08-04 17:48:49 -07:00
@@ -61,7 +61,7 @@
 };
 
 // Input gain for 4 A3D slices. One possible input pair is left zero.
-static xtalk_gains_t const asXtalkGainsAllChan = {
+xtalk_gains_t const vortex_asXtalkGainsAllChan = {
 	0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF,
 	0
 	    //0x7FFF,0x7FFF,0x7FFF,0x7FFF,0x7fff,0x7FFF,0x7FFF,0x7FFF,0x7FFF,0x7fff
diff -Nru a/sound/pci/au88x0/au88x0_xtalk.h b/sound/pci/au88x0/au88x0_xtalk.h
--- a/sound/pci/au88x0/au88x0_xtalk.h	2004-08-04 17:48:48 -07:00
+++ b/sound/pci/au88x0/au88x0_xtalk.h	2004-08-04 17:48:48 -07:00
@@ -45,7 +45,7 @@
 typedef short xtalk_coefs_t[5][5];
 typedef short xtalk_state_t[5][4];
 
-extern xtalk_gains_t const asXtalkGainsAllChan;
+extern xtalk_gains_t const vortex_asXtalkGainsAllChan;
 
 static void vortex_XtalkHw_SetGains(vortex_t * vortex,
 				    xtalk_gains_t const gains);
diff -Nru a/sound/pci/azt3328.c b/sound/pci/azt3328.c
--- a/sound/pci/azt3328.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/azt3328.c	2004-08-04 17:48:49 -07:00
@@ -111,8 +111,7 @@
 MODULE_AUTHOR("Andreas Mohr <hw7oshyuv3001@sneakemail.com>");
 MODULE_DESCRIPTION("Aztech AZF3328 (PCI168)");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{Aztech,AZF3328}}");
+MODULE_SUPPORTED_DEVICE("{{Aztech,AZF3328}}");
 
 #if defined(CONFIG_GAMEPORT) || (defined(MODULE) && defined(CONFIG_GAMEPORT_MODULE))
 #define SUPPORT_JOYSTICK 1
@@ -170,35 +169,25 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for AZF3328 soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for AZF3328 soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable AZF3328 soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_INDEX_DESC);
 #ifdef SUPPORT_JOYSTICK
 module_param_array(joystick, bool, boot_devs, 0444);
 MODULE_PARM_DESC(joystick, "Enable joystick for AZF3328 soundcard.");
-MODULE_PARM_SYNTAX(joystick, SNDRV_BOOLEAN_FALSE_DESC);
 #endif
 
 typedef struct _snd_azf3328 azf3328_t;
-#define chip_t azf3328_t
 
 struct _snd_azf3328 {
 	int irq;
 
 	unsigned long codec_port;
-	struct resource *res_codec_port;
 	unsigned long io2_port;
-	struct resource *res_io2_port;
 	unsigned long mpu_port;
-	struct resource *res_mpu_port;
 	unsigned long synth_port;
-	struct resource *res_synth_port;
 	unsigned long mixer_port;
-	struct resource *res_mixer_port;
 
 #ifdef SUPPORT_JOYSTICK
 	struct gameport gameport;
@@ -553,8 +542,6 @@
 	return (nreg != oreg);
 }
 
-#define NUM_CONTROLS(ary) (sizeof(ary) / sizeof(snd_kcontrol_new_t))
-
 static snd_kcontrol_new_t snd_azf3328_mixer_controls[] __devinitdata = {
 	AZF3328_MIXER_SWITCH("Master Playback Switch", IDX_MIXER_PLAY_MASTER, 15, 1),
 	AZF3328_MIXER_VOL_STEREO("Master Playback Volume", IDX_MIXER_PLAY_MASTER, 0x1f, 1),
@@ -650,7 +637,7 @@
 	
 	/* add mixer controls */
 	sw = snd_azf3328_mixer_controls;
-	for (idx = 0; idx < NUM_CONTROLS(snd_azf3328_mixer_controls); idx++, sw++) {
+	for (idx = 0; idx < ARRAY_SIZE(snd_azf3328_mixer_controls); idx++, sw++) {
 		if ((err = snd_ctl_add(chip->card, snd_ctl_new1(sw, chip))) < 0)
 			return err;
 	}
@@ -813,7 +800,6 @@
 
 static int snd_azf3328_playback_trigger(snd_pcm_substream_t * substream, int cmd)
 {
-	unsigned long flags;
 	azf3328_t *chip = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
 	int result = 0;
@@ -830,7 +816,7 @@
 
 		snd_azf3328_setfmt(chip, IDX_IO_PLAY_SOUNDFORMAT, runtime->rate, snd_pcm_format_width(runtime->format), runtime->channels);
 
-		spin_lock_irqsave(&chip->reg_lock, flags);
+		spin_lock(&chip->reg_lock);
 		/* stop playback */
 		status1 = inw(chip->codec_port+IDX_IO_PLAY_FLAGS);
 		status1 &= ~DMA_RESUME;
@@ -838,11 +824,11 @@
 	    
 		/* FIXME: clear interrupts or what??? */
 		outw(0xffff, chip->codec_port+IDX_IO_PLAY_IRQMASK);
-		spin_unlock_irqrestore(&chip->reg_lock, flags);
+		spin_unlock(&chip->reg_lock);
 
 		snd_azf3328_setdmaa(chip, runtime->dma_addr, snd_pcm_lib_period_bytes(substream), snd_pcm_lib_buffer_bytes(substream), 0);
 
-		spin_lock_irqsave(&chip->reg_lock, flags);
+		spin_lock(&chip->reg_lock);
 #ifdef WIN9X
 		/* FIXME: enable playback/recording??? */
 		status1 |= DMA_PLAY_SOMETHING1 | DMA_PLAY_SOMETHING2;
@@ -858,7 +844,7 @@
 		outw(DMA_PLAY_SOMETHING1|DMA_PLAY_SOMETHING2, chip->codec_port+IDX_IO_PLAY_FLAGS);
 		outw(DMA_RESUME|SOMETHING_ALMOST_ALWAYS_SET|DMA_EPILOGUE_SOMETHING|DMA_SOMETHING_ELSE, chip->codec_port+IDX_IO_PLAY_FLAGS);
 #endif
-		spin_unlock_irqrestore(&chip->reg_lock, flags);
+		spin_unlock(&chip->reg_lock);
 
 		/* now unmute WaveOut */
 		snd_azf3328_mixer_set_mute(chip, IDX_MIXER_WAVEOUT, 0);
@@ -870,7 +856,7 @@
 		/* mute WaveOut */
 		snd_azf3328_mixer_set_mute(chip, IDX_MIXER_WAVEOUT, 1);
 
-		spin_lock_irqsave(&chip->reg_lock, flags);
+		spin_lock(&chip->reg_lock);
 		/* stop playback */
 		status1 = inw(chip->codec_port+IDX_IO_PLAY_FLAGS);
 
@@ -882,7 +868,7 @@
 
 		status1 &= ~DMA_PLAY_SOMETHING1;
 		outw(status1, chip->codec_port+IDX_IO_PLAY_FLAGS);
-		spin_unlock_irqrestore(&chip->reg_lock, flags);
+		spin_unlock(&chip->reg_lock);
 	    
 		/* now unmute WaveOut */
 		snd_azf3328_mixer_set_mute(chip, IDX_MIXER_WAVEOUT, 0);
@@ -906,7 +892,6 @@
  * should actually be triggered like that */
 static int snd_azf3328_capture_trigger(snd_pcm_substream_t * substream, int cmd)
 {
-	unsigned long flags;
 	azf3328_t *chip = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
 	int result = 0;
@@ -920,7 +905,7 @@
 
 		snd_azf3328_setfmt(chip, IDX_IO_REC_SOUNDFORMAT, runtime->rate, snd_pcm_format_width(runtime->format), runtime->channels);
 
-		spin_lock_irqsave(&chip->reg_lock, flags);
+		spin_lock(&chip->reg_lock);
 		/* stop recording */
 		status1 = inw(chip->codec_port+IDX_IO_REC_FLAGS);
 		status1 &= ~DMA_RESUME;
@@ -928,11 +913,11 @@
 	    
 		/* FIXME: clear interrupts or what??? */
 		outw(0xffff, chip->codec_port+IDX_IO_REC_IRQMASK);
-		spin_unlock_irqrestore(&chip->reg_lock, flags);
+		spin_unlock(&chip->reg_lock);
 
 		snd_azf3328_setdmaa(chip, runtime->dma_addr, snd_pcm_lib_period_bytes(substream), snd_pcm_lib_buffer_bytes(substream), 1);
 
-		spin_lock_irqsave(&chip->reg_lock, flags);
+		spin_lock(&chip->reg_lock);
 #ifdef WIN9X
 		/* FIXME: enable playback/recording??? */
 		status1 |= DMA_PLAY_SOMETHING1 | DMA_PLAY_SOMETHING2;
@@ -948,13 +933,13 @@
 		outw(DMA_PLAY_SOMETHING1|DMA_PLAY_SOMETHING2, chip->codec_port+IDX_IO_REC_FLAGS);
 		outw(DMA_RESUME|SOMETHING_ALMOST_ALWAYS_SET|DMA_EPILOGUE_SOMETHING|DMA_SOMETHING_ELSE, chip->codec_port+IDX_IO_REC_FLAGS);
 #endif
-		spin_unlock_irqrestore(&chip->reg_lock, flags);
+		spin_unlock(&chip->reg_lock);
 
 		snd_azf3328_dbgio(chip, "trigger2");
 		chip->is_playing = 1;
 		break;
         case SNDRV_PCM_TRIGGER_STOP:
-		spin_lock_irqsave(&chip->reg_lock, flags);
+		spin_lock(&chip->reg_lock);
 		/* stop recording */
 		status1 = inw(chip->codec_port+IDX_IO_REC_FLAGS);
 
@@ -966,7 +951,7 @@
 
 		status1 &= ~DMA_PLAY_SOMETHING1;
 		outw(status1, chip->codec_port+IDX_IO_REC_FLAGS);
-		spin_unlock_irqrestore(&chip->reg_lock, flags);
+		spin_unlock(&chip->reg_lock);
 	    
 		chip->is_playing = 0;
 		break;
@@ -990,16 +975,13 @@
 	unsigned long bufptr, playptr;
 	unsigned long result;
 	snd_pcm_uframes_t frmres;
-	unsigned long flags;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
 #ifdef QUERY_HARDWARE
 	bufptr = inl(chip->codec_port+IDX_IO_PLAY_DMA_START_1);
 #else
 	bufptr = substream->runtime->dma_addr;
 #endif
 	playptr = inl(chip->codec_port+IDX_IO_PLAY_DMA_CURRPOS);
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
 
 	result = playptr - bufptr;
 	frmres = bytes_to_frames( substream->runtime, result );
@@ -1013,16 +995,13 @@
 	unsigned long bufptr, recptr;
 	unsigned long result;
 	snd_pcm_uframes_t frmres;
-	unsigned long flags;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
 #ifdef QUERY_HARDWARE
 	bufptr = inl(chip->codec_port+IDX_IO_REC_DMA_START_1);
 #else
 	bufptr = substream->runtime->dma_addr;
 #endif
 	recptr = inl(chip->codec_port+IDX_IO_REC_DMA_CURRPOS);
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
 
 	result = recptr - bufptr;
 	frmres = bytes_to_frames( substream->runtime, result );
@@ -1032,7 +1011,7 @@
 
 static irqreturn_t snd_azf3328_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	azf3328_t *chip = snd_magic_cast(azf3328_t, dev_id, return IRQ_NONE);
+	azf3328_t *chip = dev_id;
 	unsigned int status, which;
 	static unsigned long count;
 
@@ -1232,7 +1211,7 @@
 
 static void snd_azf3328_pcm_free(snd_pcm_t *pcm)
 {
-	azf3328_t *chip = snd_magic_cast(azf3328_t, pcm->private_data, return);
+	azf3328_t *chip = pcm->private_data;
 	chip->pcm = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
@@ -1287,36 +1266,17 @@
 		kfree_nocheck(chip->res_joystick);
 	}
 #endif
-        if (chip->res_codec_port) {
-		release_resource(chip->res_codec_port);
-		kfree_nocheck(chip->res_codec_port);
-	}
-        if (chip->res_io2_port) {
-		release_resource(chip->res_io2_port);
-		kfree_nocheck(chip->res_io2_port);
-	}
-        if (chip->res_mpu_port) {
-		release_resource(chip->res_mpu_port);
-		kfree_nocheck(chip->res_mpu_port);
-	}
-        if (chip->res_synth_port) {
-		release_resource(chip->res_synth_port);
-		kfree_nocheck(chip->res_synth_port);
-	}
-        if (chip->res_mixer_port) {
-		release_resource(chip->res_mixer_port);
-		kfree_nocheck(chip->res_mixer_port);
-	}
         if (chip->irq >= 0)
 		free_irq(chip->irq, (void *)chip);
+	pci_release_regions(chip->pci);
 
-        snd_magic_kfree(chip);
+        kfree(chip);
         return 0;
 }
 
 static int snd_azf3328_dev_free(snd_device_t *device)
 {
-	azf3328_t *chip = snd_magic_cast(azf3328_t, device->device_data, return -ENXIO);
+	azf3328_t *chip = device->device_data;
 	return snd_azf3328_free(chip);
 }
 
@@ -1345,7 +1305,6 @@
                                          unsigned long device_type,
                                          azf3328_t ** rchip)
 {
-	unsigned long flags;
 	azf3328_t *chip;
 	int err;
 	static snd_device_ops_t ops = {
@@ -1358,7 +1317,7 @@
 	if ((err = pci_enable_device(pci)) < 0)
 		return err;
 
-	chip = snd_magic_kcalloc(azf3328_t, 0, GFP_KERNEL);
+	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
 	if (chip == NULL)
 		return -ENOMEM;
 	spin_lock_init(&chip->reg_lock);
@@ -1373,36 +1332,16 @@
 		return -ENXIO;
 	}
 
-	chip->codec_port = pci_resource_start(pci, 0);
-	if ((chip->res_codec_port = request_region(chip->codec_port, 0x80, "Aztech AZF3328 I/O")) == NULL) {
-		snd_printk("unable to grab I/O port at 0x%lx-0x%lx\n", chip->codec_port, chip->codec_port + 0x80 - 1);
-		snd_azf3328_free(chip);
-		return -EBUSY;
+	if ((err = pci_request_regions(pci, "Aztech AZF3328")) < 0) {
+		kfree(chip);
+		return err;
 	}
+
+	chip->codec_port = pci_resource_start(pci, 0);
 	chip->io2_port = pci_resource_start(pci, 1);
-	if ((chip->res_io2_port = request_region(chip->io2_port, 0x08, "Aztech AZF3328 I/O 2")) == NULL) {
-		snd_printk("unable to grab I/O 2 port at 0x%lx-0x%lx\n", chip->io2_port, chip->io2_port + 0x08 - 1);
-		snd_azf3328_free(chip);
-		return -EBUSY;
-	}
 	chip->mpu_port = pci_resource_start(pci, 2);
-	if ((chip->res_mpu_port = request_region(chip->mpu_port, 0x04, "Aztech AZF3328 MPU401")) == NULL) {
-		snd_printk("unable to grab MPU401 port at 0x%lx-0x%lx\n", chip->mpu_port, chip->mpu_port + 0x04 - 1);
-		snd_azf3328_free(chip);
-		return -EBUSY;
-	}
 	chip->synth_port = pci_resource_start(pci, 3);
-	if ((chip->res_synth_port = request_region(chip->synth_port, 0x08, "Aztech AZF3328 OPL3")) == NULL) {
-		snd_printk("unable to grab OPL3 port at 0x%lx-0x%lx\n", chip->synth_port, chip->synth_port + 0x08 - 1);
-		snd_azf3328_free(chip);
-		return -EBUSY;
-	}
 	chip->mixer_port = pci_resource_start(pci, 4);
-	if ((chip->res_mixer_port = request_region(chip->mixer_port, 0x40, "Aztech AZF3328 Mixer")) == NULL) {
-                snd_printk("unable to grab mixer port at 0x%lx-0x%lx\n", chip->mixer_port, chip->mixer_port + 0x40 - 1);
-		snd_azf3328_free(chip);
-		return -EBUSY;
-	}
 
 	if (request_irq(pci->irq, snd_azf3328_interrupt, SA_INTERRUPT|SA_SHIRQ, card->shortname, (void *)chip)) {
 		snd_printk("unable to grab IRQ %d\n", pci->irq);
@@ -1435,13 +1374,13 @@
 #endif
 
 	/* standard chip init stuff */
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	outb(DMA_PLAY_SOMETHING2|DMA_EPILOGUE_SOMETHING|DMA_SOMETHING_ELSE, chip->codec_port + IDX_IO_PLAY_FLAGS);
 	outb(DMA_PLAY_SOMETHING2|DMA_EPILOGUE_SOMETHING|DMA_SOMETHING_ELSE, chip->codec_port + IDX_IO_SOMETHING_FLAGS);
 	outb(DMA_PLAY_SOMETHING2|DMA_EPILOGUE_SOMETHING|DMA_SOMETHING_ELSE, chip->codec_port + IDX_IO_REC_FLAGS);
 	outb(0x0, chip->codec_port + IDX_IO_IRQ63H);
 
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 
 	snd_card_set_dev(card, &pci->dev);
 
diff -Nru a/sound/pci/bt87x.c b/sound/pci/bt87x.c
--- a/sound/pci/bt87x.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/bt87x.c	2004-08-04 17:48:49 -07:00
@@ -38,8 +38,7 @@
 MODULE_AUTHOR("Clemens Ladisch <clemens@ladisch.de>");
 MODULE_DESCRIPTION("Brooktree Bt87x audio driver");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{Brooktree,Bt878},"
+MODULE_SUPPORTED_DEVICE("{{Brooktree,Bt878},"
 		"{Brooktree,Bt879}}");
 
 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;	/* Index 0-MAX */
@@ -50,16 +49,12 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for Bt87x soundcard");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for Bt87x soundcard");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable Bt87x soundcard");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(digital_rate, int, boot_devs, 0444);
 MODULE_PARM_DESC(digital_rate, "Digital input rate for Bt87x soundcard");
-MODULE_PARM_SYNTAX(digital_rate, SNDRV_ENABLED);
 
 
 #ifndef PCI_VENDOR_ID_BROOKTREE
@@ -152,14 +147,12 @@
 /* SYNC, one WRITE per line, one extra WRITE per page boundary, SYNC, JUMP */
 #define MAX_RISC_SIZE ((1 + 255 + (PAGE_ALIGN(255 * 4092) / PAGE_SIZE - 1) + 1 + 1) * 8)
 
-#define chip_t bt87x_t
 typedef struct snd_bt87x bt87x_t;
 struct snd_bt87x {
 	snd_card_t *card;
 	struct pci_dev *pci;
 
 	void *mmio;
-	struct resource *res_mmio;
 	int irq;
 
 	int dig_rate;
@@ -168,7 +161,6 @@
 	long opened;
 	snd_pcm_substream_t *substream;
 
-	struct snd_dma_device dma_dev;
 	struct snd_dma_buffer dma_risc;
 	unsigned int line_bytes;
 	unsigned int lines;
@@ -197,10 +189,8 @@
 	u32 *risc;
 
 	if (chip->dma_risc.area == NULL) {
-		memset(&chip->dma_dev, 0, sizeof(chip->dma_dev));
-		chip->dma_dev.type = SNDRV_DMA_TYPE_DEV;
-		chip->dma_dev.dev = snd_dma_pci_data(chip->pci);
-		if (snd_dma_alloc_pages(&chip->dma_dev, PAGE_ALIGN(MAX_RISC_SIZE), &chip->dma_risc) < 0)
+		if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(chip->pci),
+					PAGE_ALIGN(MAX_RISC_SIZE), &chip->dma_risc) < 0)
 			return -ENOMEM;
 	}
 	risc = (u32 *)chip->dma_risc.area;
@@ -244,14 +234,14 @@
 static void snd_bt87x_free_risc(bt87x_t *chip)
 {
 	if (chip->dma_risc.area) {
-		snd_dma_free_pages(&chip->dma_dev, &chip->dma_risc);
+		snd_dma_free_pages(&chip->dma_risc);
 		chip->dma_risc.area = NULL;
 	}
 }
 
 static irqreturn_t snd_bt87x_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	bt87x_t *chip = snd_magic_cast(bt87x_t, dev_id, return IRQ_NONE);
+	bt87x_t *chip = dev_id;
 	unsigned int status;
 
 	status = snd_bt87x_readl(chip, REG_INT_STAT);
@@ -314,7 +304,7 @@
 		SNDRV_PCM_INFO_MMAP_VALID,
 	.formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S8,
 	.rates = SNDRV_PCM_RATE_KNOT,
-	.rate_min = 119467,
+	.rate_min = 119466,
 	.rate_max = 448000,
 	.channels_min = 1,
 	.channels_max = 1,
@@ -356,20 +346,21 @@
 
 static int snd_bt87x_set_analog_hw(bt87x_t *chip, snd_pcm_runtime_t *runtime)
 {
-	static unsigned int rates[] = {
-		119467, 128000, 137846, 149333, 162909, 179200,
-		199111, 224000, 256000, 298667, 358400, 448000
+	static ratnum_t analog_clock = {
+		.num = 1792000,
+		.den_min = 4,
+		.den_max = 15,
+		.den_step = 1
 	};
-	static snd_pcm_hw_constraint_list_t constraint_rates = {
-		.count = ARRAY_SIZE(rates),
-		.list = rates,
-		.mask = 0,
+	static snd_pcm_hw_constraint_ratnums_t constraint_rates = {
+		.nrats = 1,
+		.rats = &analog_clock
 	};
 
 	chip->reg_control &= ~CTL_DA_IOM_DA;
 	runtime->hw = snd_bt87x_analog_hw;
-	return snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE,
-					  &constraint_rates);
+	return snd_pcm_hw_constraint_ratnums(runtime, 0, SNDRV_PCM_HW_PARAM_RATE,
+					     &constraint_rates);
 }
 
 static int snd_bt87x_pcm_open(snd_pcm_substream_t *substream)
@@ -439,25 +430,22 @@
 {
 	bt87x_t *chip = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	unsigned long flags;
 	int decimation;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	chip->reg_control &= ~(CTL_DA_SDR_MASK | CTL_DA_SBR);
-	decimation = (1792000 + 5) / runtime->rate;
+	decimation = (1792000 + runtime->rate / 4) / runtime->rate;
 	chip->reg_control |= decimation << CTL_DA_SDR_SHIFT;
 	if (runtime->format == SNDRV_PCM_FORMAT_S8)
 		chip->reg_control |= CTL_DA_SBR;
 	snd_bt87x_writel(chip, REG_GPIO_DMA_CTL, chip->reg_control);
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	return 0;
 }
 
 static int snd_bt87x_start(bt87x_t *chip)
 {
-	unsigned long flags;
-
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock(&chip->reg_lock);
 	chip->current_line = 0;
 	chip->reg_control |= CTL_FIFO_ENABLE | CTL_RISC_ENABLE | CTL_ACAP_EN;
 	snd_bt87x_writel(chip, REG_RISC_STRT_ADD, chip->dma_risc.addr);
@@ -465,20 +453,18 @@
 			 chip->line_bytes | (chip->lines << 16));
 	snd_bt87x_writel(chip, REG_INT_MASK, MY_INTERRUPTS);
 	snd_bt87x_writel(chip, REG_GPIO_DMA_CTL, chip->reg_control);
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock(&chip->reg_lock);
 	return 0;
 }
 
 static int snd_bt87x_stop(bt87x_t *chip)
 {
-	unsigned long flags;
-
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock(&chip->reg_lock);
 	chip->reg_control &= ~(CTL_FIFO_ENABLE | CTL_RISC_ENABLE | CTL_ACAP_EN);
 	snd_bt87x_writel(chip, REG_GPIO_DMA_CTL, chip->reg_control);
 	snd_bt87x_writel(chip, REG_INT_MASK, 0);
 	snd_bt87x_writel(chip, REG_INT_STAT, MY_INTERRUPTS);
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock(&chip->reg_lock);
 	return 0;
 }
 
@@ -536,17 +522,16 @@
 static int snd_bt87x_capture_volume_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *value)
 {
 	bt87x_t *chip = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	u32 old_control;
 	int changed;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	old_control = chip->reg_control;
 	chip->reg_control = (chip->reg_control & ~CTL_A_GAIN_MASK)
 		| (value->value.integer.value[0] << CTL_A_GAIN_SHIFT);
 	snd_bt87x_writel(chip, REG_GPIO_DMA_CTL, chip->reg_control);
 	changed = old_control != chip->reg_control;
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	return changed;
 }
 
@@ -578,17 +563,16 @@
 static int snd_bt87x_capture_boost_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *value)
 {
 	bt87x_t *chip = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	u32 old_control;
 	int changed;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	old_control = chip->reg_control;
 	chip->reg_control = (chip->reg_control & ~CTL_A_G2X)
 		| (value->value.integer.value[0] ? CTL_A_G2X : 0);
 	snd_bt87x_writel(chip, REG_GPIO_DMA_CTL, chip->reg_control);
 	changed = chip->reg_control != old_control;
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	return changed;
 }
 
@@ -624,17 +608,16 @@
 static int snd_bt87x_capture_source_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *value)
 {
 	bt87x_t *chip = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	u32 old_control;
 	int changed;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	old_control = chip->reg_control;
 	chip->reg_control = (chip->reg_control & ~CTL_A_SEL_MASK)
 		| (value->value.enumerated.item[0] << CTL_A_SEL_SHIFT);
 	snd_bt87x_writel(chip, REG_GPIO_DMA_CTL, chip->reg_control);
 	changed = chip->reg_control != old_control;
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	return changed;
 }
 
@@ -655,19 +638,16 @@
 
 		iounmap(chip->mmio);
 	}
-	if (chip->res_mmio) {
-		release_resource(chip->res_mmio);
-		kfree_nocheck(chip->res_mmio);
-	}
 	if (chip->irq >= 0)
 		free_irq(chip->irq, chip);
-	snd_magic_kfree(chip);
+	pci_release_regions(chip->pci);
+	kfree(chip);
 	return 0;
 }
 
 static int snd_bt87x_dev_free(snd_device_t *device)
 {
-	bt87x_t *chip = snd_magic_cast(bt87x_t, device->device_data, return -ENXIO);
+	bt87x_t *chip = device->device_data;
 	return snd_bt87x_free(chip);
 }
 
@@ -705,7 +685,7 @@
 	if (err < 0)
 		return err;
 
-	chip = snd_magic_kcalloc(bt87x_t, 0, GFP_KERNEL);
+	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
 	if (!chip)
 		return -ENOMEM;
 	chip->card = card;
@@ -713,13 +693,9 @@
 	chip->irq = -1;
 	spin_lock_init(&chip->reg_lock);
 
-	chip->res_mmio = request_mem_region(pci_resource_start(pci, 0),
-					    pci_resource_len(pci, 0),
-					    "Bt87x audio");
-	if (!chip->res_mmio) {
-		snd_bt87x_free(chip);
-		snd_printk(KERN_ERR "cannot allocate io memory\n");
-		return -EBUSY;
+	if ((err = pci_request_regions(pci, "Bt87x audio")) < 0) {
+		kfree(chip);
+		return err;
 	}
 	chip->mmio = ioremap_nocache(pci_resource_start(pci, 0),
 				     pci_resource_len(pci, 0));
diff -Nru a/sound/pci/cmipci.c b/sound/pci/cmipci.c
--- a/sound/pci/cmipci.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/cmipci.c	2004-08-04 17:48:49 -07:00
@@ -43,8 +43,7 @@
 MODULE_AUTHOR("Takashi Iwai <tiwai@suse.de>");
 MODULE_DESCRIPTION("C-Media CMI8x38 PCI");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{C-Media,CMI8738},"
+MODULE_SUPPORTED_DEVICE("{{C-Media,CMI8738},"
 		"{C-Media,CMI8738B},"
 		"{C-Media,CMI8338A},"
 		"{C-Media,CMI8338B}}");
@@ -66,25 +65,19 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for C-Media PCI soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for C-Media PCI soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable C-Media PCI soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(mpu_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(mpu_port, "MPU-401 port.");
-MODULE_PARM_SYNTAX(mpu_port, SNDRV_ENABLED ",allows:{{0},{0x330},{0x320},{0x310},{0x300}},dialog:list");
 module_param_array(fm_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(fm_port, "FM port.");
-MODULE_PARM_SYNTAX(fm_port, SNDRV_ENABLED ",allows:{{0},{0x388},{0x3c8},{0x3e0},{0x3e8}},dialog:list");
 module_param_array(soft_ac3, bool, boot_devs, 0444);
 MODULE_PARM_DESC(soft_ac3, "Sofware-conversion of raw SPDIF packets (model 033 only).");
 #ifdef SUPPORT_JOYSTICK
 module_param_array(joystick_port, int, boot_devs, 0444);
 MODULE_PARM_DESC(joystick_port, "Joystick port address.");
-MODULE_PARM_SYNTAX(joystick_port, SNDRV_ENABLED ",allows:{{0},{1},{0x200},{0x201}},dialog:list");
 #endif
 
 #ifndef PCI_DEVICE_ID_CMEDIA_CM8738
@@ -405,8 +398,6 @@
 typedef struct snd_stru_cmipci cmipci_t;
 typedef struct snd_stru_cmipci_pcm cmipci_pcm_t;
 
-#define chip_t cmipci_t
-
 struct snd_stru_cmipci_pcm {
 	snd_pcm_substream_t *substream;
 	int running;		/* dac/adc running? */
@@ -442,7 +433,6 @@
 	int irq;
 
 	unsigned long iobase;
-	struct resource *res_iobase;
 	unsigned int ctrl;	/* FUNCTRL0 current value */
 
 	snd_pcm_t *pcm;		/* DAC/ADC PCM */
@@ -699,15 +689,13 @@
 
 static int set_dac_channels(cmipci_t *cm, cmipci_pcm_t *rec, int channels)
 {
-	unsigned long flags;
-
 	if (channels > 2) {
 		if (! cm->can_multi_ch)
 			return -EINVAL;
 		if (rec->fmt != 0x03) /* stereo 16bit only */
 			return -EINVAL;
 
-		spin_lock_irqsave(&cm->reg_lock, flags);
+		spin_lock_irq(&cm->reg_lock);
 		snd_cmipci_set_bit(cm, CM_REG_LEGACY_CTRL, CM_NXCHG);
 		snd_cmipci_set_bit(cm, CM_REG_MISC_CTRL, CM_XCHGDAC);
 		if (channels > 4) {
@@ -724,18 +712,18 @@
 			snd_cmipci_clear_bit(cm, CM_REG_LEGACY_CTRL, CM_CHB3D6C);
 			snd_cmipci_clear_bit(cm, CM_REG_MISC_CTRL, CM_ENCENTER);
 		}
-		spin_unlock_irqrestore(&cm->reg_lock, flags);
+		spin_unlock_irq(&cm->reg_lock);
 
 	} else {
 		if (cm->can_multi_ch) {
-			spin_lock_irqsave(&cm->reg_lock, flags);
+			spin_lock_irq(&cm->reg_lock);
 			snd_cmipci_clear_bit(cm, CM_REG_LEGACY_CTRL, CM_NXCHG);
 			snd_cmipci_clear_bit(cm, CM_REG_CHFORMAT, CM_CHB3D);
 			snd_cmipci_clear_bit(cm, CM_REG_CHFORMAT, CM_CHB3D5C);
 			snd_cmipci_clear_bit(cm, CM_REG_LEGACY_CTRL, CM_CHB3D6C);
 			snd_cmipci_clear_bit(cm, CM_REG_MISC_CTRL, CM_ENCENTER);
 			snd_cmipci_clear_bit(cm, CM_REG_MISC_CTRL, CM_XCHGDAC);
-			spin_unlock_irqrestore(&cm->reg_lock, flags);
+			spin_unlock_irq(&cm->reg_lock);
 		}
 	}
 	return 0;
@@ -749,7 +737,6 @@
 static int snd_cmipci_pcm_prepare(cmipci_t *cm, cmipci_pcm_t *rec,
 				 snd_pcm_substream_t *substream)
 {
-	unsigned long flags;
 	unsigned int reg, freq, val;
 	snd_pcm_runtime_t *runtime = substream->runtime;
 
@@ -777,7 +764,7 @@
 		rec->period_size = (rec->period_size * runtime->channels) / 2;
 	}
 
-	spin_lock_irqsave(&cm->reg_lock, flags);
+	spin_lock_irq(&cm->reg_lock);
 
 	/* set buffer address */
 	reg = rec->ch ? CM_REG_CH1_FRAME1 : CM_REG_CH0_FRAME1;
@@ -822,7 +809,7 @@
 	//snd_printd("cmipci: chformat = %08x\n", val);
 
 	rec->running = 0;
-	spin_unlock_irqrestore(&cm->reg_lock, flags);
+	spin_unlock_irq(&cm->reg_lock);
 
 	return 0;
 }
@@ -954,13 +941,12 @@
 					snd_ctl_elem_value_t *ucontrol)
 {
 	cmipci_t *chip = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	int i;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	for (i = 0; i < 4; i++)
 		ucontrol->value.iec958.status[i] = (chip->dig_status >> (i * 8)) & 0xff;
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	return 0;
 }
 
@@ -968,17 +954,16 @@
 					 snd_ctl_elem_value_t * ucontrol)
 {
 	cmipci_t *chip = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	int i, change;
 	unsigned int val;
 
 	val = 0;
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	for (i = 0; i < 4; i++)
 		val |= (unsigned int)ucontrol->value.iec958.status[i] << (i * 8);
 	change = val != chip->dig_status;
 	chip->dig_status = val;
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	return change;
 }
 
@@ -1030,13 +1015,12 @@
 				       snd_ctl_elem_value_t *ucontrol)
 {
 	cmipci_t *chip = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	int i;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	for (i = 0; i < 4; i++)
 		ucontrol->value.iec958.status[i] = (chip->dig_pcm_status >> (i * 8)) & 0xff;
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	return 0;
 }
 
@@ -1044,17 +1028,16 @@
 				       snd_ctl_elem_value_t *ucontrol)
 {
 	cmipci_t *chip = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	int i, change;
 	unsigned int val;
 
 	val = 0;
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	for (i = 0; i < 4; i++)
 		val |= (unsigned int)ucontrol->value.iec958.status[i] << (i * 8);
 	change = val != chip->dig_pcm_status;
 	chip->dig_pcm_status = val;
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	return change;
 }
 
@@ -1072,30 +1055,36 @@
  */
 
 /* save mixer setting and mute for AC3 playback */
-static void save_mixer_state(cmipci_t *cm)
+static int save_mixer_state(cmipci_t *cm)
 {
 	if (! cm->mixer_insensitive) {
+		snd_ctl_elem_value_t *val;
 		unsigned int i;
+
+		val = kmalloc(sizeof(*val), GFP_ATOMIC);
+		if (!val)
+			return -ENOMEM;
 		for (i = 0; i < CM_SAVED_MIXERS; i++) {
 			snd_kcontrol_t *ctl = cm->mixer_res_ctl[i];
 			if (ctl) {
-				snd_ctl_elem_value_t val;
 				int event;
-				memset(&val, 0, sizeof(val));
-				ctl->get(ctl, &val);
-				cm->mixer_res_status[i] = val.value.integer.value[0];
-				val.value.integer.value[0] = cm_saved_mixer[i].toggle_on;
+				memset(val, 0, sizeof(*val));
+				ctl->get(ctl, val);
+				cm->mixer_res_status[i] = val->value.integer.value[0];
+				val->value.integer.value[0] = cm_saved_mixer[i].toggle_on;
 				event = SNDRV_CTL_EVENT_MASK_INFO;
-				if (cm->mixer_res_status[i] != val.value.integer.value[0]) {
-					ctl->put(ctl, &val); /* toggle */
+				if (cm->mixer_res_status[i] != val->value.integer.value[0]) {
+					ctl->put(ctl, val); /* toggle */
 					event |= SNDRV_CTL_EVENT_MASK_VALUE;
 				}
 				ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE;
 				snd_ctl_notify(cm->card, event, &ctl->id);
 			}
 		}
+		kfree(val);
 		cm->mixer_insensitive = 1;
 	}
+	return 0;
 }
 
 
@@ -1103,27 +1092,32 @@
 static void restore_mixer_state(cmipci_t *cm)
 {
 	if (cm->mixer_insensitive) {
+		snd_ctl_elem_value_t *val;
 		unsigned int i;
+
+		val = kmalloc(sizeof(*val), GFP_KERNEL);
+		if (!val)
+			return;
 		cm->mixer_insensitive = 0; /* at first clear this;
 					      otherwise the changes will be ignored */
 		for (i = 0; i < CM_SAVED_MIXERS; i++) {
 			snd_kcontrol_t *ctl = cm->mixer_res_ctl[i];
 			if (ctl) {
-				snd_ctl_elem_value_t val;
 				int event;
 
-				memset(&val, 0, sizeof(val));
+				memset(val, 0, sizeof(*val));
 				ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE;
-				ctl->get(ctl, &val);
+				ctl->get(ctl, val);
 				event = SNDRV_CTL_EVENT_MASK_INFO;
-				if (val.value.integer.value[0] != cm->mixer_res_status[i]) {
-					val.value.integer.value[0] = cm->mixer_res_status[i];
-					ctl->put(ctl, &val);
+				if (val->value.integer.value[0] != cm->mixer_res_status[i]) {
+					val->value.integer.value[0] = cm->mixer_res_status[i];
+					ctl->put(ctl, val);
 					event |= SNDRV_CTL_EVENT_MASK_VALUE;
 				}
 				snd_ctl_notify(cm->card, event, &ctl->id);
 			}
 		}
+		kfree(val);
 	}
 }
 
@@ -1175,17 +1169,17 @@
 	}
 }
 
-static void setup_spdif_playback(cmipci_t *cm, snd_pcm_substream_t *subs, int up, int do_ac3)
+static int setup_spdif_playback(cmipci_t *cm, snd_pcm_substream_t *subs, int up, int do_ac3)
 {
-	int rate;
-	unsigned long flags;
+	int rate, err;
 
 	rate = subs->runtime->rate;
 
 	if (up && do_ac3)
-		save_mixer_state(cm);
+		if ((err = save_mixer_state(cm)) < 0)
+			return err;
 
-	spin_lock_irqsave(&cm->reg_lock, flags);
+	spin_lock_irq(&cm->reg_lock);
 	cm->spdif_playback_avail = up;
 	if (up) {
 		/* they are controlled via "IEC958 Output Switch" */
@@ -1207,7 +1201,8 @@
 		snd_cmipci_clear_bit(cm, CM_REG_FUNCTRL1, CM_PLAYBACK_SPDF);
 		setup_ac3(cm, subs, 0, 0);
 	}
-	spin_unlock_irqrestore(&cm->reg_lock, flags);
+	spin_unlock_irq(&cm->reg_lock);
+	return 0;
 }
 
 
@@ -1220,13 +1215,15 @@
 {
 	cmipci_t *cm = snd_pcm_substream_chip(substream);
 	int rate = substream->runtime->rate;
-	int do_spdif, do_ac3 = 0;
+	int err, do_spdif, do_ac3 = 0;
+
 	do_spdif = ((rate == 44100 || rate == 48000) &&
 		    substream->runtime->format == SNDRV_PCM_FORMAT_S16_LE &&
 		    substream->runtime->channels == 2);
 	if (do_spdif && cm->can_ac3_hw) 
 		do_ac3 = cm->dig_pcm_status & IEC958_AES0_NONAUDIO;
-	setup_spdif_playback(cm, substream, do_spdif, do_ac3);
+	if ((err = setup_spdif_playback(cm, substream, do_spdif, do_ac3)) < 0)
+		return err;
 	return snd_cmipci_pcm_prepare(cm, &cm->channel[CM_CH_PLAY], substream);
 }
 
@@ -1234,12 +1231,14 @@
 static int snd_cmipci_playback_spdif_prepare(snd_pcm_substream_t *substream)
 {
 	cmipci_t *cm = snd_pcm_substream_chip(substream);
-	int do_ac3;
+	int err, do_ac3;
+
 	if (cm->can_ac3_hw) 
 		do_ac3 = cm->dig_pcm_status & IEC958_AES0_NONAUDIO;
 	else
 		do_ac3 = 1; /* doesn't matter */
-	setup_spdif_playback(cm, substream, 1, do_ac3);
+	if ((err = setup_spdif_playback(cm, substream, 1, do_ac3)) < 0)
+		return err;
 	return snd_cmipci_pcm_prepare(cm, &cm->channel[CM_CH_PLAY], substream);
 }
 
@@ -1262,11 +1261,10 @@
 static int snd_cmipci_capture_spdif_prepare(snd_pcm_substream_t *substream)
 {
 	cmipci_t *cm = snd_pcm_substream_chip(substream);
-	unsigned long flags;
 
-	spin_lock_irqsave(&cm->reg_lock, flags);
+	spin_lock_irq(&cm->reg_lock);
 	snd_cmipci_set_bit(cm, CM_REG_FUNCTRL1, CM_CAPTURE_SPDF);
-	spin_unlock_irqrestore(&cm->reg_lock, flags);
+	spin_unlock_irq(&cm->reg_lock);
 
 	return snd_cmipci_pcm_prepare(cm, &cm->channel[CM_CH_CAPT], substream);
 }
@@ -1274,11 +1272,10 @@
 static int snd_cmipci_capture_spdif_hw_free(snd_pcm_substream_t *subs)
 {
 	cmipci_t *cm = snd_pcm_substream_chip(subs);
-	unsigned long flags;
 
-	spin_lock_irqsave(&cm->reg_lock, flags);
+	spin_lock_irq(&cm->reg_lock);
 	snd_cmipci_clear_bit(cm, CM_REG_FUNCTRL1, CM_CAPTURE_SPDF);
-	spin_unlock_irqrestore(&cm->reg_lock, flags);
+	spin_unlock_irq(&cm->reg_lock);
 
 	return snd_cmipci_hw_free(subs);
 }
@@ -1289,7 +1286,7 @@
  */
 static irqreturn_t snd_cmipci_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	cmipci_t *cm = snd_magic_cast(cmipci_t, dev_id, return IRQ_NONE);
+	cmipci_t *cm = dev_id;
 	unsigned int status, mask = 0;
 	
 	/* fastpath out, to ease interrupt sharing */
@@ -1448,7 +1445,6 @@
  */
 static int open_device_check(cmipci_t *cm, int mode, snd_pcm_substream_t *subs)
 {
-	unsigned long flags;
 	int ch = mode & CM_OPEN_CH_MASK;
 
 	/* FIXME: a file should wait until the device becomes free
@@ -1466,9 +1462,9 @@
 	if (! (mode & CM_OPEN_DAC)) {
 		/* disable dual DAC mode */
 		cm->channel[ch].is_dac = 0;
-		spin_lock_irqsave(&cm->reg_lock, flags);
+		spin_lock_irq(&cm->reg_lock);
 		snd_cmipci_clear_bit(cm, CM_REG_MISC_CTRL, CM_ENDBDAC);
-		spin_unlock_irqrestore(&cm->reg_lock, flags);
+		spin_unlock_irq(&cm->reg_lock);
 	}
 	up(&cm->open_mutex);
 	return 0;
@@ -1476,7 +1472,6 @@
 
 static void close_device_check(cmipci_t *cm, int mode)
 {
-	unsigned long flags;
 	int ch = mode & CM_OPEN_CH_MASK;
 
 	down(&cm->open_mutex);
@@ -1490,9 +1485,9 @@
 		if (! cm->channel[ch].is_dac) {
 			/* enable dual DAC mode again */
 			cm->channel[ch].is_dac = 1;
-			spin_lock_irqsave(&cm->reg_lock, flags);
+			spin_lock_irq(&cm->reg_lock);
 			snd_cmipci_set_bit(cm, CM_REG_MISC_CTRL, CM_ENDBDAC);
-			spin_unlock_irqrestore(&cm->reg_lock, flags);
+			spin_unlock_irq(&cm->reg_lock);
 		}
 	}
 	up(&cm->open_mutex);
@@ -1840,12 +1835,11 @@
 static int snd_cmipci_get_volume(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
 	cmipci_t *cm = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	cmipci_sb_reg_t reg;
 	int val;
 
 	cmipci_sb_reg_decode(&reg, kcontrol->private_value);
-	spin_lock_irqsave(&cm->reg_lock, flags);
+	spin_lock_irq(&cm->reg_lock);
 	val = (snd_cmipci_mixer_read(cm, reg.left_reg) >> reg.left_shift) & reg.mask;
 	if (reg.invert)
 		val = reg.mask - val;
@@ -1856,14 +1850,13 @@
 			val = reg.mask - val;
 		 ucontrol->value.integer.value[1] = val;
 	}
-	spin_unlock_irqrestore(&cm->reg_lock, flags);
+	spin_unlock_irq(&cm->reg_lock);
 	return 0;
 }
 
 static int snd_cmipci_put_volume(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
 	cmipci_t *cm = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	cmipci_sb_reg_t reg;
 	int change;
 	int left, right, oleft, oright;
@@ -1880,7 +1873,7 @@
 		right <<= reg.right_shift;
 	} else
 		right = 0;
-	spin_lock_irqsave(&cm->reg_lock, flags);
+	spin_lock_irq(&cm->reg_lock);
 	oleft = snd_cmipci_mixer_read(cm, reg.left_reg);
 	left |= oleft & ~(reg.mask << reg.left_shift);
 	change = left != oleft;
@@ -1895,7 +1888,7 @@
 		snd_cmipci_mixer_write(cm, reg.right_reg, right);
 	} else
 		snd_cmipci_mixer_write(cm, reg.left_reg, left);
-	spin_unlock_irqrestore(&cm->reg_lock, flags);
+	spin_unlock_irq(&cm->reg_lock);
 	return change;
 }
 
@@ -1921,15 +1914,14 @@
 static int snd_cmipci_get_input_sw(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
 	cmipci_t *cm = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	cmipci_sb_reg_t reg;
 	int val1, val2;
 
 	cmipci_sb_reg_decode(&reg, kcontrol->private_value);
-	spin_lock_irqsave(&cm->reg_lock, flags);
+	spin_lock_irq(&cm->reg_lock);
 	val1 = snd_cmipci_mixer_read(cm, reg.left_reg);
 	val2 = snd_cmipci_mixer_read(cm, reg.right_reg);
-	spin_unlock_irqrestore(&cm->reg_lock, flags);
+	spin_unlock_irq(&cm->reg_lock);
 	ucontrol->value.integer.value[0] = (val1 >> reg.left_shift) & 1;
 	ucontrol->value.integer.value[1] = (val2 >> reg.left_shift) & 1;
 	ucontrol->value.integer.value[2] = (val1 >> reg.right_shift) & 1;
@@ -1940,13 +1932,12 @@
 static int snd_cmipci_put_input_sw(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
 	cmipci_t *cm = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	cmipci_sb_reg_t reg;
 	int change;
 	int val1, val2, oval1, oval2;
 
 	cmipci_sb_reg_decode(&reg, kcontrol->private_value);
-	spin_lock_irqsave(&cm->reg_lock, flags);
+	spin_lock_irq(&cm->reg_lock);
 	oval1 = snd_cmipci_mixer_read(cm, reg.left_reg);
 	oval2 = snd_cmipci_mixer_read(cm, reg.right_reg);
 	val1 = oval1 & ~((1 << reg.left_shift) | (1 << reg.right_shift));
@@ -1958,7 +1949,7 @@
 	change = val1 != oval1 || val2 != oval2;
 	snd_cmipci_mixer_write(cm, reg.left_reg, val1);
 	snd_cmipci_mixer_write(cm, reg.right_reg, val2);
-	spin_unlock_irqrestore(&cm->reg_lock, flags);
+	spin_unlock_irq(&cm->reg_lock);
 	return change;
 }
 
@@ -2011,11 +2002,10 @@
 {
 	cmipci_t *cm = snd_kcontrol_chip(kcontrol);
 	cmipci_sb_reg_t reg;
-	unsigned long flags;
 	unsigned char oreg, val;
 
 	cmipci_sb_reg_decode(&reg, kcontrol->private_value);
-	spin_lock_irqsave(&cm->reg_lock, flags);
+	spin_lock_irq(&cm->reg_lock);
 	oreg = inb(cm->iobase + reg.left_reg);
 	val = (oreg >> reg.left_shift) & reg.mask;
 	if (reg.invert)
@@ -2027,7 +2017,7 @@
 			val = reg.mask - val;
 		ucontrol->value.integer.value[1] = val;
 	}
-	spin_unlock_irqrestore(&cm->reg_lock, flags);
+	spin_unlock_irq(&cm->reg_lock);
 	return 0;
 }
 
@@ -2035,11 +2025,10 @@
 {
 	cmipci_t *cm = snd_kcontrol_chip(kcontrol);
 	cmipci_sb_reg_t reg;
-	unsigned long flags;
 	unsigned char oreg, nreg, val;
 
 	cmipci_sb_reg_decode(&reg, kcontrol->private_value);
-	spin_lock_irqsave(&cm->reg_lock, flags);
+	spin_lock_irq(&cm->reg_lock);
 	oreg = inb(cm->iobase + reg.left_reg);
 	val = ucontrol->value.integer.value[0] & reg.mask;
 	if (reg.invert)
@@ -2054,7 +2043,7 @@
 		nreg |= (val << reg.right_shift);
 	}
 	outb(nreg, cm->iobase + reg.left_reg);
-	spin_unlock_irqrestore(&cm->reg_lock, flags);
+	spin_unlock_irq(&cm->reg_lock);
 	return (nreg != oreg);
 }
 
@@ -2078,8 +2067,6 @@
 }
 
 
-#define num_controls(ary) (sizeof(ary) / sizeof(snd_kcontrol_new_t))
-
 static snd_kcontrol_new_t snd_cmipci_mixers[] __devinitdata = {
 	CMIPCI_SB_VOL_STEREO("Master Playback Volume", SB_DSP4_MASTER_DEV, 3, 31),
 	CMIPCI_MIXER_SW_MONO("3D Control - Switch", CM_REG_MIXER1, CM_X3DEN_SHIFT, 0),
@@ -2137,14 +2124,13 @@
 
 static int _snd_cmipci_uswitch_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol, snd_cmipci_switch_args_t *args)
 {
-	unsigned long flags;
 	unsigned int val;
 	cmipci_t *cm = snd_kcontrol_chip(kcontrol);
 
-	spin_lock_irqsave(&cm->reg_lock, flags);
+	spin_lock_irq(&cm->reg_lock);
 	if (args->ac3_sensitive && cm->mixer_insensitive) {
 		ucontrol->value.integer.value[0] = 0;
-		spin_unlock_irqrestore(&cm->reg_lock, flags);
+		spin_unlock_irq(&cm->reg_lock);
 		return 0;
 	}
 	if (args->is_byte)
@@ -2152,7 +2138,7 @@
 	else
 		val = snd_cmipci_read(cm, args->reg);
 	ucontrol->value.integer.value[0] = ((val & args->mask) == args->mask_on) ? 1 : 0;
-	spin_unlock_irqrestore(&cm->reg_lock, flags);
+	spin_unlock_irq(&cm->reg_lock);
 	return 0;
 }
 
@@ -2165,15 +2151,14 @@
 
 static int _snd_cmipci_uswitch_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol, snd_cmipci_switch_args_t *args)
 {
-	unsigned long flags;
 	unsigned int val;
 	int change;
 	cmipci_t *cm = snd_kcontrol_chip(kcontrol);
 
-	spin_lock_irqsave(&cm->reg_lock, flags);
+	spin_lock_irq(&cm->reg_lock);
 	if (args->ac3_sensitive && cm->mixer_insensitive) {
 		/* ignored */
-		spin_unlock_irqrestore(&cm->reg_lock, flags);
+		spin_unlock_irq(&cm->reg_lock);
 		return 0;
 	}
 	if (args->is_byte)
@@ -2192,7 +2177,7 @@
 		else
 			snd_cmipci_write(cm, args->reg, val);
 	}
-	spin_unlock_irqrestore(&cm->reg_lock, flags);
+	spin_unlock_irq(&cm->reg_lock);
 	return change;
 }
 
@@ -2345,7 +2330,6 @@
 
 static int __devinit snd_cmipci_mixer_new(cmipci_t *cm, int pcm_spdif_device)
 {
-	unsigned long flags;
 	snd_card_t *card;
 	snd_kcontrol_new_t *sw;
 	snd_kcontrol_t *kctl;
@@ -2358,18 +2342,18 @@
 
 	strcpy(card->mixername, "CMedia PCI");
 
-	spin_lock_irqsave(&cm->reg_lock, flags);
+	spin_lock_irq(&cm->reg_lock);
 	snd_cmipci_mixer_write(cm, 0x00, 0x00);		/* mixer reset */
-	spin_unlock_irqrestore(&cm->reg_lock, flags);
+	spin_unlock_irq(&cm->reg_lock);
 
-	for (idx = 0; idx < num_controls(snd_cmipci_mixers); idx++) {
+	for (idx = 0; idx < ARRAY_SIZE(snd_cmipci_mixers); idx++) {
 		if ((err = snd_ctl_add(card, snd_ctl_new1(&snd_cmipci_mixers[idx], cm))) < 0)
 			return err;
 	}
 
 	/* mixer switches */
 	sw = snd_cmipci_mixer_switches;
-	for (idx = 0; idx < num_controls(snd_cmipci_mixer_switches); idx++, sw++) {
+	for (idx = 0; idx < ARRAY_SIZE(snd_cmipci_mixer_switches); idx++, sw++) {
 		err = snd_ctl_add(cm->card, snd_ctl_new1(sw, cm));
 		if (err < 0)
 			return err;
@@ -2382,7 +2366,7 @@
 	if (cm->device == PCI_DEVICE_ID_CMEDIA_CM8738 ||
 	    cm->device == PCI_DEVICE_ID_CMEDIA_CM8738B) {
 		sw = snd_cmipci_8738_mixer_switches;
-		for (idx = 0; idx < num_controls(snd_cmipci_8738_mixer_switches); idx++, sw++) {
+		for (idx = 0; idx < ARRAY_SIZE(snd_cmipci_8738_mixer_switches); idx++, sw++) {
 			err = snd_ctl_add(cm->card, snd_ctl_new1(sw, cm));
 			if (err < 0)
 				return err;
@@ -2400,7 +2384,7 @@
 		}
 		if (cm->chip_version <= 37) {
 			sw = snd_cmipci_old_mixer_switches;
-			for (idx = 0; idx < num_controls(snd_cmipci_old_mixer_switches); idx++, sw++) {
+			for (idx = 0; idx < ARRAY_SIZE(snd_cmipci_old_mixer_switches); idx++, sw++) {
 				err = snd_ctl_add(cm->card, snd_ctl_new1(sw, cm));
 				if (err < 0)
 					return err;
@@ -2409,7 +2393,7 @@
 	}
 	if (cm->chip_version >= 39) {
 		sw = snd_cmipci_extra_mixer_switches;
-		for (idx = 0; idx < num_controls(snd_cmipci_extra_mixer_switches); idx++, sw++) {
+		for (idx = 0; idx < ARRAY_SIZE(snd_cmipci_extra_mixer_switches); idx++, sw++) {
 			err = snd_ctl_add(cm->card, snd_ctl_new1(sw, cm));
 			if (err < 0)
 				return err;
@@ -2418,7 +2402,7 @@
 
 	/* card switches */
 	sw = snd_cmipci_control_switches;
-	for (idx = 0; idx < num_controls(snd_cmipci_control_switches); idx++, sw++) {
+	for (idx = 0; idx < ARRAY_SIZE(snd_cmipci_control_switches); idx++, sw++) {
 		err = snd_ctl_add(cm->card, snd_ctl_new1(sw, cm));
 		if (err < 0)
 			return err;
@@ -2446,7 +2430,7 @@
 static void snd_cmipci_proc_read(snd_info_entry_t *entry, 
 				 snd_info_buffer_t *buffer)
 {
-	cmipci_t *cm = snd_magic_cast(cmipci_t, entry->private_data, return);
+	cmipci_t *cm = entry->private_data;
 	int i;
 	
 	snd_iprintf(buffer, "%s\n\n", cm->card->longname);
@@ -2566,17 +2550,14 @@
 		kfree_nocheck(cm->res_joystick);
 	}
 #endif
-	if (cm->res_iobase) {
-		release_resource(cm->res_iobase);
-		kfree_nocheck(cm->res_iobase);
-	}
-	snd_magic_kfree(cm);
+	pci_release_regions(cm->pci);
+	kfree(cm);
 	return 0;
 }
 
 static int snd_cmipci_dev_free(snd_device_t *device)
 {
-	cmipci_t *cm = snd_magic_cast(cmipci_t, device->device_data, return -ENXIO);
+	cmipci_t *cm = device->device_data;
 	return snd_cmipci_free(cm);
 }
 
@@ -2598,7 +2579,7 @@
 	if ((err = pci_enable_device(pci)) < 0)
 		return err;
 
-	cm = snd_magic_kcalloc(cmipci_t, 0, GFP_KERNEL);
+	cm = kcalloc(1, sizeof(*cm), GFP_KERNEL);
 	if (cm == NULL)
 		return -ENOMEM;
 
@@ -2608,16 +2589,16 @@
 	cm->card = card;
 	cm->pci = pci;
 	cm->irq = -1;
-	cm->iobase = pci_resource_start(pci, 0);
 	cm->channel[0].ch = 0;
 	cm->channel[1].ch = 1;
 	cm->channel[0].is_dac = cm->channel[1].is_dac = 1; /* dual DAC mode */
 
-	if ((cm->res_iobase = request_region(cm->iobase, CM_EXTENT_CODEC, card->driver)) == NULL) {
-		snd_printk("unable to grab ports 0x%lx-0x%lx\n", cm->iobase, cm->iobase + CM_EXTENT_CODEC - 1);
-		err = -EBUSY;
-		goto __error;
+	if ((err = pci_request_regions(pci, card->driver)) < 0) {
+		kfree(cm);
+		return err;
 	}
+	cm->iobase = pci_resource_start(pci, 0);
+
 	if (request_irq(pci->irq, snd_cmipci_interrupt, SA_INTERRUPT|SA_SHIRQ, card->driver, (void *)cm)) {
 		snd_printk("unable to grab IRQ %d\n", pci->irq);
 		err = -EBUSY;
@@ -2776,12 +2757,12 @@
 			int i;
 			for (i = 0; ports[i]; i++) {
 				joystick_port[dev] = ports[i];
-				cm->res_joystick = request_region(ports[i], 8, "CMIPCI gameport");
+				cm->res_joystick = request_region(ports[i], 1, "CMIPCI gameport");
 				if (cm->res_joystick)
 					break;
 			}
 		} else {
-			cm->res_joystick = request_region(joystick_port[dev], 8, "CMIPCI gameport");
+			cm->res_joystick = request_region(joystick_port[dev], 1, "CMIPCI gameport");
 		}
 	}
 	if (cm->res_joystick) {
diff -Nru a/sound/pci/cs4281.c b/sound/pci/cs4281.c
--- a/sound/pci/cs4281.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/cs4281.c	2004-08-04 17:48:49 -07:00
@@ -40,8 +40,7 @@
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("Cirrus Logic CS4281");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{Cirrus Logic,CS4281}}");
+MODULE_SUPPORTED_DEVICE("{{Cirrus Logic,CS4281}}");
 
 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;	/* Index 0-MAX */
 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;	/* ID for this card */
@@ -51,16 +50,12 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for CS4281 soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for CS4281 soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable CS4281 soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(dual_codec, bool, boot_devs, 0444);
 MODULE_PARM_DESC(dual_codec, "Secondary Codec ID (0 = disabled).");
-MODULE_PARM_SYNTAX(dual_codec, SNDRV_ENABLED ",allows:{{0,3}}");
 
 /*
  *
@@ -441,8 +436,6 @@
  *
  */
 
-#define chip_t cs4281_t
-
 typedef struct snd_cs4281 cs4281_t;
 typedef struct snd_cs4281_dma cs4281_dma_t;
 
@@ -475,8 +468,6 @@
 	unsigned long ba1;		/* virtual (accessible) address */
 	unsigned long ba0_addr;
 	unsigned long ba1_addr;
-	struct resource *ba0_res;
-	struct resource *ba1_res;
 
 	int dual_codec;
 
@@ -575,7 +566,7 @@
 	 *  4. Read ACCTL = 460h, DCV should be reset by now and 460h = 07h
 	 *  5. if DCV not cleared, break and return error
 	 */
-	cs4281_t *chip = snd_magic_cast(cs4281_t, ac97->private_data, return);
+	cs4281_t *chip = ac97->private_data;
 	int count;
 
 	/*
@@ -613,7 +604,7 @@
 static unsigned short snd_cs4281_ac97_read(ac97_t *ac97,
 					   unsigned short reg)
 {
-	cs4281_t *chip = snd_magic_cast(cs4281_t, ac97->private_data, return -ENXIO);
+	cs4281_t *chip = ac97->private_data;
 	int count;
 	unsigned short result;
 	// FIXME: volatile is necessary in the following due to a bug of
@@ -709,9 +700,8 @@
 {
 	cs4281_dma_t *dma = (cs4281_dma_t *)substream->runtime->private_data;
 	cs4281_t *chip = snd_pcm_substream_chip(substream);
-	unsigned long flags;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock(&chip->reg_lock);
 	switch (cmd) {
 	case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
 		dma->valDCR |= BA0_DCR_MSK;
@@ -738,13 +728,13 @@
 			dma->valFCR &= ~BA0_FCR_FEN;
 		break;
 	default:
-		spin_unlock_irqrestore(&chip->reg_lock, flags);
+		spin_unlock(&chip->reg_lock);
 		return -EINVAL;
 	}
 	snd_cs4281_pokeBA0(chip, dma->regDMR, dma->valDMR);
 	snd_cs4281_pokeBA0(chip, dma->regFCR, dma->valFCR);
 	snd_cs4281_pokeBA0(chip, dma->regDCR, dma->valDCR);
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock(&chip->reg_lock);
 	return 0;
 }
 
@@ -851,11 +841,10 @@
 	snd_pcm_runtime_t *runtime = substream->runtime;
 	cs4281_dma_t *dma = (cs4281_dma_t *)runtime->private_data;
 	cs4281_t *chip = snd_pcm_substream_chip(substream);
-	unsigned long flags;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	snd_cs4281_mode(chip, dma, runtime, 0, 1);
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	return 0;
 }
 
@@ -864,11 +853,10 @@
 	snd_pcm_runtime_t *runtime = substream->runtime;
 	cs4281_dma_t *dma = (cs4281_dma_t *)runtime->private_data;
 	cs4281_t *chip = snd_pcm_substream_chip(substream);
-	unsigned long flags;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	snd_cs4281_mode(chip, dma, runtime, 1, 1);
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	return 0;
 }
 
@@ -1015,7 +1003,7 @@
 
 static void snd_cs4281_pcm_free(snd_pcm_t *pcm)
 {
-	cs4281_t *chip = snd_magic_cast(cs4281_t, pcm->private_data, return);
+	cs4281_t *chip = pcm->private_data;
 	chip->pcm = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
@@ -1124,13 +1112,13 @@
 
 static void snd_cs4281_mixer_free_ac97_bus(ac97_bus_t *bus)
 {
-	cs4281_t *chip = snd_magic_cast(cs4281_t, bus->private_data, return);
+	cs4281_t *chip = bus->private_data;
 	chip->ac97_bus = NULL;
 }
 
 static void snd_cs4281_mixer_free_ac97(ac97_t *ac97)
 {
-	cs4281_t *chip = snd_magic_cast(cs4281_t, ac97->private_data, return);
+	cs4281_t *chip = ac97->private_data;
 	if (ac97->num)
 		chip->ac97_secondary = NULL;
 	else
@@ -1140,17 +1128,16 @@
 static int __devinit snd_cs4281_mixer(cs4281_t * chip)
 {
 	snd_card_t *card = chip->card;
-	ac97_bus_t bus;
-	ac97_t ac97;
+	ac97_template_t ac97;
 	int err;
+	static ac97_bus_ops_t ops = {
+		.write = snd_cs4281_ac97_write,
+		.read = snd_cs4281_ac97_read,
+	};
 
-	memset(&bus, 0, sizeof(bus));
-	bus.write = snd_cs4281_ac97_write;
-	bus.read = snd_cs4281_ac97_read;
-	bus.private_data = chip;
-	bus.private_free = snd_cs4281_mixer_free_ac97_bus;
-	if ((err = snd_ac97_bus(card, &bus, &chip->ac97_bus)) < 0)
+	if ((err = snd_ac97_bus(card, 0, &ops, chip, &chip->ac97_bus)) < 0)
 		return err;
+	chip->ac97_bus->private_free = snd_cs4281_mixer_free_ac97_bus;
 
 	memset(&ac97, 0, sizeof(ac97));
 	ac97.private_data = chip;
@@ -1177,7 +1164,7 @@
 static void snd_cs4281_proc_read(snd_info_entry_t *entry, 
 				  snd_info_buffer_t * buffer)
 {
-	cs4281_t *chip = snd_magic_cast(cs4281_t, entry->private_data, return);
+	cs4281_t *chip = entry->private_data;
 
 	snd_iprintf(buffer, "Cirrus Logic CS4281\n\n");
 	snd_iprintf(buffer, "Spurious half IRQs   : %u\n", chip->spurious_dhtc_irq);
@@ -1188,7 +1175,7 @@
 				struct file *file, char __user *buf, long count)
 {
 	long size;
-	cs4281_t *chip = snd_magic_cast(cs4281_t, entry->private_data, return -ENXIO);
+	cs4281_t *chip = entry->private_data;
 	
 	size = count;
 	if (file->f_pos + size > CS4281_BA0_SIZE)
@@ -1205,7 +1192,7 @@
 				struct file *file, char __user *buf, long count)
 {
 	long size;
-	cs4281_t *chip = snd_magic_cast(cs4281_t, entry->private_data, return -ENXIO);
+	cs4281_t *chip = entry->private_data;
 	
 	size = count;
 	if (file->f_pos + size > CS4281_BA1_SIZE)
@@ -1262,7 +1249,7 @@
 	cs4281_gameport_t *gp = (cs4281_gameport_t *)gameport;
 	cs4281_t *chip;
 	snd_assert(gp, return);
-	chip = snd_magic_cast(cs4281_t, gp->chip, return);
+	chip = gp->chip;
 	snd_cs4281_pokeBA0(chip, BA0_JSPT, 0xff);
 }
 
@@ -1271,7 +1258,7 @@
 	cs4281_gameport_t *gp = (cs4281_gameport_t *)gameport;
 	cs4281_t *chip;
 	snd_assert(gp, return 0);
-	chip = snd_magic_cast(cs4281_t, gp->chip, return 0);
+	chip = gp->chip;
 	return snd_cs4281_peekBA0(chip, BA0_JSPT);
 }
 
@@ -1283,7 +1270,7 @@
 	unsigned js1, js2, jst;
 	
 	snd_assert(gp, return 0);
-	chip = snd_magic_cast(cs4281_t, gp->chip, return 0);
+	chip = gp->chip;
 
 	js1 = snd_cs4281_peekBA0(chip, BA0_JSC1);
 	js2 = snd_cs4281_peekBA0(chip, BA0_JSC2);
@@ -1369,28 +1356,21 @@
 	/* PCI interface - D3 state */
 	pci_set_power_state(chip->pci, 3);
 
+	if (chip->irq >= 0)
+		free_irq(chip->irq, (void *)chip);
 	if (chip->ba0)
 		iounmap((void *) chip->ba0);
 	if (chip->ba1)
 		iounmap((void *) chip->ba1);
-	if (chip->ba0_res) {
-		release_resource(chip->ba0_res);
-		kfree_nocheck(chip->ba0_res);
-	}
-	if (chip->ba1_res) {
-		release_resource(chip->ba1_res);
-		kfree_nocheck(chip->ba1_res);
-	}
-	if (chip->irq >= 0)
-		free_irq(chip->irq, (void *)chip);
+	pci_release_regions(chip->pci);
 
-	snd_magic_kfree(chip);
+	kfree(chip);
 	return 0;
 }
 
 static int snd_cs4281_dev_free(snd_device_t *device)
 {
-	cs4281_t *chip = snd_magic_cast(cs4281_t, device->device_data, return -ENXIO);
+	cs4281_t *chip = device->device_data;
 	return snd_cs4281_free(chip);
 }
 
@@ -1415,15 +1395,13 @@
 	*rchip = NULL;
 	if ((err = pci_enable_device(pci)) < 0)
 		return err;
-	chip = snd_magic_kcalloc(cs4281_t, 0, GFP_KERNEL);
+	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
 	if (chip == NULL)
 		return -ENOMEM;
 	spin_lock_init(&chip->reg_lock);
 	chip->card = card;
 	chip->pci = pci;
 	chip->irq = -1;
-	chip->ba0_addr = pci_resource_start(pci, 0);
-	chip->ba1_addr = pci_resource_start(pci, 1);
 	pci_set_master(pci);
 	if (dual_codec < 0 || dual_codec > 3) {
 		snd_printk(KERN_ERR "invalid dual_codec option %d\n", dual_codec);
@@ -1431,16 +1409,13 @@
 	}
 	chip->dual_codec = dual_codec;
 
-	if ((chip->ba0_res = request_mem_region(chip->ba0_addr, CS4281_BA0_SIZE, "CS4281 BA0")) == NULL) {
-		snd_printk(KERN_ERR "unable to grab memory region 0x%lx-0x%lx\n", chip->ba0_addr, chip->ba0_addr + CS4281_BA0_SIZE - 1);
-		snd_cs4281_free(chip);
-		return -ENOMEM;
-	}
-	if ((chip->ba1_res = request_mem_region(chip->ba1_addr, CS4281_BA1_SIZE, "CS4281 BA1")) == NULL) {
-		snd_printk(KERN_ERR "unable to grab memory region 0x%lx-0x%lx\n", chip->ba1_addr, chip->ba1_addr + CS4281_BA1_SIZE - 1);
-		snd_cs4281_free(chip);
-		return -ENOMEM;
+	if ((err = pci_request_regions(pci, "CS4281")) < 0) {
+		kfree(chip);
+		return err;
 	}
+	chip->ba0_addr = pci_resource_start(pci, 0);
+	chip->ba1_addr = pci_resource_start(pci, 1);
+
 	if (request_irq(pci->irq, snd_cs4281_interrupt, SA_INTERRUPT|SA_SHIRQ, "CS4281", (void *)chip)) {
 		snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
 		snd_cs4281_free(chip);
@@ -1448,8 +1423,8 @@
 	}
 	chip->irq = pci->irq;
 
-	chip->ba0 = (unsigned long) ioremap_nocache(chip->ba0_addr, CS4281_BA0_SIZE);
-	chip->ba1 = (unsigned long) ioremap_nocache(chip->ba1_addr, CS4281_BA1_SIZE);
+	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));
 	if (!chip->ba0 || !chip->ba1) {
 		snd_cs4281_free(chip);
 		return -ENOMEM;
@@ -1713,10 +1688,9 @@
 
 static int snd_cs4281_midi_input_open(snd_rawmidi_substream_t * substream)
 {
-	unsigned long flags;
-	cs4281_t *chip = snd_magic_cast(cs4281_t, substream->rmidi->private_data, return -ENXIO);
+	cs4281_t *chip = substream->rmidi->private_data;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
  	chip->midcr |= BA0_MIDCR_RXE;
 	chip->midi_input = substream;
 	if (!(chip->uartm & CS4281_MODE_OUTPUT)) {
@@ -1724,16 +1698,15 @@
 	} else {
 		snd_cs4281_pokeBA0(chip, BA0_MIDCR, chip->midcr);
 	}
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	return 0;
 }
 
 static int snd_cs4281_midi_input_close(snd_rawmidi_substream_t * substream)
 {
-	unsigned long flags;
-	cs4281_t *chip = snd_magic_cast(cs4281_t, substream->rmidi->private_data, return -ENXIO);
+	cs4281_t *chip = substream->rmidi->private_data;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	chip->midcr &= ~(BA0_MIDCR_RXE | BA0_MIDCR_RIE);
 	chip->midi_input = NULL;
 	if (!(chip->uartm & CS4281_MODE_OUTPUT)) {
@@ -1742,16 +1715,15 @@
 		snd_cs4281_pokeBA0(chip, BA0_MIDCR, chip->midcr);
 	}
 	chip->uartm &= ~CS4281_MODE_INPUT;
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	return 0;
 }
 
 static int snd_cs4281_midi_output_open(snd_rawmidi_substream_t * substream)
 {
-	unsigned long flags;
-	cs4281_t *chip = snd_magic_cast(cs4281_t, substream->rmidi->private_data, return -ENXIO);
+	cs4281_t *chip = substream->rmidi->private_data;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	chip->uartm |= CS4281_MODE_OUTPUT;
 	chip->midcr |= BA0_MIDCR_TXE;
 	chip->midi_output = substream;
@@ -1760,16 +1732,15 @@
 	} else {
 		snd_cs4281_pokeBA0(chip, BA0_MIDCR, chip->midcr);
 	}
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	return 0;
 }
 
 static int snd_cs4281_midi_output_close(snd_rawmidi_substream_t * substream)
 {
-	unsigned long flags;
-	cs4281_t *chip = snd_magic_cast(cs4281_t, substream->rmidi->private_data, return -ENXIO);
+	cs4281_t *chip = substream->rmidi->private_data;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	chip->midcr &= ~(BA0_MIDCR_TXE | BA0_MIDCR_TIE);
 	chip->midi_output = NULL;
 	if (!(chip->uartm & CS4281_MODE_INPUT)) {
@@ -1778,14 +1749,14 @@
 		snd_cs4281_pokeBA0(chip, BA0_MIDCR, chip->midcr);
 	}
 	chip->uartm &= ~CS4281_MODE_OUTPUT;
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	return 0;
 }
 
 static void snd_cs4281_midi_input_trigger(snd_rawmidi_substream_t * substream, int up)
 {
 	unsigned long flags;
-	cs4281_t *chip = snd_magic_cast(cs4281_t, substream->rmidi->private_data, return);
+	cs4281_t *chip = substream->rmidi->private_data;
 
 	spin_lock_irqsave(&chip->reg_lock, flags);
 	if (up) {
@@ -1805,7 +1776,7 @@
 static void snd_cs4281_midi_output_trigger(snd_rawmidi_substream_t * substream, int up)
 {
 	unsigned long flags;
-	cs4281_t *chip = snd_magic_cast(cs4281_t, substream->rmidi->private_data, return);
+	cs4281_t *chip = substream->rmidi->private_data;
 	unsigned char byte;
 
 	spin_lock_irqsave(&chip->reg_lock, flags);
@@ -1872,7 +1843,7 @@
 
 static irqreturn_t snd_cs4281_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	cs4281_t *chip = snd_magic_cast(cs4281_t, dev_id, return IRQ_NONE);
+	cs4281_t *chip = dev_id;
 	unsigned int status, dma, val;
 	cs4281_dma_t *cdma;
 
@@ -1919,7 +1890,9 @@
 			c = snd_cs4281_peekBA0(chip, BA0_MIDRP);
 			if ((chip->midcr & BA0_MIDCR_RIE) == 0)
 				continue;
+			spin_unlock(&chip->reg_lock);
 			snd_rawmidi_receive(chip->midi_input, &c, 1);
+			spin_lock(&chip->reg_lock);
 		}
 		while ((snd_cs4281_peekBA0(chip, BA0_MIDSR) & BA0_MIDSR_TBF) == 0) {
 			if ((chip->midcr & BA0_MIDCR_TIE) == 0)
@@ -2034,13 +2007,11 @@
 	BA0_PPRVC,
 };
 
-#define number_of(array)	(sizeof(array) / sizeof(array[0]))
-
 #define CLKCR1_CKRA                             0x00010000L
 
 static int cs4281_suspend(snd_card_t *card, unsigned int state)
 {
-	cs4281_t *chip = snd_magic_cast(cs4281_t, card->pm_private_data, return -EINVAL);
+	cs4281_t *chip = card->pm_private_data;
 	u32 ulCLK;
 	unsigned int i;
 
@@ -2059,7 +2030,7 @@
 	snd_cs4281_pokeBA0(chip, BA0_HICR, BA0_HICR_CHGM);
 
 	/* remember the status registers */
-	for (i = 0; i < number_of(saved_regs); i++)
+	for (i = 0; i < ARRAY_SIZE(saved_regs); i++)
 		if (saved_regs[i])
 			chip->suspend_regs[i] = snd_cs4281_peekBA0(chip, saved_regs[i]);
 
@@ -2085,7 +2056,7 @@
 
 static int cs4281_resume(snd_card_t *card, unsigned int state)
 {
-	cs4281_t *chip = snd_magic_cast(cs4281_t, card->pm_private_data, return -EINVAL);
+	cs4281_t *chip = card->pm_private_data;
 	unsigned int i;
 	u32 ulCLK;
 
@@ -2098,7 +2069,7 @@
 	snd_cs4281_chip_init(chip);
 
 	/* restore the status registers */
-	for (i = 0; i < number_of(saved_regs); i++)
+	for (i = 0; i < ARRAY_SIZE(saved_regs); i++)
 		if (saved_regs[i])
 			snd_cs4281_pokeBA0(chip, saved_regs[i], chip->suspend_regs[i]);
 
diff -Nru a/sound/pci/cs46xx/cs46xx.c b/sound/pci/cs46xx/cs46xx.c
--- a/sound/pci/cs46xx/cs46xx.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/cs46xx/cs46xx.c	2004-08-04 17:48:49 -07:00
@@ -37,8 +37,7 @@
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("Cirrus Logic Sound Fusion CS46XX");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{Cirrus Logic,Sound Fusion (CS4280)},"
+MODULE_SUPPORTED_DEVICE("{{Cirrus Logic,Sound Fusion (CS4280)},"
 		"{Cirrus Logic,Sound Fusion (CS4610)},"
 		"{Cirrus Logic,Sound Fusion (CS4612)},"
 		"{Cirrus Logic,Sound Fusion (CS4615)},"
@@ -56,22 +55,16 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for the CS46xx soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for the CS46xx soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable CS46xx soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(external_amp, bool, boot_devs, 0444);
 MODULE_PARM_DESC(external_amp, "Force to enable external amplifer.");
-MODULE_PARM_SYNTAX(external_amp, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC);
 module_param_array(thinkpad, bool, boot_devs, 0444);
 MODULE_PARM_DESC(thinkpad, "Force to enable Thinkpad's CLKRUN control.");
-MODULE_PARM_SYNTAX(thinkpad, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC);
 module_param_array(mmap_valid, bool, boot_devs, 0444);
 MODULE_PARM_DESC(mmap_valid, "Support OSS mmap.");
-MODULE_PARM_SYNTAX(mmap_valid, SNDRV_ENABLED "," SNDRV_BOOLEAN_TRUE_DESC);
 
 static struct pci_device_id snd_cs46xx_ids[] = {
         { 0x1013, 0x6001, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },   /* CS4280 */
diff -Nru a/sound/pci/cs46xx/cs46xx_lib.c b/sound/pci/cs46xx/cs46xx_lib.c
--- a/sound/pci/cs46xx/cs46xx_lib.c	2004-08-04 17:48:48 -07:00
+++ b/sound/pci/cs46xx/cs46xx_lib.c	2004-08-04 17:48:48 -07:00
@@ -79,6 +79,8 @@
 		     (codec_index == CS46XX_SECONDARY_CODEC_INDEX),
 		     return -EINVAL);
 
+	chip->active_ctrl(chip, 1);
+
 	if (codec_index == CS46XX_SECONDARY_CODEC_INDEX)
 		offset = CS46XX_SECONDARY_CODEC_OFFSET;
 
@@ -184,27 +186,22 @@
 	//snd_cs46xx_peekBA0(chip, BA0_ACCAD);
 	result = snd_cs46xx_peekBA0(chip, BA0_ACSDA + offset);
  end:
+	chip->active_ctrl(chip, -1);
 	return result;
 }
 
 static unsigned short snd_cs46xx_ac97_read(ac97_t * ac97,
 					    unsigned short reg)
 {
-	cs46xx_t *chip = snd_magic_cast(cs46xx_t, ac97->private_data, return -ENXIO);
+	cs46xx_t *chip = ac97->private_data;
 	unsigned short val;
-	int codec_index = -1;
+	int codec_index = ac97->num;
+
+	snd_assert(codec_index == CS46XX_PRIMARY_CODEC_INDEX ||
+		   codec_index == CS46XX_SECONDARY_CODEC_INDEX,
+		   return 0xffff);
 
-	/* UGGLY: nr_ac97_codecs == 0 primery codec detection is in progress */
-	if (ac97 == chip->ac97[CS46XX_PRIMARY_CODEC_INDEX] || chip->nr_ac97_codecs == 0)
-		codec_index = CS46XX_PRIMARY_CODEC_INDEX;
-	/* UGGLY: nr_ac97_codecs == 1 secondary codec detection is in progress */
-	else if (ac97 == chip->ac97[CS46XX_SECONDARY_CODEC_INDEX] || chip->nr_ac97_codecs == 1)
-		codec_index = CS46XX_SECONDARY_CODEC_INDEX;
-	else
-		snd_assert(0, return 0xffff);
-	chip->active_ctrl(chip, 1);
 	val = snd_cs46xx_codec_read(chip, reg, codec_index);
-	chip->active_ctrl(chip, -1);
 
 	/* HACK: voyetra uses EAPD bit in the reverse way.
 	 * we flip the bit to show the mixer status correctly
@@ -227,6 +224,8 @@
 		    (codec_index == CS46XX_SECONDARY_CODEC_INDEX),
 		    return);
 
+	chip->active_ctrl(chip, 1);
+
 	/*
 	 *  1. Write ACCAD = Command Address Register = 46Ch for AC97 register address
 	 *  2. Write ACCDA = Command Data Register = 470h    for data to write to AC97
@@ -271,27 +270,24 @@
 		 *  ACCTL = 460h, DCV should be reset by now and 460h = 07h
 		 */
 		if (!(snd_cs46xx_peekBA0(chip, BA0_ACCTL) & ACCTL_DCV)) {
-			return;
+			goto end;
 		}
 	}
 	snd_printk("AC'97 write problem, codec_index = %d, reg = 0x%x, val = 0x%x\n", codec_index, reg, val);
+ end:
+	chip->active_ctrl(chip, -1);
 }
 
 static void snd_cs46xx_ac97_write(ac97_t *ac97,
 				   unsigned short reg,
 				   unsigned short val)
 {
-	cs46xx_t *chip = snd_magic_cast(cs46xx_t, ac97->private_data, return);
-	int codec_index = -1;
+	cs46xx_t *chip = ac97->private_data;
+	int codec_index = ac97->num;
 
-	/* UGGLY: nr_ac97_codecs == 0 primery codec detection is in progress */
-	if (ac97 == chip->ac97[CS46XX_PRIMARY_CODEC_INDEX] || chip->nr_ac97_codecs == 0)
-		codec_index = CS46XX_PRIMARY_CODEC_INDEX;
-	/* UGGLY: nr_ac97_codecs == 1 secondary codec detection is in progress */
-	else  if (ac97 == chip->ac97[CS46XX_SECONDARY_CODEC_INDEX] || chip->nr_ac97_codecs == 1)
-		codec_index = CS46XX_SECONDARY_CODEC_INDEX;
-	else
-		snd_assert(0,return);
+	snd_assert(codec_index == CS46XX_PRIMARY_CODEC_INDEX ||
+		   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
@@ -299,9 +295,7 @@
 	if (reg == AC97_POWERDOWN && chip->amplifier_ctrl == amp_voyetra)
 		val ^= 0x8000;
 
-	chip->active_ctrl(chip, 1);
 	snd_cs46xx_codec_write(chip, reg, val, codec_index);
-	chip->active_ctrl(chip, -1);
 }
 
 
@@ -688,84 +682,35 @@
  *  PCM part
  */
 
+static void snd_cs46xx_pb_trans_copy(snd_pcm_substream_t *substream,
+				     snd_pcm_indirect_t *rec, size_t bytes)
+{
+	snd_pcm_runtime_t *runtime = substream->runtime;
+	cs46xx_pcm_t * cpcm = runtime->private_data;
+	memcpy(cpcm->hw_buf.area + rec->hw_data, runtime->dma_area + rec->sw_data, bytes);
+}
+
 static int snd_cs46xx_playback_transfer(snd_pcm_substream_t *substream)
 {
-	/* cs46xx_t *chip = snd_pcm_substream_chip(substream); */
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	cs46xx_pcm_t * cpcm = snd_magic_cast(cs46xx_pcm_t, runtime->private_data, return -ENXIO);
-	snd_pcm_uframes_t appl_ptr = runtime->control->appl_ptr;
-	snd_pcm_sframes_t diff = appl_ptr - cpcm->appl_ptr;
-	int buffer_size = runtime->period_size * CS46XX_FRAGS << cpcm->shift;
-
-	if (diff) {
-		if (diff < -(snd_pcm_sframes_t) (runtime->boundary / 2))
-			diff += runtime->boundary;
-		cpcm->sw_ready += diff * (1 << cpcm->shift);
-		cpcm->appl_ptr = appl_ptr;
-	}
-	while (cpcm->hw_ready < buffer_size && 
-	       cpcm->sw_ready > 0) {
-		size_t hw_to_end = buffer_size - cpcm->hw_data;
-		size_t sw_to_end = cpcm->sw_bufsize - cpcm->sw_data;
-		size_t bytes = buffer_size - cpcm->hw_ready;
-		if (cpcm->sw_ready < (int)bytes)
-			bytes = cpcm->sw_ready;
-		if (hw_to_end < bytes)
-			bytes = hw_to_end;
-		if (sw_to_end < bytes)
-			bytes = sw_to_end;
-		memcpy(cpcm->hw_buf.area + cpcm->hw_data,
-		       runtime->dma_area + cpcm->sw_data,
-		       bytes);
-		cpcm->hw_data += bytes;
-		if ((int)cpcm->hw_data == buffer_size)
-			cpcm->hw_data = 0;
-		cpcm->sw_data += bytes;
-		if (cpcm->sw_data == cpcm->sw_bufsize)
-			cpcm->sw_data = 0;
-		cpcm->hw_ready += bytes;
-		cpcm->sw_ready -= bytes;
-	}
+	cs46xx_pcm_t * cpcm = runtime->private_data;
+	snd_pcm_indirect_playback_transfer(substream, &cpcm->pcm_rec, snd_cs46xx_pb_trans_copy);
 	return 0;
 }
 
-static int snd_cs46xx_capture_transfer(snd_pcm_substream_t *substream)
+static void snd_cs46xx_cp_trans_copy(snd_pcm_substream_t *substream,
+				     snd_pcm_indirect_t *rec, size_t bytes)
 {
 	cs46xx_t *chip = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	snd_pcm_uframes_t appl_ptr = runtime->control->appl_ptr;
-	snd_pcm_sframes_t diff = appl_ptr - chip->capt.appl_ptr;
-	int buffer_size = runtime->period_size * CS46XX_FRAGS << chip->capt.shift;
-
-	if (diff) {
-		if (diff < -(snd_pcm_sframes_t) (runtime->boundary / 2))
-			diff += runtime->boundary;
-		chip->capt.sw_ready -= diff * (1 << chip->capt.shift);
-		chip->capt.appl_ptr = appl_ptr;
-	}
-	while (chip->capt.hw_ready > 0 && 
-	       chip->capt.sw_ready < (int)chip->capt.sw_bufsize) {
-		size_t hw_to_end = buffer_size - chip->capt.hw_data;
-		size_t sw_to_end = chip->capt.sw_bufsize - chip->capt.sw_data;
-		size_t bytes = chip->capt.sw_bufsize - chip->capt.sw_ready;
-		if (chip->capt.hw_ready < (int)bytes)
-			bytes = chip->capt.hw_ready;
-		if (hw_to_end < bytes)
-			bytes = hw_to_end;
-		if (sw_to_end < bytes)
-			bytes = sw_to_end;
-		memcpy(runtime->dma_area + chip->capt.sw_data,
-		       chip->capt.hw_buf.area + chip->capt.hw_data,
-		       bytes);
-		chip->capt.hw_data += bytes;
-		if ((int)chip->capt.hw_data == buffer_size)
-			chip->capt.hw_data = 0;
-		chip->capt.sw_data += bytes;
-		if (chip->capt.sw_data == chip->capt.sw_bufsize)
-			chip->capt.sw_data = 0;
-		chip->capt.hw_ready -= bytes;
-		chip->capt.sw_ready += bytes;
-	}
+	memcpy(runtime->dma_area + rec->sw_data,
+	       chip->capt.hw_buf.area + rec->hw_data, bytes);
+}
+
+static int snd_cs46xx_capture_transfer(snd_pcm_substream_t *substream)
+{
+	cs46xx_t *chip = snd_pcm_substream_chip(substream);
+	snd_pcm_indirect_capture_transfer(substream, &chip->capt.pcm_rec, snd_cs46xx_cp_trans_copy);
 	return 0;
 }
 
@@ -773,7 +718,7 @@
 {
 	cs46xx_t *chip = snd_pcm_substream_chip(substream);
 	size_t ptr;
-	cs46xx_pcm_t *cpcm = snd_magic_cast(cs46xx_pcm_t, substream->runtime->private_data, return -ENXIO);
+	cs46xx_pcm_t *cpcm = substream->runtime->private_data;
 	snd_assert (cpcm->pcm_channel,return -ENXIO);
 
 #ifdef CONFIG_SND_CS46XX_NEW_DSP
@@ -789,9 +734,7 @@
 {
 	cs46xx_t *chip = snd_pcm_substream_chip(substream);
 	size_t ptr;
-	cs46xx_pcm_t *cpcm = snd_magic_cast(cs46xx_pcm_t, substream->runtime->private_data, return -ENXIO);
-	ssize_t bytes;
-	int buffer_size = substream->runtime->period_size * CS46XX_FRAGS << cpcm->shift;
+	cs46xx_pcm_t *cpcm = substream->runtime->private_data;
 
 #ifdef CONFIG_SND_CS46XX_NEW_DSP
 	snd_assert (cpcm->pcm_channel,return -ENXIO);
@@ -800,18 +743,7 @@
 	ptr = snd_cs46xx_peek(chip, BA1_PBA);
 #endif
 	ptr -= cpcm->hw_buf.addr;
-
-	bytes = ptr - cpcm->hw_io;
-
-	if (bytes < 0)
-		bytes += buffer_size;
-	cpcm->hw_io = ptr;
-	cpcm->hw_ready -= bytes;
-	cpcm->sw_io += bytes;
-	if (cpcm->sw_io >= cpcm->sw_bufsize)
-		cpcm->sw_io -= cpcm->sw_bufsize;
-	snd_cs46xx_playback_transfer(substream);
-	return cpcm->sw_io >> cpcm->shift;
+	return snd_pcm_indirect_playback_pointer(substream, &cpcm->pcm_rec, ptr);
 }
 
 static snd_pcm_uframes_t snd_cs46xx_capture_direct_pointer(snd_pcm_substream_t * substream)
@@ -825,18 +757,7 @@
 {
 	cs46xx_t *chip = snd_pcm_substream_chip(substream);
 	size_t ptr = snd_cs46xx_peek(chip, BA1_CBA) - chip->capt.hw_buf.addr;
-	ssize_t bytes = ptr - chip->capt.hw_io;
-	int buffer_size = substream->runtime->period_size * CS46XX_FRAGS << chip->capt.shift;
-
-	if (bytes < 0)
-		bytes += buffer_size;
-	chip->capt.hw_io = ptr;
-	chip->capt.hw_ready += bytes;
-	chip->capt.sw_io += bytes;
-	if (chip->capt.sw_io >= chip->capt.sw_bufsize)
-		chip->capt.sw_io -= chip->capt.sw_bufsize;
-	snd_cs46xx_capture_transfer(substream);
-	return chip->capt.sw_io >> chip->capt.shift;
+	return snd_pcm_indirect_capture_pointer(substream, &chip->capt.pcm_rec, ptr);
 }
 
 static int snd_cs46xx_playback_trigger(snd_pcm_substream_t * substream,
@@ -847,13 +768,7 @@
 	int result = 0;
 
 #ifdef CONFIG_SND_CS46XX_NEW_DSP
-	cs46xx_pcm_t *cpcm = snd_magic_cast(cs46xx_pcm_t, substream->runtime->private_data, return -ENXIO);
-#else
-	spin_lock(&chip->reg_lock);
-#endif
-
-#ifdef CONFIG_SND_CS46XX_NEW_DSP
-
+	cs46xx_pcm_t *cpcm = substream->runtime->private_data;
 	if (! cpcm->pcm_channel) {
 		return -ENXIO;
 	}
@@ -872,6 +787,7 @@
 		if (substream->runtime->periods != CS46XX_FRAGS)
 			snd_cs46xx_playback_transfer(substream);
 #else
+		spin_lock(&chip->reg_lock);
 		if (substream->runtime->periods != CS46XX_FRAGS)
 			snd_cs46xx_playback_transfer(substream);
 		{ unsigned int tmp;
@@ -879,6 +795,7 @@
 		tmp &= 0x0000ffff;
 		snd_cs46xx_poke(chip, BA1_PCTL, chip->play_ctl | tmp);
 		}
+		spin_unlock(&chip->reg_lock);
 #endif
 		break;
 	case SNDRV_PCM_TRIGGER_STOP:
@@ -891,11 +808,13 @@
 		if (!cpcm->pcm_channel->unlinked)
 			cs46xx_dsp_pcm_unlink(chip,cpcm->pcm_channel);
 #else
+		spin_lock(&chip->reg_lock);
 		{ unsigned int tmp;
 		tmp = snd_cs46xx_peek(chip, BA1_PCTL);
 		tmp &= 0x0000ffff;
 		snd_cs46xx_poke(chip, BA1_PCTL, tmp);
 		}
+		spin_unlock(&chip->reg_lock);
 #endif
 		break;
 	default:
@@ -903,10 +822,6 @@
 		break;
 	}
 
-#ifndef CONFIG_SND_CS46XX_NEW_DSP
-	spin_unlock(&chip->reg_lock);
-#endif
-
 	return result;
 }
 
@@ -987,7 +902,7 @@
 	int sample_rate = params_rate(hw_params);
 	int period_size = params_period_bytes(hw_params);
 #endif
-	cpcm = snd_magic_cast(cs46xx_pcm_t, runtime->private_data, return -ENXIO);
+	cpcm = runtime->private_data;
 
 #ifdef CONFIG_SND_CS46XX_NEW_DSP
 	snd_assert (sample_rate != 0, return -ENXIO);
@@ -1084,7 +999,7 @@
 	snd_pcm_runtime_t *runtime = substream->runtime;
 	cs46xx_pcm_t *cpcm;
 
-	cpcm = snd_magic_cast(cs46xx_pcm_t, runtime->private_data, return -ENXIO);
+	cpcm = runtime->private_data;
 
 	/* if play_back open fails, then this function
 	   is called and cpcm can actually be NULL here */
@@ -1108,7 +1023,7 @@
 	snd_pcm_runtime_t *runtime = substream->runtime;
 	cs46xx_pcm_t *cpcm;
 
-	cpcm = snd_magic_cast(cs46xx_pcm_t, runtime->private_data, return -ENXIO);
+	cpcm = runtime->private_data;
 
 #ifdef CONFIG_SND_CS46XX_NEW_DSP
     snd_assert (cpcm->pcm_channel != NULL, return -ENXIO);
@@ -1143,10 +1058,9 @@
 			pfie |= 0x00004000;
 	}
 	
-	cpcm->sw_bufsize = snd_pcm_lib_buffer_bytes(substream);
-	cpcm->sw_data = cpcm->sw_io = cpcm->sw_ready = 0;
-	cpcm->hw_data = cpcm->hw_io = cpcm->hw_ready = 0;
-	cpcm->appl_ptr = 0;
+	memset(&cpcm->pcm_rec, 0, sizeof(cpcm->pcm_rec));
+	cpcm->pcm_rec.sw_buffer_size = snd_pcm_lib_buffer_bytes(substream);
+	cpcm->pcm_rec.hw_buffer_size = runtime->period_size * CS46XX_FRAGS << cpcm->shift;
 
 #ifdef CONFIG_SND_CS46XX_NEW_DSP
 
@@ -1223,10 +1137,9 @@
 
 	snd_cs46xx_poke(chip, BA1_CBA, chip->capt.hw_buf.addr);
 	chip->capt.shift = 2;
-	chip->capt.sw_bufsize = snd_pcm_lib_buffer_bytes(substream);
-	chip->capt.sw_data = chip->capt.sw_io = chip->capt.sw_ready = 0;
-	chip->capt.hw_data = chip->capt.hw_io = chip->capt.hw_ready = 0;
-	chip->capt.appl_ptr = 0;
+	memset(&chip->capt.pcm_rec, 0, sizeof(chip->capt.pcm_rec));
+	chip->capt.pcm_rec.sw_buffer_size = snd_pcm_lib_buffer_bytes(substream);
+	chip->capt.pcm_rec.hw_buffer_size = runtime->period_size * CS46XX_FRAGS << 2;
 	snd_cs46xx_set_capture_sample_rate(chip, runtime->rate);
 
 	return 0;
@@ -1234,7 +1147,7 @@
 
 static irqreturn_t snd_cs46xx_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	cs46xx_t *chip = snd_magic_cast(cs46xx_t, dev_id, return IRQ_NONE);
+	cs46xx_t *chip = dev_id;
 	u32 status1;
 #ifdef CONFIG_SND_CS46XX_NEW_DSP
 	dsp_spos_instance_t * ins = chip->dsp_spos_instance;
@@ -1265,7 +1178,7 @@
 					if (ins->pcm_channels[i].active &&
 					    ins->pcm_channels[i].private_data &&
 					    !ins->pcm_channels[i].unlinked) {
-						cpcm = snd_magic_cast(cs46xx_pcm_t, ins->pcm_channels[i].private_data, continue);
+						cpcm = ins->pcm_channels[i].private_data;
 						snd_pcm_period_elapsed(cpcm->substream);
 					}
 				}
@@ -1275,7 +1188,7 @@
 				if (ins->pcm_channels[i].active && 
 				    ins->pcm_channels[i].private_data &&
 				    !ins->pcm_channels[i].unlinked) {
-					cpcm = snd_magic_cast(cs46xx_pcm_t, ins->pcm_channels[i].private_data, continue);
+					cpcm = ins->pcm_channels[i].private_data;
 					snd_pcm_period_elapsed(cpcm->substream);
 				}
 			}
@@ -1302,7 +1215,9 @@
 			c = snd_cs46xx_peekBA0(chip, BA0_MIDRP);
 			if ((chip->midcr & MIDCR_RIE) == 0)
 				continue;
+			spin_unlock(&chip->reg_lock);
 			snd_rawmidi_receive(chip->midi_input, &c, 1);
+			spin_lock(&chip->reg_lock);
 		}
 		while ((snd_cs46xx_peekBA0(chip, BA0_MIDSR) & MIDSR_TBF) == 0) {
 			if ((chip->midcr & MIDCR_TIE) == 0)
@@ -1370,10 +1285,8 @@
 
 static unsigned int period_sizes[] = { 32, 64, 128, 256, 512, 1024, 2048 };
 
-#define PERIOD_SIZES sizeof(period_sizes) / sizeof(period_sizes[0])
-
 static snd_pcm_hw_constraint_list_t hw_constraints_period_sizes = {
-	.count = PERIOD_SIZES,
+	.count = ARRAY_SIZE(period_sizes),
 	.list = period_sizes,
 	.mask = 0
 };
@@ -1382,10 +1295,8 @@
 
 static void snd_cs46xx_pcm_free_substream(snd_pcm_runtime_t *runtime)
 {
-	cs46xx_pcm_t * cpcm = snd_magic_cast(cs46xx_pcm_t, runtime->private_data, return);
-	
-	if (cpcm)
-		snd_magic_kfree(cpcm);
+	cs46xx_pcm_t * cpcm = runtime->private_data;
+	kfree(cpcm);
 }
 
 static int _cs46xx_playback_open_channel (snd_pcm_substream_t * substream,int pcm_channel_id)
@@ -1394,11 +1305,12 @@
 	cs46xx_pcm_t * cpcm;
 	snd_pcm_runtime_t *runtime = substream->runtime;
 
-	cpcm = snd_magic_kcalloc(cs46xx_pcm_t, 0, GFP_KERNEL);
+	cpcm = kcalloc(1, sizeof(*cpcm), GFP_KERNEL);
 	if (cpcm == NULL)
 		return -ENOMEM;
-	if (snd_dma_alloc_pages(&chip->dma_dev, PAGE_SIZE, &cpcm->hw_buf) < 0) {
-		snd_magic_kfree(cpcm);
+	if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(chip->pci),
+				PAGE_SIZE, &cpcm->hw_buf) < 0) {
+		kfree(cpcm);
 		return -ENOMEM;
 	}
 
@@ -1486,7 +1398,8 @@
 {
 	cs46xx_t *chip = snd_pcm_substream_chip(substream);
 
-	if (snd_dma_alloc_pages(&chip->dma_dev, PAGE_SIZE, &chip->capt.hw_buf) < 0)
+	if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(chip->pci),
+				PAGE_SIZE, &chip->capt.hw_buf) < 0)
 		return -ENOMEM;
 	chip->capt.substream = substream;
 	substream->runtime->hw = snd_cs46xx_capture;
@@ -1510,7 +1423,7 @@
 	snd_pcm_runtime_t *runtime = substream->runtime;
 	cs46xx_pcm_t * cpcm;
 
-	cpcm = snd_magic_cast(cs46xx_pcm_t, runtime->private_data, return -ENXIO);
+	cpcm = runtime->private_data;
 
 	/* when playback_open fails, then cpcm can be NULL */
 	if (!cpcm) return -ENXIO;
@@ -1527,7 +1440,7 @@
 #endif
 
 	cpcm->substream = NULL;
-	snd_dma_free_pages(&chip->dma_dev, &cpcm->hw_buf);
+	snd_dma_free_pages(&cpcm->hw_buf);
 	chip->active_ctrl(chip, -1);
 
 	return 0;
@@ -1538,7 +1451,7 @@
 	cs46xx_t *chip = snd_pcm_substream_chip(substream);
 
 	chip->capt.substream = NULL;
-	snd_dma_free_pages(&chip->dma_dev, &chip->capt.hw_buf);
+	snd_dma_free_pages(&chip->capt.hw_buf);
 	chip->active_ctrl(chip, -1);
 
 	return 0;
@@ -1664,7 +1577,7 @@
 
 static void snd_cs46xx_pcm_free(snd_pcm_t *pcm)
 {
-	cs46xx_t *chip = snd_magic_cast(cs46xx_t, pcm->private_data, return);
+	cs46xx_t *chip = pcm->private_data;
 	chip->pcm = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
@@ -1672,21 +1585,21 @@
 #ifdef CONFIG_SND_CS46XX_NEW_DSP
 static void snd_cs46xx_pcm_rear_free(snd_pcm_t *pcm)
 {
-	cs46xx_t *chip = snd_magic_cast(cs46xx_t, pcm->private_data, return);
+	cs46xx_t *chip = pcm->private_data;
 	chip->pcm_rear = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
 
 static void snd_cs46xx_pcm_center_lfe_free(snd_pcm_t *pcm)
 {
-	cs46xx_t *chip = snd_magic_cast(cs46xx_t, pcm->private_data, return);
+	cs46xx_t *chip = pcm->private_data;
 	chip->pcm_center_lfe = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
 
 static void snd_cs46xx_pcm_iec958_free(snd_pcm_t *pcm)
 {
-	cs46xx_t *chip = snd_magic_cast(cs46xx_t, pcm->private_data, return);
+	cs46xx_t *chip = pcm->private_data;
 	chip->pcm_iec958 = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
@@ -1824,14 +1737,14 @@
  */
 static void snd_cs46xx_mixer_free_ac97_bus(ac97_bus_t *bus)
 {
-	cs46xx_t *chip = snd_magic_cast(cs46xx_t, bus->private_data, return);
+	cs46xx_t *chip = bus->private_data;
 
 	chip->ac97_bus = NULL;
 }
 
 static void snd_cs46xx_mixer_free_ac97(ac97_t *ac97)
 {
-	cs46xx_t *chip = snd_magic_cast(cs46xx_t, ac97->private_data, return);
+	cs46xx_t *chip = ac97->private_data;
 
 	snd_assert ((ac97 == chip->ac97[CS46XX_PRIMARY_CODEC_INDEX]) ||
 		    (ac97 == chip->ac97[CS46XX_SECONDARY_CODEC_INDEX]),
@@ -2420,7 +2333,7 @@
 {
 	unsigned long end_time;
 	int err;
-	cs46xx_t * chip = snd_magic_cast(cs46xx_t,ac97->private_data,return /* -ENXIO */);
+	cs46xx_t * chip = ac97->private_data;
 
 	/* reset to defaults */
 	snd_ac97_write(ac97, AC97_RESET, 0);	
@@ -2470,39 +2383,38 @@
 int __devinit snd_cs46xx_mixer(cs46xx_t *chip)
 {
 	snd_card_t *card = chip->card;
-	ac97_bus_t bus;
-	ac97_t ac97;
+	ac97_template_t ac97;
 	snd_ctl_elem_id_t id;
 	int err;
 	unsigned int idx;
+	static ac97_bus_ops_t ops = {
+#ifdef CONFIG_SND_CS46XX_NEW_DSP
+		.reset = snd_cs46xx_codec_reset,
+#endif
+		.write = snd_cs46xx_ac97_write,
+		.read = snd_cs46xx_ac97_read,
+	};
 
 	/* detect primary codec */
 	chip->nr_ac97_codecs = 0;
 	snd_printdd("snd_cs46xx: detecting primary codec\n");
-	memset(&bus, 0, sizeof(bus));
-	bus.write = snd_cs46xx_ac97_write;
-	bus.read = snd_cs46xx_ac97_read;
-#ifdef CONFIG_SND_CS46XX_NEW_DSP
-	bus.reset = snd_cs46xx_codec_reset;
-#endif
-	bus.private_data = chip;
-	bus.private_free = snd_cs46xx_mixer_free_ac97_bus;
-	if ((err = snd_ac97_bus(card, &bus, &chip->ac97_bus)) < 0)
+	if ((err = snd_ac97_bus(card, 0, &ops, chip, &chip->ac97_bus)) < 0)
 		return err;
+	chip->ac97_bus->private_free = snd_cs46xx_mixer_free_ac97_bus;
 
 	memset(&ac97, 0, sizeof(ac97));
 	ac97.private_data = chip;
 	ac97.private_free = snd_cs46xx_mixer_free_ac97;
-	chip->ac97[CS46XX_PRIMARY_CODEC_INDEX] = &ac97;
 
-	snd_cs46xx_ac97_write(&ac97, AC97_MASTER, 0x8000);
+	snd_cs46xx_codec_write(chip, AC97_MASTER, 0x8000,
+			       CS46XX_PRIMARY_CODEC_INDEX);
 	for (idx = 0; idx < 100; ++idx) {
-		if (snd_cs46xx_ac97_read(&ac97, AC97_MASTER) == 0x8000)
+		if (snd_cs46xx_codec_read(chip, AC97_MASTER,
+					  CS46XX_PRIMARY_CODEC_INDEX) == 0x8000)
 			goto _ok;
 		set_current_state(TASK_INTERRUPTIBLE);
 		schedule_timeout(HZ/100);
 	}
-	chip->ac97[CS46XX_PRIMARY_CODEC_INDEX] = NULL;
 	return -ENXIO;
 
  _ok:
@@ -2519,18 +2431,21 @@
 	ac97.private_free = snd_cs46xx_mixer_free_ac97;
 	ac97.num = CS46XX_SECONDARY_CODEC_INDEX;
 
-	snd_cs46xx_ac97_write(&ac97, AC97_RESET, 0);
+	snd_cs46xx_codec_write(chip, AC97_RESET, 0,
+			       CS46XX_SECONDARY_CODEC_INDEX);
 	udelay(10);
 
-	if (snd_cs46xx_ac97_read(&ac97, AC97_RESET) & 0x8000) {
+	if (snd_cs46xx_codec_read(chip, AC97_RESET,
+				  CS46XX_SECONDARY_CODEC_INDEX) & 0x8000) {
 		snd_printdd("snd_cs46xx: seconadry codec not present\n");
 		goto _no_sec_codec;
 	}
 
-	chip->ac97[CS46XX_SECONDARY_CODEC_INDEX] = &ac97;
-	snd_cs46xx_ac97_write(&ac97, AC97_MASTER, 0x8000);
+	snd_cs46xx_codec_write(chip, AC97_MASTER, 0x8000,
+			       CS46XX_SECONDARY_CODEC_INDEX);
 	for (idx = 0; idx < 100; ++idx) {
-		if (snd_cs46xx_ac97_read(&ac97, AC97_MASTER) == 0x8000) {
+		if (snd_cs46xx_codec_read(chip, AC97_MASTER,
+					  CS46XX_SECONDARY_CODEC_INDEX) == 0x8000) {
 			goto _ok2;
 		}
 		set_current_state(TASK_INTERRUPTIBLE);
@@ -2540,7 +2455,6 @@
  _no_sec_codec:
 	snd_printdd("snd_cs46xx: secondary codec did not respond ...\n");
 
-	chip->ac97[CS46XX_SECONDARY_CODEC_INDEX] = NULL;
 	chip->nr_ac97_codecs = 1;
     
 	/* well, one codec only ... */
@@ -2605,11 +2519,10 @@
 
 static int snd_cs46xx_midi_input_open(snd_rawmidi_substream_t * substream)
 {
-	unsigned long flags;
-	cs46xx_t *chip = snd_magic_cast(cs46xx_t, substream->rmidi->private_data, return -ENXIO);
+	cs46xx_t *chip = substream->rmidi->private_data;
 
 	chip->active_ctrl(chip, 1);
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	chip->uartm |= CS46XX_MODE_INPUT;
 	chip->midcr |= MIDCR_RXE;
 	chip->midi_input = substream;
@@ -2618,16 +2531,15 @@
 	} else {
 		snd_cs46xx_pokeBA0(chip, BA0_MIDCR, chip->midcr);
 	}
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	return 0;
 }
 
 static int snd_cs46xx_midi_input_close(snd_rawmidi_substream_t * substream)
 {
-	unsigned long flags;
-	cs46xx_t *chip = snd_magic_cast(cs46xx_t, substream->rmidi->private_data, return -ENXIO);
+	cs46xx_t *chip = substream->rmidi->private_data;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	chip->midcr &= ~(MIDCR_RXE | MIDCR_RIE);
 	chip->midi_input = NULL;
 	if (!(chip->uartm & CS46XX_MODE_OUTPUT)) {
@@ -2636,19 +2548,18 @@
 		snd_cs46xx_pokeBA0(chip, BA0_MIDCR, chip->midcr);
 	}
 	chip->uartm &= ~CS46XX_MODE_INPUT;
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	chip->active_ctrl(chip, -1);
 	return 0;
 }
 
 static int snd_cs46xx_midi_output_open(snd_rawmidi_substream_t * substream)
 {
-	unsigned long flags;
-	cs46xx_t *chip = snd_magic_cast(cs46xx_t, substream->rmidi->private_data, return -ENXIO);
+	cs46xx_t *chip = substream->rmidi->private_data;
 
 	chip->active_ctrl(chip, 1);
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	chip->uartm |= CS46XX_MODE_OUTPUT;
 	chip->midcr |= MIDCR_TXE;
 	chip->midi_output = substream;
@@ -2657,16 +2568,15 @@
 	} else {
 		snd_cs46xx_pokeBA0(chip, BA0_MIDCR, chip->midcr);
 	}
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	return 0;
 }
 
 static int snd_cs46xx_midi_output_close(snd_rawmidi_substream_t * substream)
 {
-	unsigned long flags;
-	cs46xx_t *chip = snd_magic_cast(cs46xx_t, substream->rmidi->private_data, return -ENXIO);
+	cs46xx_t *chip = substream->rmidi->private_data;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	chip->midcr &= ~(MIDCR_TXE | MIDCR_TIE);
 	chip->midi_output = NULL;
 	if (!(chip->uartm & CS46XX_MODE_INPUT)) {
@@ -2675,7 +2585,7 @@
 		snd_cs46xx_pokeBA0(chip, BA0_MIDCR, chip->midcr);
 	}
 	chip->uartm &= ~CS46XX_MODE_OUTPUT;
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	chip->active_ctrl(chip, -1);
 	return 0;
 }
@@ -2683,7 +2593,7 @@
 static void snd_cs46xx_midi_input_trigger(snd_rawmidi_substream_t * substream, int up)
 {
 	unsigned long flags;
-	cs46xx_t *chip = snd_magic_cast(cs46xx_t, substream->rmidi->private_data, return);
+	cs46xx_t *chip = substream->rmidi->private_data;
 
 	spin_lock_irqsave(&chip->reg_lock, flags);
 	if (up) {
@@ -2703,7 +2613,7 @@
 static void snd_cs46xx_midi_output_trigger(snd_rawmidi_substream_t * substream, int up)
 {
 	unsigned long flags;
-	cs46xx_t *chip = snd_magic_cast(cs46xx_t, substream->rmidi->private_data, return);
+	cs46xx_t *chip = substream->rmidi->private_data;
 	unsigned char byte;
 
 	spin_lock_irqsave(&chip->reg_lock, flags);
@@ -2781,7 +2691,7 @@
 	cs46xx_gameport_t *gp = (cs46xx_gameport_t *)gameport;
 	cs46xx_t *chip;
 	snd_assert(gp, return);
-	chip = snd_magic_cast(cs46xx_t, gp->chip, return);
+	chip = gp->chip;
 	snd_cs46xx_pokeBA0(chip, BA0_JSPT, 0xFF);  //outb(gameport->io, 0xFF);
 }
 
@@ -2790,7 +2700,7 @@
 	cs46xx_gameport_t *gp = (cs46xx_gameport_t *)gameport;
 	cs46xx_t *chip;
 	snd_assert(gp, return 0);
-	chip = snd_magic_cast(cs46xx_t, gp->chip, return 0);
+	chip = gp->chip;
 	return snd_cs46xx_peekBA0(chip, BA0_JSPT); //inb(gameport->io);
 }
 
@@ -2801,7 +2711,7 @@
 	unsigned js1, js2, jst;
 	
 	snd_assert(gp, return 0);
-	chip = snd_magic_cast(cs46xx_t, gp->chip, return 0);
+	chip = gp->chip;
 
 	js1 = snd_cs46xx_peekBA0(chip, BA0_JSC1);
 	js2 = snd_cs46xx_peekBA0(chip, BA0_JSC2);
@@ -3011,13 +2921,13 @@
 	}
 #endif
 	
-	snd_magic_kfree(chip);
+	kfree(chip);
 	return 0;
 }
 
 static int snd_cs46xx_dev_free(snd_device_t *device)
 {
-	cs46xx_t *chip = snd_magic_cast(cs46xx_t, device->device_data, return -ENXIO);
+	cs46xx_t *chip = device->device_data;
 	return snd_cs46xx_free(chip);
 }
 
@@ -3786,7 +3696,7 @@
 #ifdef CONFIG_PM
 static int snd_cs46xx_suspend(snd_card_t *card, unsigned int state)
 {
-	cs46xx_t *chip = snd_magic_cast(cs46xx_t, card->pm_private_data, return -EINVAL);
+	cs46xx_t *chip = card->pm_private_data;
 	int amp_saved;
 
 	snd_pcm_suspend_all(chip->pcm);
@@ -3810,7 +3720,7 @@
 
 static int snd_cs46xx_resume(snd_card_t *card, unsigned int state)
 {
-	cs46xx_t *chip = snd_magic_cast(cs46xx_t, card->pm_private_data, return -EINVAL);
+	cs46xx_t *chip = card->pm_private_data;
 	int amp_saved;
 
 	pci_enable_device(chip->pci);
@@ -3869,7 +3779,7 @@
 	if ((err = pci_enable_device(pci)) < 0)
 		return err;
 
-	chip = snd_magic_kcalloc(cs46xx_t, 0, GFP_KERNEL);
+	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
 	if (chip == NULL)
 		return -ENOMEM;
 	spin_lock_init(&chip->reg_lock);
@@ -3912,10 +3822,6 @@
 	strcpy(region->name, "CS46xx_BA1_reg");
 	region->base = chip->ba1_addr + BA1_SP_REG;
 	region->size = CS46XX_BA1_REG_SIZE;
-
-	memset(&chip->dma_dev, 0, sizeof(chip->dma_dev));
-	chip->dma_dev.type = SNDRV_DMA_TYPE_DEV;
-	chip->dma_dev.dev = snd_dma_pci_data(pci);
 
 	/* set up amp and clkrun hack */
 	pci_read_config_word(pci, PCI_SUBSYSTEM_VENDOR_ID, &ss_vendor);
diff -Nru a/sound/pci/cs46xx/cs46xx_lib.h b/sound/pci/cs46xx/cs46xx_lib.h
--- a/sound/pci/cs46xx/cs46xx_lib.h	2004-08-04 17:48:48 -07:00
+++ b/sound/pci/cs46xx/cs46xx_lib.h	2004-08-04 17:48:48 -07:00
@@ -22,8 +22,6 @@
 #ifndef __CS46XX_LIB_H__
 #define __CS46XX_LIB_H__
 
-#define chip_t cs46xx_t
-
 /*
  *  constants
  */
diff -Nru a/sound/pci/cs46xx/dsp_spos.c b/sound/pci/cs46xx/dsp_spos.c
--- a/sound/pci/cs46xx/dsp_spos.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/cs46xx/dsp_spos.c	2004-08-04 17:48:49 -07:00
@@ -74,7 +74,7 @@
 			    (mop_operands & WIDE_LADD_INSTR_MASK) == 0 &&
 			    (mop_operands & WIDE_INSTR_MASK) != 0) {
 				wide_op = loval & 0x7f;
-				for (j = 0;j < sizeof(wide_opcodes) / sizeof(wide_opcode_t); ++j) {
+				for (j = 0;j < ARRAY_SIZE(wide_opcodes); ++j) {
 					if (wide_opcodes[j] == wide_op) {
 						/* need to reallocate instruction */
 						address  = (hival & 0x00FFF) << 5;
@@ -462,7 +462,7 @@
 
 static void cs46xx_dsp_proc_symbol_table_read (snd_info_entry_t *entry, snd_info_buffer_t * buffer)
 {
-	cs46xx_t *chip = snd_magic_cast(cs46xx_t, entry->private_data, return);
+	cs46xx_t *chip = entry->private_data;
 	dsp_spos_instance_t * ins = chip->dsp_spos_instance;
 	int i;
 
@@ -489,7 +489,7 @@
 
 static void cs46xx_dsp_proc_modules_read (snd_info_entry_t *entry, snd_info_buffer_t * buffer)
 {
-	cs46xx_t *chip = snd_magic_cast(cs46xx_t, entry->private_data, return);
+	cs46xx_t *chip = entry->private_data;
 	dsp_spos_instance_t * ins = chip->dsp_spos_instance;
 	int i,j;
 
@@ -511,7 +511,7 @@
 
 static void cs46xx_dsp_proc_task_tree_read (snd_info_entry_t *entry, snd_info_buffer_t * buffer)
 {
-	cs46xx_t *chip = snd_magic_cast(cs46xx_t, entry->private_data, return);
+	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;
@@ -538,7 +538,7 @@
 
 static void cs46xx_dsp_proc_scb_read (snd_info_entry_t *entry, snd_info_buffer_t * buffer)
 {
-	cs46xx_t *chip = snd_magic_cast(cs46xx_t, entry->private_data, return);
+	cs46xx_t *chip = entry->private_data;
 	dsp_spos_instance_t * ins = chip->dsp_spos_instance;
 	int i;
 
@@ -570,7 +570,7 @@
 
 static void cs46xx_dsp_proc_parameter_dump_read (snd_info_entry_t *entry, snd_info_buffer_t * buffer)
 {
-	cs46xx_t *chip = snd_magic_cast(cs46xx_t, entry->private_data, return);
+	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;
@@ -597,7 +597,7 @@
 
 static void cs46xx_dsp_proc_sample_dump_read (snd_info_entry_t *entry, snd_info_buffer_t * buffer)
 {
-	cs46xx_t *chip = snd_magic_cast(cs46xx_t, entry->private_data, return);
+	cs46xx_t *chip = entry->private_data;
 	int i,col = 0;
 	unsigned long dst = chip->region.idx[2].remap_addr;
 
@@ -1057,7 +1057,7 @@
 	
 	int fifo_addr,fifo_span,valid_slots;
 
-	spos_control_block_t sposcb = {
+	static spos_control_block_t sposcb = {
 		/* 0 */ HFG_TREE_SCB,HFG_STACK,
 		/* 1 */ SPOSCB_ADDR,BG_TREE_SCB_ADDR,
 		/* 2 */ DSP_SPOS_DC,0,
@@ -1110,18 +1110,18 @@
   
 	{
 		/* create the null SCB */
-		generic_scb_t null_scb = {
+		static generic_scb_t null_scb = {
 			{ 0, 0, 0, 0 },
 			{ 0, 0, 0, 0, 0 },
 			NULL_SCB_ADDR, NULL_SCB_ADDR,
-			null_algorithm->address, 0,
-			0,0,0,
+			0, 0, 0, 0, 0,
 			{
 				0,0,
 				0,0,
 			}
 		};
 
+		null_scb.entry_point = null_algorithm->address;
 		ins->the_null_scb = cs46xx_dsp_create_scb(chip, "nullSCB", (u32 *)&null_scb, NULL_SCB_ADDR);
 		ins->the_null_scb->task_entry = null_algorithm;
 		ins->the_null_scb->sub_list_ptr = ins->the_null_scb;
@@ -1132,7 +1132,7 @@
 
 	{
 		/* setup foreground task tree */
-		task_tree_control_block_t fg_task_tree_hdr =  {
+		static task_tree_control_block_t fg_task_tree_hdr =  {
 			{ FG_TASK_HEADER_ADDR | (DSP_SPOS_DC << 0x10),
 			  DSP_SPOS_DC_DC,
 			  DSP_SPOS_DC_DC,
@@ -1145,7 +1145,7 @@
     
 			{
 				BG_TREE_SCB_ADDR,TIMINGMASTER_SCB_ADDR, 
-				fg_task_tree_header_code->address,
+				0,
 				FG_TASK_HEADER_ADDR + TCBData,                  
 			},
 
@@ -1158,7 +1158,7 @@
 			},
 
 			{
-				DSP_SPOS_DC,task_tree_thread->address,
+				DSP_SPOS_DC,0,
 				DSP_SPOS_DC,DSP_SPOS_DC,
 				DSP_SPOS_DC,DSP_SPOS_DC,
 				DSP_SPOS_DC,DSP_SPOS_DC,
@@ -1200,13 +1200,15 @@
 			}
 		};
 
+		fg_task_tree_hdr.links.entry_point = fg_task_tree_header_code->address;
+		fg_task_tree_hdr.context_blk.stack0 = task_tree_thread->address;
 		cs46xx_dsp_create_task_tree(chip,"FGtaskTreeHdr",(u32 *)&fg_task_tree_hdr,FG_TASK_HEADER_ADDR,0x35);
 	}
 
 
 	{
 		/* setup foreground task tree */
-		task_tree_control_block_t bg_task_tree_hdr =  {
+		static task_tree_control_block_t bg_task_tree_hdr =  {
 			{ DSP_SPOS_DC_DC,
 			  DSP_SPOS_DC_DC,
 			  DSP_SPOS_DC_DC,
@@ -1219,7 +1221,7 @@
     
 			{
 				NULL_SCB_ADDR,NULL_SCB_ADDR,  /* Set up the background to do nothing */
-				task_tree_header_code->address,
+				0,
 				BG_TREE_SCB_ADDR + TCBData,
 			},
 
@@ -1232,7 +1234,7 @@
 			},
 
 			{
-				DSP_SPOS_DC,task_tree_thread->address,
+				DSP_SPOS_DC,0,
 				DSP_SPOS_DC,DSP_SPOS_DC,
 				DSP_SPOS_DC,DSP_SPOS_DC,
 				DSP_SPOS_DC,DSP_SPOS_DC,
@@ -1273,6 +1275,9 @@
 				0,0
 			}
 		};
+
+		bg_task_tree_hdr.links.entry_point = task_tree_header_code->address;
+		bg_task_tree_hdr.context_blk.stack0 = task_tree_thread->address;
 		cs46xx_dsp_create_task_tree(chip,"BGtaskTreeHdr",(u32 *)&bg_task_tree_hdr,BG_TREE_SCB_ADDR,0x35);
 	}
 
@@ -1312,7 +1317,7 @@
 	if (!write_back_scb) goto _fail_end;
 
 	{
-		mix2_ostream_spb_t mix2_ostream_spb = {
+		static mix2_ostream_spb_t mix2_ostream_spb = {
 			0x00020000,
 			0x0000ffff
 		};
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-08-04 17:48:49 -07:00
+++ b/sound/pci/cs46xx/dsp_spos_scb_lib.c	2004-08-04 17:48:49 -07:00
@@ -69,7 +69,7 @@
 	proc_scb_info_t * scb_info  = (proc_scb_info_t *)entry->private_data;
 	dsp_scb_descriptor_t * scb = scb_info->scb_desc;
 	dsp_spos_instance_t * ins;
-	cs46xx_t *chip = snd_magic_cast(cs46xx_t, scb_info->chip, return);
+	cs46xx_t *chip = scb_info->chip;
 	int j,col;
 	unsigned long dst = chip->region.idx[1].remap_addr + DSP_PARAMETER_BYTE_OFFSET;
 
diff -Nru a/sound/pci/emu10k1/emu10k1.c b/sound/pci/emu10k1/emu10k1.c
--- a/sound/pci/emu10k1/emu10k1.c	2004-08-04 17:48:48 -07:00
+++ b/sound/pci/emu10k1/emu10k1.c	2004-08-04 17:48:48 -07:00
@@ -31,8 +31,7 @@
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("EMU10K1");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{Creative Labs,SB Live!/PCI512/E-mu APS},"
+MODULE_SUPPORTED_DEVICE("{{Creative Labs,SB Live!/PCI512/E-mu APS},"
 	       "{Creative Labs,SB Audigy}}");
 
 #if defined(CONFIG_SND_SEQUENCER) || (defined(MODULE) && defined(CONFIG_SND_SEQUENCER_MODULE))
@@ -53,37 +52,25 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for the EMU10K1 soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for the EMU10K1 soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable the EMU10K1 soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(extin, int, boot_devs, 0444);
 MODULE_PARM_DESC(extin, "Available external inputs for FX8010. Zero=default.");
-MODULE_PARM_SYNTAX(extin, SNDRV_ENABLED "allows:{{0,0x0ffff}},base:16");
 module_param_array(extout, int, boot_devs, 0444);
 MODULE_PARM_DESC(extout, "Available external outputs for FX8010. Zero=default.");
-MODULE_PARM_SYNTAX(extout, SNDRV_ENABLED "allows:{{0,0x0ffff}},base:16");
 module_param_array(seq_ports, int, boot_devs, 0444);
 MODULE_PARM_DESC(seq_ports, "Allocated sequencer ports for internal synthesizer.");
-MODULE_PARM_SYNTAX(seq_ports, SNDRV_ENABLED "allows:{{0,32}}");
 module_param_array(max_synth_voices, int, boot_devs, 0444);
 MODULE_PARM_DESC(max_synth_voices, "Maximum number of voices for WaveTable.");
-MODULE_PARM_SYNTAX(max_synth_voices, SNDRV_ENABLED);
 module_param_array(max_buffer_size, int, boot_devs, 0444);
 MODULE_PARM_DESC(max_buffer_size, "Maximum sample buffer size in MB.");
-MODULE_PARM_SYNTAX(max_buffer_size, SNDRV_ENABLED);
 module_param_array(enable_ir, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable_ir, "Enable IR.");
-MODULE_PARM_SYNTAX(enable_ir, SNDRV_ENABLE_DESC);
 
 static struct pci_device_id snd_emu10k1_ids[] = {
 	{ 0x1102, 0x0002, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },	/* EMU10K1 */
-#if 0 /* FIXME: not working! */
-	{ 0x1102, 0x0006, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },	/* Dell OEM version (EMU10K1) */
-#endif
 	{ 0x1102, 0x0004, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 },	/* Audigy */
 	{ 0, }
 };
@@ -131,10 +118,6 @@
 		return err;
 	}		
 	if ((err = snd_emu10k1_pcm_efx(emu, 2, NULL)) < 0) {
-		snd_card_free(card);
-		return err;
-	}		
-	if ((err = snd_emu10k1_fx8010_pcm(emu, 3, NULL)) < 0) {
 		snd_card_free(card);
 		return err;
 	}		
diff -Nru a/sound/pci/emu10k1/emu10k1_callback.c b/sound/pci/emu10k1/emu10k1_callback.c
--- a/sound/pci/emu10k1/emu10k1_callback.c	2004-08-04 17:48:48 -07:00
+++ b/sound/pci/emu10k1/emu10k1_callback.c	2004-08-04 17:48:48 -07:00
@@ -93,7 +93,7 @@
 	unsigned long flags;
 	int i;
 
-	emu = snd_magic_cast(snd_emux_t, hw->synth, return -EINVAL);
+	emu = hw->synth;
 
 	spin_lock_irqsave(&emu->voice_lock, flags);
 	lookup_voices(emu, hw, best, 1); /* no OFF voices */
@@ -128,7 +128,7 @@
 	int dcysusv;
 	emu10k1_t *hw;
 	
-	hw = snd_magic_cast(emu10k1_t, vp->hw, return);
+	hw = vp->hw;
 	dcysusv = 0x8000 | (unsigned char)vp->reg.parm.modrelease;
 	snd_emu10k1_ptr_write(hw, DCYSUSM, vp->ch, dcysusv);
 	dcysusv = 0x8000 | (unsigned char)vp->reg.parm.volrelease | DCYSUSV_CHANNELENABLE_MASK;
@@ -145,7 +145,7 @@
 	emu10k1_t *hw;
 	
 	snd_assert(vp, return);
-	hw = snd_magic_cast(emu10k1_t, vp->hw, return);
+	hw = vp->hw;
 	snd_emu10k1_ptr_write(hw, DCYSUSV, vp->ch, 0x807f | DCYSUSV_CHANNELENABLE_MASK);
 	if (vp->block) {
 		emu10k1_memblk_t *emem;
@@ -163,7 +163,7 @@
 {
 	emu10k1_t *hw;
 	
-	hw = snd_magic_cast(emu10k1_t, vp->hw, return);
+	hw = vp->hw;
 	if (vp->ch >= 0) {
 		snd_emu10k1_ptr_write(hw, IFATN, vp->ch, 0xff00);
 		snd_emu10k1_ptr_write(hw, DCYSUSV, vp->ch, 0x807f | DCYSUSV_CHANNELENABLE_MASK);
@@ -185,7 +185,7 @@
 {
 	emu10k1_t *hw;
 	
-	hw = snd_magic_cast(emu10k1_t, vp->hw, return);
+	hw = vp->hw;
 	if (update & SNDRV_EMUX_UPDATE_VOLUME)
 		snd_emu10k1_ptr_write(hw, IFATN_ATTENUATION, vp->ch, vp->avol);
 	if (update & SNDRV_EMUX_UPDATE_PITCH)
@@ -282,7 +282,7 @@
 	best_voice_t best[V_END];
 	int i;
 
-	hw = snd_magic_cast(emu10k1_t, emu->hw, return NULL);
+	hw = emu->hw;
 
 	lookup_voices(emu, hw, best, 0);
 	for (i = 0; i < V_END; i++) {
@@ -317,7 +317,7 @@
 	emu10k1_t *hw;
 	emu10k1_memblk_t *emem;
 	
-	hw = snd_magic_cast(emu10k1_t, vp->hw, return -EINVAL);
+	hw = vp->hw;
 	ch = vp->ch;
 	snd_assert(ch >= 0, return -EINVAL);
 	chan = vp->chan;
@@ -469,7 +469,7 @@
 	emu10k1_t *hw;
 	emu10k1_memblk_t *emem;
 	
-	hw = snd_magic_cast(emu10k1_t, vp->hw, return);
+	hw = vp->hw;
 
 	emem = (emu10k1_memblk_t *)vp->block;
 	if (! emem || emem->mapped_page < 0)
diff -Nru a/sound/pci/emu10k1/emu10k1_main.c b/sound/pci/emu10k1/emu10k1_main.c
--- a/sound/pci/emu10k1/emu10k1_main.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/emu10k1/emu10k1_main.c	2004-08-04 17:48:49 -07:00
@@ -119,8 +119,10 @@
 	snd_emu10k1_ptr_write(emu, SOLEH, 0, 0);
 
 	if (emu->audigy){
-		snd_emu10k1_ptr_write(emu, 0x5e, 0, 0xf00); /* ?? */
-		snd_emu10k1_ptr_write(emu, 0x5f, 0, 0x3); /* ?? */
+		/* set SPDIF bypass mode */
+		snd_emu10k1_ptr_write(emu, SPBYPASS, 0, SPBYPASS_FORMAT);
+		/* enable rear left + rear right AC97 slots */
+		snd_emu10k1_ptr_write(emu, AC97SLOT, 0, AC97SLOT_REAR_RIGHT | AC97SLOT_REAR_LEFT);
 	}
 
 	/* init envelope engine */
@@ -329,7 +331,7 @@
 	if (emu->audigy)
 		snd_emu10k1_ptr_write(emu, A_DBG, 0, A_DBG_SINGLE_STEP);
 	else
-		snd_emu10k1_ptr_write(emu, DBG, 0, 0x8000);
+		snd_emu10k1_ptr_write(emu, DBG, 0, EMU10K1_DBG_SINGLE_STEP);
 
 	/* disable channel interrupt */
 	snd_emu10k1_ptr_write(emu, CLIEL, 0, 0);
@@ -541,33 +543,31 @@
 
 static int snd_emu10k1_free(emu10k1_t *emu)
 {
-	if (emu->res_port != NULL) {	/* avoid access to already used hardware */
+	if (emu->port) {	/* avoid access to already used hardware */
 	       	snd_emu10k1_fx8010_tram_setup(emu, 0);
 		snd_emu10k1_done(emu);
        	}
 	if (emu->memhdr)
 		snd_util_memhdr_free(emu->memhdr);
 	if (emu->silent_page.area)
-		snd_dma_free_pages(&emu->dma_dev, &emu->silent_page);
+		snd_dma_free_pages(&emu->silent_page);
 	if (emu->ptb_pages.area)
-		snd_dma_free_pages(&emu->dma_dev, &emu->ptb_pages);
+		snd_dma_free_pages(&emu->ptb_pages);
 	if (emu->page_ptr_table)
 		vfree(emu->page_ptr_table);
 	if (emu->page_addr_table)
 		vfree(emu->page_addr_table);
-	if (emu->res_port) {
-		release_resource(emu->res_port);
-		kfree_nocheck(emu->res_port);
-	}
 	if (emu->irq >= 0)
 		free_irq(emu->irq, (void *)emu);
-	snd_magic_kfree(emu);
+	if (emu->port)
+		pci_release_regions(emu->pci);
+	kfree(emu);
 	return 0;
 }
 
 static int snd_emu10k1_dev_free(snd_device_t *device)
 {
-	emu10k1_t *emu = snd_magic_cast(emu10k1_t, device->device_data, return -ENXIO);
+	emu10k1_t *emu = device->device_data;
 	return snd_emu10k1_free(emu);
 }
 
@@ -595,7 +595,7 @@
 	if ((err = pci_enable_device(pci)) < 0)
 		return err;
 
-	emu = snd_magic_kcalloc(emu10k1_t, 0, GFP_KERNEL);
+	emu = kcalloc(1, sizeof(*emu), GFP_KERNEL);
 	if (emu == NULL)
 		return -ENOMEM;
 	/* set the DMA transfer mask */
@@ -603,7 +603,7 @@
 	if (pci_set_dma_mask(pci, emu->dma_mask) < 0 ||
 	    pci_set_consistent_dma_mask(pci, emu->dma_mask) < 0) {
 		snd_printk(KERN_ERR "architecture does not support PCI busmaster DMA with mask 0x%lx\n", emu->dma_mask);
-		snd_magic_kfree(emu);
+		kfree(emu);
 		return -ENXIO;
 	}
 	emu->card = card;
@@ -620,7 +620,6 @@
 	emu->irq = -1;
 	emu->synth = NULL;
 	emu->get_synth_voice = NULL;
-	emu->port = pci_resource_start(pci, 0);
 
 	emu->audigy = is_audigy;
 	if (is_audigy)
@@ -628,10 +627,11 @@
 	else
 		emu->gpr_base = FXGPREGBASE;
 
-	if ((emu->res_port = request_region(emu->port, 0x20, "EMU10K1")) == NULL) {
-		snd_emu10k1_free(emu);
-		return -EBUSY;
+	if ((err = pci_request_regions(pci, "EMU10K1")) < 0) {
+		kfree(emu);
+		return err;
 	}
+	emu->port = pci_resource_start(pci, 0);
 
 	if (request_irq(pci->irq, snd_emu10k1_interrupt, SA_INTERRUPT|SA_SHIRQ, "EMU10K1", (void *)emu)) {
 		snd_emu10k1_free(emu);
@@ -639,12 +639,9 @@
 	}
 	emu->irq = pci->irq;
 
-	memset(&emu->dma_dev, 0, sizeof(emu->dma_dev));
-	emu->dma_dev.type = SNDRV_DMA_TYPE_DEV;
-	emu->dma_dev.dev = snd_dma_pci_data(pci);
-
 	emu->max_cache_pages = max_cache_bytes >> PAGE_SHIFT;
-	if (snd_dma_alloc_pages(&emu->dma_dev, 32 * 1024, &emu->ptb_pages) < 0) {
+	if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci),
+				32 * 1024, &emu->ptb_pages) < 0) {
 		snd_emu10k1_free(emu);
 		return -ENOMEM;
 	}
@@ -656,7 +653,8 @@
 		return -ENOMEM;
 	}
 
-	if (snd_dma_alloc_pages(&emu->dma_dev, EMUPAGESIZE, &emu->silent_page) < 0) {
+	if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci),
+				EMUPAGESIZE, &emu->silent_page) < 0) {
 		snd_emu10k1_free(emu);
 		return -ENOMEM;
 	}
@@ -682,9 +680,16 @@
 		/* Audigy 2 EX has apparently no effective AC97 controls
 		 * (for both input and output), so we skip the AC97 detections
 		 */
-		snd_printdd(KERN_INFO "Audigy2 EX is detected. skpping ac97.\n");
-		emu->no_ac97 = 1;
+		snd_printdd(KERN_INFO "Audigy2 EX is detected. skipping ac97.\n");
+		emu->no_ac97 = 1;	
 	}
+	
+	if (emu->revision == 4 && emu->model == 0x2002) {
+		/* Audigy 2 ZS */
+		snd_printdd(KERN_INFO "Audigy2 ZS is detected. setting 7.1 mode.\n");
+		emu->spk71 = 1;
+	}
+	
 	
 	emu->fx8010.fxbus_mask = 0x303f;
 	if (extin_mask == 0)
diff -Nru a/sound/pci/emu10k1/emu10k1_patch.c b/sound/pci/emu10k1/emu10k1_patch.c
--- a/sound/pci/emu10k1/emu10k1_patch.c	2004-08-04 17:48:48 -07:00
+++ b/sound/pci/emu10k1/emu10k1_patch.c	2004-08-04 17:48:48 -07:00
@@ -44,7 +44,7 @@
 	unsigned int start_addr;
 	emu10k1_t *emu;
 
-	emu = snd_magic_cast(emu10k1_t, rec->hw, return -ENXIO);
+	emu = rec->hw;
 	snd_assert(sp != NULL, return -EINVAL);
 	snd_assert(hdr != NULL, return -EINVAL);
 
@@ -210,7 +210,7 @@
 {
 	emu10k1_t *emu;
 
-	emu = snd_magic_cast(emu10k1_t, rec->hw, return -ENXIO);
+	emu = rec->hw;
 	snd_assert(sp != NULL, return -EINVAL);
 	snd_assert(hdr != NULL, return -EINVAL);
 
diff -Nru a/sound/pci/emu10k1/emu10k1_synth.c b/sound/pci/emu10k1/emu10k1_synth.c
--- a/sound/pci/emu10k1/emu10k1_synth.c	2004-08-04 17:48:48 -07:00
+++ b/sound/pci/emu10k1/emu10k1_synth.c	2004-08-04 17:48:48 -07:00
@@ -85,9 +85,9 @@
 	if (dev->driver_data == NULL)
 		return 0; /* not registered actually */
 
-	emu = snd_magic_cast(snd_emux_t, dev->driver_data, return -EINVAL);
+	emu = dev->driver_data;
 
-	hw = snd_magic_cast(emu10k1_t, emu->hw, return -EINVAL);
+	hw = emu->hw;
 	spin_lock_irqsave(&hw->voice_lock, flags);
 	hw->synth = NULL;
 	hw->get_synth_voice = NULL;
diff -Nru a/sound/pci/emu10k1/emufx.c b/sound/pci/emu10k1/emufx.c
--- a/sound/pci/emu10k1/emufx.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/emu10k1/emufx.c	2004-08-04 17:48:49 -07:00
@@ -33,8 +33,6 @@
 #include <sound/core.h>
 #include <sound/emu10k1.h>
 
-#define chip_t emu10k1_t
-
 #if 0		/* for testing purposes - digital out -> capture */
 #define EMU10K1_CAPTURE_DIGITAL_OUT
 #endif
@@ -405,7 +403,7 @@
 	}
 }
 
-static int snd_emu10k1_fx8010_register_irq_handler(emu10k1_t *emu,
+int snd_emu10k1_fx8010_register_irq_handler(emu10k1_t *emu,
 						   snd_fx8010_irq_handler_t *handler,
 						   unsigned char gpr_running,
 						   void *private_data,
@@ -438,7 +436,7 @@
 	return 0;
 }
 
-static int snd_emu10k1_fx8010_unregister_irq_handler(emu10k1_t *emu,
+int snd_emu10k1_fx8010_unregister_irq_handler(emu10k1_t *emu,
 						     snd_emu10k1_fx8010_irq_t *irq)
 {
 	snd_emu10k1_fx8010_irq_t *tmp;
@@ -463,312 +461,6 @@
 	return 0;
 }
 
-/*
- *   PCM streams
- */
-
-#define INITIAL_TRAM_SHIFT     14
-#define INITIAL_TRAM_POS(size) ((((size) / 2) - INITIAL_TRAM_SHIFT) - 1)
-
-static void snd_emu10k1_fx8010_playback_irq(emu10k1_t *emu, void *private_data)
-{
-	snd_pcm_substream_t *substream = snd_magic_cast(snd_pcm_substream_t, private_data, return);
-	snd_pcm_period_elapsed(substream);
-}
-
-static void snd_emu10k1_fx8010_playback_tram_poke1(unsigned short *dst_left,
-						   unsigned short *dst_right,
-						   unsigned short *src,
-						   unsigned int count,
-						   unsigned int tram_shift)
-{
-	// printk("tram_poke1: dst_left = 0x%p, dst_right = 0x%p, src = 0x%p, count = 0x%x\n", dst_left, dst_right, src, count);
-	if ((tram_shift & 1) == 0) {
-		while (count--) {
-			*dst_left-- = *src++;
-			*dst_right-- = *src++;
-		}
-	} else {
-		while (count--) {
-			*dst_right-- = *src++;
-			*dst_left-- = *src++;
-		}
-	}
-}
-
-static void snd_emu10k1_fx8010_playback_tram_poke(emu10k1_t *emu,
-						  unsigned int *tram_pos,
-						  unsigned int *tram_shift,
-						  unsigned int tram_size,
-						  unsigned short *src,
-						  unsigned int frames)
-{
-	unsigned int count;
-
-	while (frames > *tram_pos) {
-		count = *tram_pos + 1;
-		snd_emu10k1_fx8010_playback_tram_poke1((unsigned short *)emu->fx8010.etram_pages.area + *tram_pos,
-						       (unsigned short *)emu->fx8010.etram_pages.area + *tram_pos + tram_size / 2,
-						       src, count, *tram_shift);
-		src += count * 2;
-		frames -= count;
-		*tram_pos = (tram_size / 2) - 1;
-		(*tram_shift)++;
-	}
-	snd_emu10k1_fx8010_playback_tram_poke1((unsigned short *)emu->fx8010.etram_pages.area + *tram_pos,
-					       (unsigned short *)emu->fx8010.etram_pages.area + *tram_pos + tram_size / 2,
-					       src, frames, *tram_shift++);
-	*tram_pos -= frames;
-}
-
-static int snd_emu10k1_fx8010_playback_transfer(snd_pcm_substream_t *substream)
-{
-	emu10k1_t *emu = snd_pcm_substream_chip(substream);
-	snd_pcm_runtime_t *runtime = substream->runtime;
-	snd_emu10k1_fx8010_pcm_t *pcm = &emu->fx8010.pcm[substream->number];
-	snd_pcm_uframes_t appl_ptr = runtime->control->appl_ptr;
-	snd_pcm_sframes_t diff = appl_ptr - pcm->appl_ptr;
-	snd_pcm_uframes_t buffer_size = pcm->buffer_size / 2;
-
-	if (diff) {
-		if (diff < -(snd_pcm_sframes_t) (runtime->boundary / 2))
-			diff += runtime->boundary;
-		pcm->sw_ready += diff;
-		pcm->appl_ptr = appl_ptr;
-	}
-	while (pcm->hw_ready < buffer_size &&
-	       pcm->sw_ready > 0) {
-	       	size_t hw_to_end = buffer_size - pcm->hw_data;
-	       	size_t sw_to_end = (runtime->buffer_size << 2) - pcm->sw_data;
-	       	size_t tframes = buffer_size - pcm->hw_ready;
-	       	if (pcm->sw_ready < tframes)
-	       		tframes = pcm->sw_ready;
-	       	if (hw_to_end < tframes)
-	       		tframes = hw_to_end;
-	       	if (sw_to_end < tframes)
-	       		tframes = sw_to_end;
-	       	snd_emu10k1_fx8010_playback_tram_poke(emu, &pcm->tram_pos, &pcm->tram_shift,
-	       					      pcm->buffer_size,
-	       					      (unsigned short *)(runtime->dma_area + (pcm->sw_data << 2)),
-	       					      tframes);
-		pcm->hw_data += tframes;
-		if (pcm->hw_data == buffer_size)
-			pcm->hw_data = 0;
-		pcm->sw_data += tframes;
-		if (pcm->sw_data == runtime->buffer_size)
-			pcm->sw_data = 0;
-		pcm->hw_ready += tframes;
-		pcm->sw_ready -= tframes;
-	}
-	return 0;
-}
-
-static int snd_emu10k1_fx8010_playback_hw_params(snd_pcm_substream_t * substream,
-						 snd_pcm_hw_params_t * hw_params)
-{
-	return snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
-}
-
-static int snd_emu10k1_fx8010_playback_hw_free(snd_pcm_substream_t * substream)
-{
-	emu10k1_t *emu = snd_pcm_substream_chip(substream);
-	snd_emu10k1_fx8010_pcm_t *pcm = &emu->fx8010.pcm[substream->number];
-	unsigned int i;
-
-	for (i = 0; i < pcm->channels; i++)
-		snd_emu10k1_ptr_write(emu, TANKMEMADDRREGBASE + 0x80 + pcm->etram[i], 0, 0);
-	snd_pcm_lib_free_pages(substream);
-	return 0;
-}
-
-static int snd_emu10k1_fx8010_playback_prepare(snd_pcm_substream_t * substream)
-{
-	emu10k1_t *emu = snd_pcm_substream_chip(substream);
-	snd_pcm_runtime_t *runtime = substream->runtime;
-	snd_emu10k1_fx8010_pcm_t *pcm = &emu->fx8010.pcm[substream->number];
-	unsigned int i;
-	
-	// printk("prepare: etram_pages = 0x%p, dma_area = 0x%x, buffer_size = 0x%x (0x%x)\n", emu->fx8010.etram_pages, runtime->dma_area, runtime->buffer_size, runtime->buffer_size << 2);
-	pcm->sw_data = pcm->sw_io = pcm->sw_ready = 0;
-	pcm->hw_data = pcm->hw_io = pcm->hw_ready = 0;
-	pcm->tram_pos = INITIAL_TRAM_POS(pcm->buffer_size);
-	pcm->tram_shift = 0;
-	pcm->appl_ptr = 0;
-	snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_running, 0, 0);	/* reset */
-	snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_trigger, 0, 0);	/* reset */
-	snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_size, 0, runtime->buffer_size);
-	snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_ptr, 0, 0);		/* reset ptr number */
-	snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_count, 0, runtime->period_size);
-	snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_tmpcount, 0, runtime->period_size);
-	for (i = 0; i < pcm->channels; i++)
-		snd_emu10k1_ptr_write(emu, TANKMEMADDRREGBASE + 0x80 + pcm->etram[i], 0, (TANKMEMADDRREG_READ|TANKMEMADDRREG_ALIGN) + i * (runtime->buffer_size / pcm->channels));
-	return 0;
-}
-
-static int snd_emu10k1_fx8010_playback_trigger(snd_pcm_substream_t * substream, int cmd)
-{
-	emu10k1_t *emu = snd_pcm_substream_chip(substream);
-	snd_emu10k1_fx8010_pcm_t *pcm = &emu->fx8010.pcm[substream->number];
-	unsigned long flags;
-	int result = 0;
-
-	spin_lock_irqsave(&emu->reg_lock, flags);
-	switch (cmd) {
-	case SNDRV_PCM_TRIGGER_START:
-		/* follow thru */
-	case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
-#ifdef EMU10K1_SET_AC3_IEC958
-	{
-		int i;
-		for (i = 0; i < 3; i++) {
-			unsigned int bits;
-			bits = SPCS_CLKACCY_1000PPM | SPCS_SAMPLERATE_48 |
-			       SPCS_CHANNELNUM_LEFT | SPCS_SOURCENUM_UNSPEC | SPCS_GENERATIONSTATUS |
-			       0x00001200 | SPCS_EMPHASIS_NONE | SPCS_COPYRIGHT | SPCS_NOTAUDIODATA;
-			snd_emu10k1_ptr_write(emu, SPCS0 + i, 0, bits);
-		}
-	}
-#endif
-		result = snd_emu10k1_fx8010_register_irq_handler(emu, snd_emu10k1_fx8010_playback_irq, pcm->gpr_running, substream, &pcm->irq);
-		if (result < 0)
-			goto __err;
-		snd_emu10k1_fx8010_playback_transfer(substream);	/* roll the ball */
-		snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_trigger, 0, 1);
-		break;
-	case SNDRV_PCM_TRIGGER_STOP:
-	case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
-		snd_emu10k1_fx8010_unregister_irq_handler(emu, pcm->irq); pcm->irq = NULL;
-		snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_trigger, 0, 0);
-		pcm->tram_pos = INITIAL_TRAM_POS(pcm->buffer_size);
-		pcm->tram_shift = 0;
-		break;
-	default:
-		result = -EINVAL;
-		break;
-	}
-      __err:
-	spin_unlock_irqrestore(&emu->reg_lock, flags);
-	return result;
-}
-
-static snd_pcm_uframes_t snd_emu10k1_fx8010_playback_pointer(snd_pcm_substream_t * substream)
-{
-	emu10k1_t *emu = snd_pcm_substream_chip(substream);
-	snd_pcm_runtime_t *runtime = substream->runtime;
-	snd_emu10k1_fx8010_pcm_t *pcm = &emu->fx8010.pcm[substream->number];
-	size_t ptr;
-	snd_pcm_sframes_t frames;
-
-	if (!snd_emu10k1_ptr_read(emu, emu->gpr_base + pcm->gpr_trigger, 0))
-		return 0;
-	ptr = snd_emu10k1_ptr_read(emu, emu->gpr_base + pcm->gpr_ptr, 0);
-	frames = ptr - pcm->hw_io;
-	if (frames < 0)
-		frames += runtime->buffer_size;
-	pcm->hw_io = ptr;
-	pcm->hw_ready -= frames;
-	pcm->sw_io += frames;
-	if (pcm->sw_io >= runtime->buffer_size)
-		pcm->sw_io -= runtime->buffer_size;
-	snd_emu10k1_fx8010_playback_transfer(substream);
-	return pcm->sw_io;
-}
-
-static snd_pcm_hardware_t snd_emu10k1_fx8010_playback =
-{
-	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
-				 /* SNDRV_PCM_INFO_MMAP_VALID | */ SNDRV_PCM_INFO_PAUSE),
-	.formats =		SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S16_LE,
-	.rates =		SNDRV_PCM_RATE_48000,
-	.rate_min =		48000,
-	.rate_max =		48000,
-	.channels_min =		1,
-	.channels_max =		1,
-	.buffer_bytes_max =	(128*1024),
-	.period_bytes_min =	1024,
-	.period_bytes_max =	(128*1024),
-	.periods_min =		1,
-	.periods_max =		1024,
-	.fifo_size =		0,
-};
-
-static int snd_emu10k1_fx8010_playback_open(snd_pcm_substream_t * substream)
-{
-	emu10k1_t *emu = snd_pcm_substream_chip(substream);
-	snd_pcm_runtime_t *runtime = substream->runtime;
-	snd_emu10k1_fx8010_pcm_t *pcm = &emu->fx8010.pcm[substream->number];
-
-	runtime->hw = snd_emu10k1_fx8010_playback;
-	runtime->hw.channels_min = runtime->hw.channels_max = pcm->channels;
-	runtime->hw.period_bytes_max = (pcm->buffer_size * 2) / 2;
-	spin_lock(&emu->reg_lock);
-	if (pcm->valid == 0) {
-		spin_unlock(&emu->reg_lock);
-		return -ENODEV;
-	}
-	pcm->opened = 1;
-	spin_unlock(&emu->reg_lock);
-	return 0;
-}
-
-static int snd_emu10k1_fx8010_playback_close(snd_pcm_substream_t * substream)
-{
-	emu10k1_t *emu = snd_pcm_substream_chip(substream);
-	snd_emu10k1_fx8010_pcm_t *pcm = &emu->fx8010.pcm[substream->number];
-
-	spin_lock(&emu->reg_lock);
-	pcm->opened = 0;
-	spin_unlock(&emu->reg_lock);
-	return 0;
-}
-
-static snd_pcm_ops_t snd_emu10k1_fx8010_playback_ops = {
-	.open =			snd_emu10k1_fx8010_playback_open,
-	.close =		snd_emu10k1_fx8010_playback_close,
-	.ioctl =		snd_pcm_lib_ioctl,
-	.hw_params =		snd_emu10k1_fx8010_playback_hw_params,
-	.hw_free =		snd_emu10k1_fx8010_playback_hw_free,
-	.prepare =		snd_emu10k1_fx8010_playback_prepare,
-	.trigger =		snd_emu10k1_fx8010_playback_trigger,
-	.pointer =		snd_emu10k1_fx8010_playback_pointer,
-	.ack =			snd_emu10k1_fx8010_playback_transfer,
-};
-
-static void snd_emu10k1_fx8010_pcm_free(snd_pcm_t *pcm)
-{
-	emu10k1_t *emu = snd_magic_cast(emu10k1_t, pcm->private_data, return);
-	emu->pcm_fx8010 = NULL;
-	snd_pcm_lib_preallocate_free_for_all(pcm);
-}
-
-int snd_emu10k1_fx8010_pcm(emu10k1_t * emu, int device, snd_pcm_t ** rpcm)
-{
-	snd_pcm_t *pcm;
-	int err;
-
-	if (rpcm)
-		*rpcm = NULL;
-
-	if ((err = snd_pcm_new(emu->card, "emu10k1", device, 8, 0, &pcm)) < 0)
-		return err;
-
-	pcm->private_data = emu;
-	pcm->private_free = snd_emu10k1_fx8010_pcm_free;
-
-	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_emu10k1_fx8010_playback_ops);
-
-	pcm->info_flags = 0;
-	strcpy(pcm->name, "EMU10K1 FX8010");
-	emu->pcm_fx8010 = pcm;
-	
-	snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(emu->pci), 64*1024, 0);
-
-	if (rpcm)
-		*rpcm = pcm;
-
-	return 0;
-}
-
 /*************************************************************************
  * EMU10K1 effect manager
  *************************************************************************/
@@ -1193,7 +885,7 @@
 
 #define SND_EMU10K1_GPR_CONTROLS	41
 #define SND_EMU10K1_INPUTS		10
-#define SND_EMU10K1_PLAYBACK_CHANNELS	6
+#define SND_EMU10K1_PLAYBACK_CHANNELS	8
 #define SND_EMU10K1_CAPTURE_CHANNELS	4
 
 static void __devinit snd_emu10k1_init_mono_control(emu10k1_fx8010_control_gpr_t *ctl, const char *name, int gpr, int defval)
@@ -1262,9 +954,9 @@
 	spin_lock_init(&emu->fx8010.irq_lock);
 	INIT_LIST_HEAD(&emu->fx8010.gpr_ctl);
 
-	if ((icode = snd_kcalloc(sizeof(emu10k1_fx8010_code_t), GFP_KERNEL)) == NULL)
+	if ((icode = kcalloc(1, sizeof(*icode), GFP_KERNEL)) == NULL)
 		return -ENOMEM;
-	if ((controls = snd_kcalloc(sizeof(emu10k1_fx8010_control_gpr_t) * SND_EMU10K1_GPR_CONTROLS, GFP_KERNEL)) == NULL) {
+	if ((controls = kcalloc(SND_EMU10K1_GPR_CONTROLS, sizeof(*controls), GFP_KERNEL)) == NULL) {
 		kfree(icode);
 		return -ENOMEM;
 	}
@@ -1292,6 +984,14 @@
 	A_OP(icode, &ptr, iMAC0, A_GPR(playback+3), A_C_00000000, A_GPR(gpr+1), A_FXBUS(FXBUS_PCM_RIGHT_REAR));
 	snd_emu10k1_init_stereo_control(&controls[nctl++], "PCM Surround Playback Volume", gpr, 100);
 	gpr += 2;
+	
+	/* PCM Side Playback (independent from stereo mix) */
+	if (emu->spk71) {
+		A_OP(icode, &ptr, iMAC0, A_GPR(playback+6), A_C_00000000, A_GPR(gpr), A_FXBUS(FXBUS_PCM_LEFT_SIDE));
+		A_OP(icode, &ptr, iMAC0, A_GPR(playback+7), A_C_00000000, A_GPR(gpr+1), A_FXBUS(FXBUS_PCM_RIGHT_SIDE));
+		snd_emu10k1_init_stereo_control(&controls[nctl++], "PCM Side Playback Volume", gpr, 100);
+		gpr += 2;
+	}
 
 	/* PCM Center Playback (independent from stereo mix) */
 	A_OP(icode, &ptr, iMAC0, A_GPR(playback+4), A_C_00000000, A_GPR(gpr), A_FXBUS(FXBUS_PCM_CENTER));
@@ -1440,6 +1140,14 @@
 	A_OP(icode, &ptr, iMAC0, A_GPR(playback+5), A_GPR(playback+5), A_GPR(gpr), A_GPR(tmp));
 	snd_emu10k1_init_mono_control(&controls[nctl++], "LFE Playback Volume", gpr, 0);
 	gpr++;
+	
+	if (emu->spk71) {
+		/* Stereo Mix Side Playback */
+		A_OP(icode, &ptr, iMAC0, A_GPR(playback+6), A_GPR(playback+6), A_GPR(gpr), A_GPR(stereo_mix));
+		A_OP(icode, &ptr, iMAC0, A_GPR(playback+7), A_GPR(playback+7), A_GPR(gpr+1), A_GPR(stereo_mix+1));
+		snd_emu10k1_init_stereo_control(&controls[nctl++], "Side Playback Volume", gpr, 0);
+		gpr += 2;
+	}
 
 	/*
 	 * outputs
@@ -1467,6 +1175,11 @@
 	A_OP(icode, &ptr, iACC3, A_GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 3), A_GPR(playback + 3), A_C_00000000, A_C_00000000); /* rear right */
 	A_OP(icode, &ptr, iACC3, A_GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 4), A_GPR(playback + 4), A_C_00000000, A_C_00000000); /* center */
 	A_OP(icode, &ptr, iACC3, A_GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 5), A_GPR(playback + 5), A_C_00000000, A_C_00000000); /* LFE */
+	if (emu->spk71) {
+		A_OP(icode, &ptr, iACC3, A_GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 6), A_GPR(playback + 6), A_C_00000000, A_C_00000000); /* side left */
+		A_OP(icode, &ptr, iACC3, A_GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 7), A_GPR(playback + 7), A_C_00000000, A_C_00000000); /* side right */
+	}
+	
 
 	ctl = &controls[nctl + 0];
 	ctl->id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
@@ -1497,7 +1210,7 @@
 			controls[nctl + 1].gpr[z * 2 + j] = TREBLE_GPR + z * 2 + j;
 		}
 	}
-	for (z = 0; z < 3; z++) {		/* front/rear/center-lfe */
+	for (z = 0; z < 4; z++) {		/* front/rear/center-lfe/side */
 		int j, k, l, d;
 		for (j = 0; j < 2; j++) {	/* left/right */
 			k = 0xb0 + (z * 8) + (j * 4);
@@ -1529,7 +1242,7 @@
 #undef BASS_GPR
 #undef TREBLE_GPR
 
-	for (z = 0; z < 6; z++) {
+	for (z = 0; z < 8; z++) {
 		A_SWITCH(icode, &ptr, tmp + 0, playback + SND_EMU10K1_PLAYBACK_CHANNELS + z, gpr + 0);
 		A_SWITCH_NEG(icode, &ptr, tmp + 1, gpr + 0);
 		A_SWITCH(icode, &ptr, tmp + 1, playback + z, tmp + 1);
@@ -1540,12 +1253,14 @@
 
 	/* Master volume (will be renamed later) */
 	A_OP(icode, &ptr, iMAC0, A_GPR(playback+0+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+0+SND_EMU10K1_PLAYBACK_CHANNELS));
-	A_OP(icode, &ptr, iMAC0, A_GPR(playback+1+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr+1), A_GPR(playback+1+SND_EMU10K1_PLAYBACK_CHANNELS));
-	A_OP(icode, &ptr, iMAC0, A_GPR(playback+2+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr+1), A_GPR(playback+2+SND_EMU10K1_PLAYBACK_CHANNELS));
-	A_OP(icode, &ptr, iMAC0, A_GPR(playback+3+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr+1), A_GPR(playback+3+SND_EMU10K1_PLAYBACK_CHANNELS));
-	A_OP(icode, &ptr, iMAC0, A_GPR(playback+4+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr+1), A_GPR(playback+4+SND_EMU10K1_PLAYBACK_CHANNELS));
-	A_OP(icode, &ptr, iMAC0, A_GPR(playback+5+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr+1), A_GPR(playback+5+SND_EMU10K1_PLAYBACK_CHANNELS));
-	snd_emu10k1_init_stereo_control(&controls[nctl++], "Wave Master Playback Volume", gpr, 0);
+	A_OP(icode, &ptr, iMAC0, A_GPR(playback+1+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+1+SND_EMU10K1_PLAYBACK_CHANNELS));
+	A_OP(icode, &ptr, iMAC0, A_GPR(playback+2+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+2+SND_EMU10K1_PLAYBACK_CHANNELS));
+	A_OP(icode, &ptr, iMAC0, A_GPR(playback+3+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+3+SND_EMU10K1_PLAYBACK_CHANNELS));
+	A_OP(icode, &ptr, iMAC0, A_GPR(playback+4+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+4+SND_EMU10K1_PLAYBACK_CHANNELS));
+	A_OP(icode, &ptr, iMAC0, A_GPR(playback+5+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+5+SND_EMU10K1_PLAYBACK_CHANNELS));
+	A_OP(icode, &ptr, iMAC0, A_GPR(playback+6+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+6+SND_EMU10K1_PLAYBACK_CHANNELS));
+	A_OP(icode, &ptr, iMAC0, A_GPR(playback+7+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+7+SND_EMU10K1_PLAYBACK_CHANNELS));
+	snd_emu10k1_init_mono_control(&controls[nctl++], "Wave Master Playback Volume", gpr, 0);
 	gpr += 2;
 
 	/* analog speakers */
@@ -1553,6 +1268,8 @@
 	A_PUT_STEREO_OUTPUT(A_EXTOUT_AREAR_L, A_EXTOUT_AREAR_R, playback+2 + SND_EMU10K1_PLAYBACK_CHANNELS);
 	A_PUT_OUTPUT(A_EXTOUT_ACENTER, playback+4 + SND_EMU10K1_PLAYBACK_CHANNELS);
 	A_PUT_OUTPUT(A_EXTOUT_ALFE, playback+5 + SND_EMU10K1_PLAYBACK_CHANNELS);
+	if (emu->spk71)
+		A_PUT_STEREO_OUTPUT(A_EXTOUT_ASIDE_L, A_EXTOUT_ASIDE_R, playback+6 + SND_EMU10K1_PLAYBACK_CHANNELS);
 
 	/* headphone */
 	A_PUT_STEREO_OUTPUT(A_EXTOUT_HEADPHONE_L, A_EXTOUT_HEADPHONE_R, playback + SND_EMU10K1_PLAYBACK_CHANNELS);
@@ -1674,13 +1391,13 @@
 	spin_lock_init(&emu->fx8010.irq_lock);
 	INIT_LIST_HEAD(&emu->fx8010.gpr_ctl);
 
-	if ((icode = snd_kcalloc(sizeof(emu10k1_fx8010_code_t), GFP_KERNEL)) == NULL)
+	if ((icode = kcalloc(1, sizeof(*icode), GFP_KERNEL)) == NULL)
 		return -ENOMEM;
-	if ((controls = snd_kcalloc(sizeof(emu10k1_fx8010_control_gpr_t) * SND_EMU10K1_GPR_CONTROLS, GFP_KERNEL)) == NULL) {
+	if ((controls = kcalloc(SND_EMU10K1_GPR_CONTROLS, sizeof(emu10k1_fx8010_control_gpr_t), GFP_KERNEL)) == NULL) {
 		kfree(icode);
 		return -ENOMEM;
 	}
-	if ((ipcm = snd_kcalloc(sizeof(emu10k1_fx8010_pcm_t), GFP_KERNEL)) == NULL) {
+	if ((ipcm = kcalloc(1, sizeof(*ipcm), GFP_KERNEL)) == NULL) {
 		kfree(controls);
 		kfree(icode);
 		return -ENOMEM;
@@ -2236,13 +1953,14 @@
 	snd_emu10k1_ptr_write(emu, TCB, 0, 0);
 	snd_emu10k1_ptr_write(emu, TCBS, 0, 0);
 	if (emu->fx8010.etram_pages.area != NULL) {
-		snd_dma_free_pages(&emu->dma_dev, &emu->fx8010.etram_pages);
+		snd_dma_free_pages(&emu->fx8010.etram_pages);
 		emu->fx8010.etram_pages.area = NULL;
 		emu->fx8010.etram_pages.bytes = 0;
 	}
 
 	if (size > 0) {
-		if (snd_dma_alloc_pages(&emu->dma_dev, size * 2, &emu->fx8010.etram_pages) < 0)
+		if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(emu->pci),
+					size * 2, &emu->fx8010.etram_pages) < 0)
 			return -ENOMEM;
 		memset(emu->fx8010.etram_pages.area, 0, size * 2);
 		snd_emu10k1_ptr_write(emu, TCB, 0, emu->fx8010.etram_pages.addr);
@@ -2297,7 +2015,7 @@
 
 static int snd_emu10k1_fx8010_ioctl(snd_hwdep_t * hw, struct file *file, unsigned int cmd, unsigned long arg)
 {
-	emu10k1_t *emu = snd_magic_cast(emu10k1_t, hw->private_data, return -ENXIO);
+	emu10k1_t *emu = hw->private_data;
 	emu10k1_fx8010_info_t *info;
 	emu10k1_fx8010_code_t *icode;
 	emu10k1_fx8010_pcm_t *ipcm;
@@ -2364,7 +2082,7 @@
 	case SNDRV_EMU10K1_IOCTL_PCM_PEEK:
 		if (emu->audigy)
 			return -EINVAL;
-		ipcm = (emu10k1_fx8010_pcm_t *)snd_kcalloc(sizeof(*ipcm), GFP_KERNEL);
+		ipcm = kcalloc(1, sizeof(*ipcm), GFP_KERNEL);
 		if (ipcm == NULL)
 			return -ENOMEM;
 		if (copy_from_user(ipcm, argp, sizeof(*ipcm))) {
diff -Nru a/sound/pci/emu10k1/emumixer.c b/sound/pci/emu10k1/emumixer.c
--- a/sound/pci/emu10k1/emumixer.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/emu10k1/emumixer.c	2004-08-04 17:48:49 -07:00
@@ -32,8 +32,6 @@
 #include <sound/core.h>
 #include <sound/emu10k1.h>
 
-#define chip_t emu10k1_t
-
 #define AC97_ID_STAC9758	0x83847658
 
 static int snd_emu10k1_spdif_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo)
@@ -421,7 +419,7 @@
  */
 static void snd_emu10k1_mixer_free_ac97(ac97_t *ac97)
 {
-	emu10k1_t *emu = snd_magic_cast(emu10k1_t, ac97->private_data, return);
+	emu10k1_t *emu = ac97->private_data;
 	emu->ac97 = NULL;
 }
 
@@ -512,13 +510,14 @@
 	};
 
 	if (!emu->no_ac97) {
-		ac97_bus_t bus, *pbus;
-		ac97_t ac97;
+		ac97_bus_t *pbus;
+		ac97_template_t ac97;
+		static ac97_bus_ops_t ops = {
+			.write = snd_emu10k1_ac97_write,
+			.read = snd_emu10k1_ac97_read,
+		};
 
-		memset(&bus, 0, sizeof(bus));
-		bus.write = snd_emu10k1_ac97_write;
-		bus.read = snd_emu10k1_ac97_read;
-		if ((err = snd_ac97_bus(emu->card, &bus, &pbus)) < 0)
+		if ((err = snd_ac97_bus(emu->card, 0, &ops, NULL, &pbus)) < 0)
 			return err;
 		
 		memset(&ac97, 0, sizeof(ac97));
diff -Nru a/sound/pci/emu10k1/emupcm.c b/sound/pci/emu10k1/emupcm.c
--- a/sound/pci/emu10k1/emupcm.c	2004-08-04 17:48:48 -07:00
+++ b/sound/pci/emu10k1/emupcm.c	2004-08-04 17:48:48 -07:00
@@ -34,8 +34,6 @@
 #include <sound/core.h>
 #include <sound/emu10k1.h>
 
-#define chip_t emu10k1_t
-
 static void snd_emu10k1_pcm_interrupt(emu10k1_t *emu, emu10k1_voice_t *voice)
 {
 	emu10k1_pcm_t *epcm;
@@ -354,7 +352,7 @@
 {
 	emu10k1_t *emu = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	emu10k1_pcm_t *epcm = snd_magic_cast(emu10k1_pcm_t, runtime->private_data, return -ENXIO);
+	emu10k1_pcm_t *epcm = runtime->private_data;
 	int err;
 
 	if ((err = snd_emu10k1_pcm_channel_alloc(epcm, params_channels(hw_params))) < 0)
@@ -383,7 +381,7 @@
 
 	if (runtime->private_data == NULL)
 		return 0;
-	epcm = snd_magic_cast(emu10k1_pcm_t, runtime->private_data, return -ENXIO);
+	epcm = runtime->private_data;
 	if (epcm->extra) {
 		snd_emu10k1_voice_free(epcm->emu, epcm->extra);
 		epcm->extra = NULL;
@@ -409,7 +407,7 @@
 {
 	emu10k1_t *emu = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	emu10k1_pcm_t *epcm = snd_magic_cast(emu10k1_pcm_t, runtime->private_data, return -ENXIO);
+	emu10k1_pcm_t *epcm = runtime->private_data;
 	unsigned int start_addr, end_addr;
 
 	start_addr = epcm->start_addr;
@@ -443,7 +441,7 @@
 {
 	emu10k1_t *emu = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	emu10k1_pcm_t *epcm = snd_magic_cast(emu10k1_pcm_t, runtime->private_data, return -ENXIO);
+	emu10k1_pcm_t *epcm = runtime->private_data;
 	int idx;
 
 	snd_emu10k1_ptr_write(emu, epcm->capture_bs_reg, 0, 0);
@@ -452,7 +450,11 @@
 		snd_emu10k1_ptr_write(emu, ADCCR, 0, 0);
 		break;
 	case CAPTURE_EFX:
-		snd_emu10k1_ptr_write(emu, FXWC, 0, 0);
+		if (emu->audigy) {
+			snd_emu10k1_ptr_write(emu, A_FXWC1, 0, 0);
+			snd_emu10k1_ptr_write(emu, A_FXWC2, 0, 0);
+		} else
+			snd_emu10k1_ptr_write(emu, FXWC, 0, 0);
 		break;
 	default:
 		break;
@@ -565,12 +567,11 @@
 {
 	emu10k1_t *emu = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	emu10k1_pcm_t *epcm = snd_magic_cast(emu10k1_pcm_t, runtime->private_data, return -ENXIO);
-	unsigned long flags;
+	emu10k1_pcm_t *epcm = runtime->private_data;
 	int result = 0;
 
 	// printk("trigger - emu10k1 = 0x%x, cmd = %i, pointer = %i\n", (int)emu, cmd, substream->ops->pointer(substream));
-	spin_lock_irqsave(&emu->reg_lock, flags);
+	spin_lock(&emu->reg_lock);
 	switch (cmd) {
 	case SNDRV_PCM_TRIGGER_START:
 		snd_emu10k1_playback_invalidate_cache(emu, epcm->extra);	/* do we need this? */
@@ -593,7 +594,7 @@
 		result = -EINVAL;
 		break;
 	}
-	spin_unlock_irqrestore(&emu->reg_lock, flags);
+	spin_unlock(&emu->reg_lock);
 	return result;
 }
 
@@ -602,12 +603,11 @@
 {
 	emu10k1_t *emu = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	emu10k1_pcm_t *epcm = snd_magic_cast(emu10k1_pcm_t, runtime->private_data, return -ENXIO);
-	unsigned long flags;
+	emu10k1_pcm_t *epcm = runtime->private_data;
 	int result = 0;
 
 	// printk("trigger - emu10k1 = %p, cmd = %i, pointer = %i\n", emu, cmd, substream->ops->pointer(substream));
-	spin_lock_irqsave(&emu->reg_lock, flags);
+	spin_lock(&emu->reg_lock);
 	switch (cmd) {
 	case SNDRV_PCM_TRIGGER_START:
 		outl(epcm->capture_ipr, emu->port + IPR);
@@ -618,7 +618,11 @@
 			snd_emu10k1_ptr_write(emu, ADCCR, 0, epcm->capture_cr_val);
 			break;
 		case CAPTURE_EFX:
-			snd_emu10k1_ptr_write(emu, FXWC, 0, epcm->capture_cr_val);
+			if (emu->audigy) {
+				snd_emu10k1_ptr_write(emu, A_FXWC1, 0, epcm->capture_cr_val);
+				snd_emu10k1_ptr_write(emu, A_FXWC2, 0, epcm->capture_cr_val2);
+			} else
+				snd_emu10k1_ptr_write(emu, FXWC, 0, epcm->capture_cr_val);
 			break;
 		default:	
 			break;
@@ -637,7 +641,11 @@
 			snd_emu10k1_ptr_write(emu, ADCCR, 0, 0);
 			break;
 		case CAPTURE_EFX:
-			snd_emu10k1_ptr_write(emu, FXWC, 0, 0);
+			if (emu->audigy) {
+				snd_emu10k1_ptr_write(emu, A_FXWC1, 0, 0);
+				snd_emu10k1_ptr_write(emu, A_FXWC2, 0, 0);
+			} else
+				snd_emu10k1_ptr_write(emu, FXWC, 0, 0);
 			break;
 		default:
 			break;
@@ -646,7 +654,7 @@
 	default:
 		result = -EINVAL;
 	}
-	spin_unlock_irqrestore(&emu->reg_lock, flags);
+	spin_unlock(&emu->reg_lock);
 	return result;
 }
 
@@ -654,7 +662,7 @@
 {
 	emu10k1_t *emu = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	emu10k1_pcm_t *epcm = snd_magic_cast(emu10k1_pcm_t, runtime->private_data, return -ENXIO);
+	emu10k1_pcm_t *epcm = runtime->private_data;
 	unsigned int ptr;
 
 	if (!epcm->running)
@@ -681,7 +689,7 @@
 {
 	emu10k1_t *emu = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	emu10k1_pcm_t *epcm = snd_magic_cast(emu10k1_pcm_t, runtime->private_data, return -ENXIO);
+	emu10k1_pcm_t *epcm = runtime->private_data;
 	unsigned int ptr;
 
 	if (!epcm->running)
@@ -767,10 +775,10 @@
 
 static void snd_emu10k1_pcm_free_substream(snd_pcm_runtime_t *runtime)
 {
-	emu10k1_pcm_t *epcm = snd_magic_cast(emu10k1_pcm_t, runtime->private_data, return);
+	emu10k1_pcm_t *epcm = runtime->private_data;
 
 	if (epcm)
-		snd_magic_kfree(epcm);
+		kfree(epcm);
 }
 
 static int snd_emu10k1_playback_open(snd_pcm_substream_t * substream)
@@ -781,7 +789,7 @@
 	snd_pcm_runtime_t *runtime = substream->runtime;
 	int i, err;
 
-	epcm = snd_magic_kcalloc(emu10k1_pcm_t, 0, GFP_KERNEL);
+	epcm = kcalloc(1, sizeof(*epcm), GFP_KERNEL);
 	if (epcm == NULL)
 		return -ENOMEM;
 	epcm->emu = emu;
@@ -791,11 +799,11 @@
 	runtime->private_free = snd_emu10k1_pcm_free_substream;
 	runtime->hw = snd_emu10k1_playback;
 	if ((err = snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS)) < 0) {
-		snd_magic_kfree(epcm);
+		kfree(epcm);
 		return err;
 	}
 	if ((err = snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_BUFFER_BYTES, 256, UINT_MAX)) < 0) {
-		snd_magic_kfree(epcm);
+		kfree(epcm);
 		return err;
 	}
 	mix = &emu->pcm_mixer[substream->number];
@@ -826,7 +834,7 @@
 	snd_pcm_runtime_t *runtime = substream->runtime;
 	emu10k1_pcm_t *epcm;
 
-	epcm = snd_magic_kcalloc(emu10k1_pcm_t, 0, GFP_KERNEL);
+	epcm = kcalloc(1, sizeof(*epcm), GFP_KERNEL);
 	if (epcm == NULL)
 		return -ENOMEM;
 	epcm->emu = emu;
@@ -842,7 +850,7 @@
 	runtime->hw = snd_emu10k1_capture;
 	emu->capture_interrupt = snd_emu10k1_pcm_ac97adc_interrupt;
 	emu->pcm_capture_substream = substream;
-	snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, &hw_constraints_capture_period_sizes);
+	snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES, &hw_constraints_capture_period_sizes);
 	snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &hw_constraints_capture_rates);
 	return 0;
 }
@@ -862,7 +870,7 @@
 	emu10k1_pcm_t *epcm;
 	snd_pcm_runtime_t *runtime = substream->runtime;
 
-	epcm = snd_magic_kcalloc(emu10k1_pcm_t, 0, GFP_KERNEL);
+	epcm = kcalloc(1, sizeof(*epcm), GFP_KERNEL);
 	if (epcm == NULL)
 		return -ENOMEM;
 	epcm->emu = emu;
@@ -881,7 +889,7 @@
 	runtime->hw.channels_min = 1;
 	emu->capture_mic_interrupt = snd_emu10k1_pcm_ac97mic_interrupt;
 	emu->pcm_capture_mic_substream = substream;
-	snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, &hw_constraints_capture_period_sizes);
+	snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES, &hw_constraints_capture_period_sizes);
 	return 0;
 }
 
@@ -899,11 +907,10 @@
 	emu10k1_t *emu = snd_pcm_substream_chip(substream);
 	emu10k1_pcm_t *epcm;
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	unsigned long flags;
 	int nefx = emu->audigy ? 64 : 32;
 	int idx;
 
-	epcm = snd_magic_kcalloc(emu10k1_pcm_t, 0, GFP_KERNEL);
+	epcm = kcalloc(1, sizeof(*epcm), GFP_KERNEL);
 	if (epcm == NULL)
 		return -ENOMEM;
 	epcm->emu = emu;
@@ -919,7 +926,7 @@
 	runtime->hw = snd_emu10k1_capture;
 	runtime->hw.rates = SNDRV_PCM_RATE_48000;
 	runtime->hw.rate_min = runtime->hw.rate_max = 48000;
-	spin_lock_irqsave(&emu->reg_lock, flags);
+	spin_lock_irq(&emu->reg_lock);
 	runtime->hw.channels_min = runtime->hw.channels_max = 0;
 	for (idx = 0; idx < nefx; idx++) {
 		if (emu->efx_voices_mask[idx/32] & (1 << (idx%32))) {
@@ -929,10 +936,10 @@
 	}
 	epcm->capture_cr_val = emu->efx_voices_mask[0];
 	epcm->capture_cr_val2 = emu->efx_voices_mask[1];
-	spin_unlock_irqrestore(&emu->reg_lock, flags);
+	spin_unlock_irq(&emu->reg_lock);
 	emu->capture_efx_interrupt = snd_emu10k1_pcm_efx_interrupt;
 	emu->pcm_capture_efx_substream = substream;
-	snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, &hw_constraints_capture_period_sizes);
+	snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES, &hw_constraints_capture_period_sizes);
 	return 0;
 }
 
@@ -970,7 +977,7 @@
 
 static void snd_emu10k1_pcm_free(snd_pcm_t *pcm)
 {
-	emu10k1_t *emu = snd_magic_cast(emu10k1_t, pcm->private_data, return);
+	emu10k1_t *emu = pcm->private_data;
 	emu->pcm = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
@@ -1024,7 +1031,7 @@
 
 static void snd_emu10k1_pcm_mic_free(snd_pcm_t *pcm)
 {
-	emu10k1_t *emu = snd_magic_cast(emu10k1_t, pcm->private_data, return);
+	emu10k1_t *emu = pcm->private_data;
 	emu->pcm_mic = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
@@ -1070,21 +1077,19 @@
 static int snd_emu10k1_pcm_efx_voices_mask_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
 	emu10k1_t *emu = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	int nefx = emu->audigy ? 64 : 32;
 	int idx;
 	
-	spin_lock_irqsave(&emu->reg_lock, flags);
+	spin_lock_irq(&emu->reg_lock);
 	for (idx = 0; idx < nefx; idx++)
 		ucontrol->value.integer.value[idx] = (emu->efx_voices_mask[idx / 32] & (1 << (idx % 32))) ? 1 : 0;
-	spin_unlock_irqrestore(&emu->reg_lock, flags);
+	spin_unlock_irq(&emu->reg_lock);
 	return 0;
 }
 
 static int snd_emu10k1_pcm_efx_voices_mask_put(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
 	emu10k1_t *emu = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	unsigned int nval[2], bits;
 	int nefx = emu->audigy ? 64 : 32;
 	int change, idx;
@@ -1097,12 +1102,12 @@
 		}
 	if (bits != 1 && bits != 2 && bits != 4 && bits != 8)
 		return -EINVAL;
-	spin_lock_irqsave(&emu->reg_lock, flags);
+	spin_lock_irq(&emu->reg_lock);
 	change = (nval[0] != emu->efx_voices_mask[0]) ||
 		(nval[1] != emu->efx_voices_mask[1]);
 	emu->efx_voices_mask[0] = nval[0];
 	emu->efx_voices_mask[1] = nval[1];
-	spin_unlock_irqrestore(&emu->reg_lock, flags);
+	spin_unlock_irq(&emu->reg_lock);
 	return change;
 }
 
@@ -1125,9 +1130,238 @@
 	.pointer =		snd_emu10k1_capture_pointer,
 };
 
+
+/* EFX playback */
+
+#define INITIAL_TRAM_SHIFT     14
+#define INITIAL_TRAM_POS(size) ((((size) / 2) - INITIAL_TRAM_SHIFT) - 1)
+
+static void snd_emu10k1_fx8010_playback_irq(emu10k1_t *emu, void *private_data)
+{
+	snd_pcm_substream_t *substream = private_data;
+	snd_pcm_period_elapsed(substream);
+}
+
+static void snd_emu10k1_fx8010_playback_tram_poke1(unsigned short *dst_left,
+						   unsigned short *dst_right,
+						   unsigned short *src,
+						   unsigned int count,
+						   unsigned int tram_shift)
+{
+	// printk("tram_poke1: dst_left = 0x%p, dst_right = 0x%p, src = 0x%p, count = 0x%x\n", dst_left, dst_right, src, count);
+	if ((tram_shift & 1) == 0) {
+		while (count--) {
+			*dst_left-- = *src++;
+			*dst_right-- = *src++;
+		}
+	} else {
+		while (count--) {
+			*dst_right-- = *src++;
+			*dst_left-- = *src++;
+		}
+	}
+}
+
+static void fx8010_pb_trans_copy(snd_pcm_substream_t *substream,
+				 snd_pcm_indirect_t *rec, size_t bytes)
+{
+	emu10k1_t *emu = snd_pcm_substream_chip(substream);
+	snd_emu10k1_fx8010_pcm_t *pcm = &emu->fx8010.pcm[substream->number];
+	unsigned int tram_size = pcm->buffer_size;
+	unsigned short *src = (unsigned short *)(substream->runtime->dma_area + rec->sw_data);
+	unsigned int frames = bytes >> 2, count;
+	unsigned int tram_pos = pcm->tram_pos;
+	unsigned int tram_shift = pcm->tram_shift;
+
+	while (frames > tram_pos) {
+		count = tram_pos + 1;
+		snd_emu10k1_fx8010_playback_tram_poke1((unsigned short *)emu->fx8010.etram_pages.area + tram_pos,
+						       (unsigned short *)emu->fx8010.etram_pages.area + tram_pos + tram_size / 2,
+						       src, count, tram_shift);
+		src += count * 2;
+		frames -= count;
+		tram_pos = (tram_size / 2) - 1;
+		tram_shift++;
+	}
+	snd_emu10k1_fx8010_playback_tram_poke1((unsigned short *)emu->fx8010.etram_pages.area + tram_pos,
+					       (unsigned short *)emu->fx8010.etram_pages.area + tram_pos + tram_size / 2,
+					       src, frames, tram_shift++);
+	tram_pos -= frames;
+	pcm->tram_pos = tram_pos;
+	pcm->tram_shift = tram_shift;
+}
+
+static int snd_emu10k1_fx8010_playback_transfer(snd_pcm_substream_t *substream)
+{
+	emu10k1_t *emu = snd_pcm_substream_chip(substream);
+	snd_emu10k1_fx8010_pcm_t *pcm = &emu->fx8010.pcm[substream->number];
+
+	snd_pcm_indirect_playback_transfer(substream, &pcm->pcm_rec, fx8010_pb_trans_copy);
+	return 0;
+}
+
+static int snd_emu10k1_fx8010_playback_hw_params(snd_pcm_substream_t * substream,
+						 snd_pcm_hw_params_t * hw_params)
+{
+	return snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
+}
+
+static int snd_emu10k1_fx8010_playback_hw_free(snd_pcm_substream_t * substream)
+{
+	emu10k1_t *emu = snd_pcm_substream_chip(substream);
+	snd_emu10k1_fx8010_pcm_t *pcm = &emu->fx8010.pcm[substream->number];
+	unsigned int i;
+
+	for (i = 0; i < pcm->channels; i++)
+		snd_emu10k1_ptr_write(emu, TANKMEMADDRREGBASE + 0x80 + pcm->etram[i], 0, 0);
+	snd_pcm_lib_free_pages(substream);
+	return 0;
+}
+
+static int snd_emu10k1_fx8010_playback_prepare(snd_pcm_substream_t * substream)
+{
+	emu10k1_t *emu = snd_pcm_substream_chip(substream);
+	snd_pcm_runtime_t *runtime = substream->runtime;
+	snd_emu10k1_fx8010_pcm_t *pcm = &emu->fx8010.pcm[substream->number];
+	unsigned int i;
+	
+	// printk("prepare: etram_pages = 0x%p, dma_area = 0x%x, buffer_size = 0x%x (0x%x)\n", emu->fx8010.etram_pages, runtime->dma_area, runtime->buffer_size, runtime->buffer_size << 2);
+	memset(&pcm->pcm_rec, 0, sizeof(pcm->pcm_rec));
+	pcm->pcm_rec.hw_buffer_size = pcm->buffer_size * 2; /* byte size */
+	pcm->pcm_rec.sw_buffer_size = snd_pcm_lib_buffer_bytes(substream);
+	pcm->tram_pos = INITIAL_TRAM_POS(pcm->buffer_size);
+	pcm->tram_shift = 0;
+	snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_running, 0, 0);	/* reset */
+	snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_trigger, 0, 0);	/* reset */
+	snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_size, 0, runtime->buffer_size);
+	snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_ptr, 0, 0);		/* reset ptr number */
+	snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_count, 0, runtime->period_size);
+	snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_tmpcount, 0, runtime->period_size);
+	for (i = 0; i < pcm->channels; i++)
+		snd_emu10k1_ptr_write(emu, TANKMEMADDRREGBASE + 0x80 + pcm->etram[i], 0, (TANKMEMADDRREG_READ|TANKMEMADDRREG_ALIGN) + i * (runtime->buffer_size / pcm->channels));
+	return 0;
+}
+
+static int snd_emu10k1_fx8010_playback_trigger(snd_pcm_substream_t * substream, int cmd)
+{
+	emu10k1_t *emu = snd_pcm_substream_chip(substream);
+	snd_emu10k1_fx8010_pcm_t *pcm = &emu->fx8010.pcm[substream->number];
+	int result = 0;
+
+	spin_lock(&emu->reg_lock);
+	switch (cmd) {
+	case SNDRV_PCM_TRIGGER_START:
+		/* follow thru */
+	case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
+#ifdef EMU10K1_SET_AC3_IEC958
+	{
+		int i;
+		for (i = 0; i < 3; i++) {
+			unsigned int bits;
+			bits = SPCS_CLKACCY_1000PPM | SPCS_SAMPLERATE_48 |
+			       SPCS_CHANNELNUM_LEFT | SPCS_SOURCENUM_UNSPEC | SPCS_GENERATIONSTATUS |
+			       0x00001200 | SPCS_EMPHASIS_NONE | SPCS_COPYRIGHT | SPCS_NOTAUDIODATA;
+			snd_emu10k1_ptr_write(emu, SPCS0 + i, 0, bits);
+		}
+	}
+#endif
+		result = snd_emu10k1_fx8010_register_irq_handler(emu, snd_emu10k1_fx8010_playback_irq, pcm->gpr_running, substream, &pcm->irq);
+		if (result < 0)
+			goto __err;
+		snd_emu10k1_fx8010_playback_transfer(substream);	/* roll the ball */
+		snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_trigger, 0, 1);
+		break;
+	case SNDRV_PCM_TRIGGER_STOP:
+	case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
+		snd_emu10k1_fx8010_unregister_irq_handler(emu, pcm->irq); pcm->irq = NULL;
+		snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_trigger, 0, 0);
+		pcm->tram_pos = INITIAL_TRAM_POS(pcm->buffer_size);
+		pcm->tram_shift = 0;
+		break;
+	default:
+		result = -EINVAL;
+		break;
+	}
+      __err:
+	spin_unlock(&emu->reg_lock);
+	return result;
+}
+
+static snd_pcm_uframes_t snd_emu10k1_fx8010_playback_pointer(snd_pcm_substream_t * substream)
+{
+	emu10k1_t *emu = snd_pcm_substream_chip(substream);
+	snd_emu10k1_fx8010_pcm_t *pcm = &emu->fx8010.pcm[substream->number];
+	size_t ptr; /* byte pointer */
+
+	if (!snd_emu10k1_ptr_read(emu, emu->gpr_base + pcm->gpr_trigger, 0))
+		return 0;
+	ptr = snd_emu10k1_ptr_read(emu, emu->gpr_base + pcm->gpr_ptr, 0) << 2;
+	return snd_pcm_indirect_playback_pointer(substream, &pcm->pcm_rec, ptr);
+}
+
+static snd_pcm_hardware_t snd_emu10k1_fx8010_playback =
+{
+	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
+				 /* SNDRV_PCM_INFO_MMAP_VALID | */ SNDRV_PCM_INFO_PAUSE),
+	.formats =		SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S16_LE,
+	.rates =		SNDRV_PCM_RATE_48000,
+	.rate_min =		48000,
+	.rate_max =		48000,
+	.channels_min =		1,
+	.channels_max =		1,
+	.buffer_bytes_max =	(128*1024),
+	.period_bytes_min =	1024,
+	.period_bytes_max =	(128*1024),
+	.periods_min =		1,
+	.periods_max =		1024,
+	.fifo_size =		0,
+};
+
+static int snd_emu10k1_fx8010_playback_open(snd_pcm_substream_t * substream)
+{
+	emu10k1_t *emu = snd_pcm_substream_chip(substream);
+	snd_pcm_runtime_t *runtime = substream->runtime;
+	snd_emu10k1_fx8010_pcm_t *pcm = &emu->fx8010.pcm[substream->number];
+
+	runtime->hw = snd_emu10k1_fx8010_playback;
+	runtime->hw.channels_min = runtime->hw.channels_max = pcm->channels;
+	runtime->hw.period_bytes_max = (pcm->buffer_size * 2) / 2;
+	spin_lock_irq(&emu->reg_lock);
+	if (pcm->valid == 0) {
+		spin_unlock_irq(&emu->reg_lock);
+		return -ENODEV;
+	}
+	pcm->opened = 1;
+	spin_unlock_irq(&emu->reg_lock);
+	return 0;
+}
+
+static int snd_emu10k1_fx8010_playback_close(snd_pcm_substream_t * substream)
+{
+	emu10k1_t *emu = snd_pcm_substream_chip(substream);
+	snd_emu10k1_fx8010_pcm_t *pcm = &emu->fx8010.pcm[substream->number];
+
+	spin_lock_irq(&emu->reg_lock);
+	pcm->opened = 0;
+	spin_unlock_irq(&emu->reg_lock);
+	return 0;
+}
+
+static snd_pcm_ops_t snd_emu10k1_fx8010_playback_ops = {
+	.open =			snd_emu10k1_fx8010_playback_open,
+	.close =		snd_emu10k1_fx8010_playback_close,
+	.ioctl =		snd_pcm_lib_ioctl,
+	.hw_params =		snd_emu10k1_fx8010_playback_hw_params,
+	.hw_free =		snd_emu10k1_fx8010_playback_hw_free,
+	.prepare =		snd_emu10k1_fx8010_playback_prepare,
+	.trigger =		snd_emu10k1_fx8010_playback_trigger,
+	.pointer =		snd_emu10k1_fx8010_playback_pointer,
+	.ack =			snd_emu10k1_fx8010_playback_transfer,
+};
+
 static void snd_emu10k1_pcm_efx_free(snd_pcm_t *pcm)
 {
-	emu10k1_t *emu = snd_magic_cast(emu10k1_t, pcm->private_data, return);
+	emu10k1_t *emu = pcm->private_data;
 	emu->pcm_efx = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
@@ -1140,12 +1374,13 @@
 	if (rpcm)
 		*rpcm = NULL;
 
-	if ((err = snd_pcm_new(emu->card, "emu10k1 efx", device, 0, 1, &pcm)) < 0)
+	if ((err = snd_pcm_new(emu->card, "emu10k1 efx", device, 8, 1, &pcm)) < 0)
 		return err;
 
 	pcm->private_data = emu;
 	pcm->private_free = snd_emu10k1_pcm_efx_free;
 
+	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_emu10k1_fx8010_playback_ops);
 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_emu10k1_capture_efx_ops);
 
 	pcm->info_flags = 0;
diff -Nru a/sound/pci/emu10k1/emuproc.c b/sound/pci/emu10k1/emuproc.c
--- a/sound/pci/emu10k1/emuproc.c	2004-08-04 17:48:48 -07:00
+++ b/sound/pci/emu10k1/emuproc.c	2004-08-04 17:48:48 -07:00
@@ -71,31 +71,32 @@
 static void snd_emu10k1_proc_read(snd_info_entry_t *entry, 
 				  snd_info_buffer_t * buffer)
 {
-	static char *outputs[32] = {
-		/* 00 */ "PCM Left",
-		/* 01 */ "PCM Right",
-		/* 02 */ "PCM Surround Left",
-		/* 03 */ "PCM Surround Right",
-		/* 04 */ "MIDI Left",
-		/* 05 */ "MIDI Right",
-		/* 06 */ "PCM Center",
-		/* 07 */ "PCM LFE",
-		/* 08 */ "???",
-		/* 09 */ "???",
-		/* 10 */ "???",
-		/* 11 */ "???",
-		/* 12 */ "MIDI Reverb",
-		/* 13 */ "MIDI Chorus",
-		/* 14 */ "???",
+	/* FIXME - output names are in emufx.c too */
+	static char *creative_outs[32] = {
+		/* 00 */ "AC97 Left",
+		/* 01 */ "AC97 Right",
+		/* 02 */ "Optical IEC958 Left",
+		/* 03 */ "Optical IEC958 Right",
+		/* 04 */ "Center",
+		/* 05 */ "LFE",
+		/* 06 */ "Headphone Left",
+		/* 07 */ "Headphone Right",
+		/* 08 */ "Surround Left",
+		/* 09 */ "Surround Right",
+		/* 10 */ "PCM Capture Left",
+		/* 11 */ "PCM Capture Right",
+		/* 12 */ "MIC Capture",
+		/* 13 */ "AC97 Surround Left",
+		/* 14 */ "AC97 Surround Right",
 		/* 15 */ "???",
 		/* 16 */ "???",
-		/* 17 */ "???",
-		/* 18 */ "ADC Left / CDROM S/PDIF Left",
-		/* 19 */ "ADC Right / CDROM S/PDIF Right",
-		/* 20 */ "MIC / Zoom Video Left",
-		/* 21 */ "Zoom Video Right",
-		/* 22 */ "S/PDIF Left",
-		/* 23 */ "S/PDIF Right",
+		/* 17 */ "Analog Center",
+		/* 18 */ "Analog LFE",
+		/* 19 */ "???",
+		/* 20 */ "???",
+		/* 21 */ "???",
+		/* 22 */ "???",
+		/* 23 */ "???",
 		/* 24 */ "???",
 		/* 25 */ "???",
 		/* 26 */ "???",
@@ -105,9 +106,78 @@
 		/* 30 */ "???",
 		/* 31 */ "???"
 	};
-	emu10k1_t *emu = snd_magic_cast(emu10k1_t, entry->private_data, return);
+
+	static char *audigy_outs[64] = {
+		/* 00 */ "Digital Front Left",
+		/* 01 */ "Digital Front Right",
+		/* 02 */ "Digital Center",
+		/* 03 */ "Digital LEF",
+		/* 04 */ "Headphone Left",
+		/* 05 */ "Headphone Right",
+		/* 06 */ "Digital Rear Left",
+		/* 07 */ "Digital Rear Right",
+		/* 08 */ "Front Left",
+		/* 09 */ "Front Right",
+		/* 10 */ "Center",
+		/* 11 */ "LFE",
+		/* 12 */ "???",
+		/* 13 */ "???",
+		/* 14 */ "Rear Left",
+		/* 15 */ "Rear Right",
+		/* 16 */ "AC97 Front Left",
+		/* 17 */ "AC97 Front Right",
+		/* 18 */ "ADC Caputre Left",
+		/* 19 */ "ADC Capture Right",
+		/* 20 */ "???",
+		/* 21 */ "???",
+		/* 22 */ "???",
+		/* 23 */ "???",
+		/* 24 */ "???",
+		/* 25 */ "???",
+		/* 26 */ "???",
+		/* 27 */ "???",
+		/* 28 */ "???",
+		/* 29 */ "???",
+		/* 30 */ "???",
+		/* 31 */ "???",
+		/* 32 */ "???",
+		/* 33 */ "???",
+		/* 34 */ "???",
+		/* 35 */ "???",
+		/* 36 */ "???",
+		/* 37 */ "???",
+		/* 38 */ "???",
+		/* 39 */ "???",
+		/* 40 */ "???",
+		/* 41 */ "???",
+		/* 42 */ "???",
+		/* 43 */ "???",
+		/* 44 */ "???",
+		/* 45 */ "???",
+		/* 46 */ "???",
+		/* 47 */ "???",
+		/* 48 */ "???",
+		/* 49 */ "???",
+		/* 50 */ "???",
+		/* 51 */ "???",
+		/* 52 */ "???",
+		/* 53 */ "???",
+		/* 54 */ "???",
+		/* 55 */ "???",
+		/* 56 */ "???",
+		/* 57 */ "???",
+		/* 58 */ "???",
+		/* 59 */ "???",
+		/* 60 */ "???",
+		/* 61 */ "???",
+		/* 62 */ "???",
+		/* 33 */ "???"
+	};
+
+	emu10k1_t *emu = entry->private_data;
 	unsigned int val;
 	int nefx = emu->audigy ? 64 : 32;
+	char **outputs = emu->audigy ? audigy_outs : creative_outs;
 	int idx;
 	
 	snd_iprintf(buffer, "EMU10K1\n\n");
@@ -135,7 +205,7 @@
 	snd_iprintf(buffer, "\nCaptured FX Outputs   :\n");
 	for (idx = 0; idx < nefx; idx++) {
 		if (emu->efx_voices_mask[idx/32] & (1 << (idx%32)))
-			snd_iprintf(buffer, "  Output %02i [%s]\n", idx, outputs[idx%32]);
+			snd_iprintf(buffer, "  Output %02i [%s]\n", idx, outputs[idx]);
 	}
 	snd_iprintf(buffer, "\nAll FX Outputs        :\n");
 	for (idx = 0; idx < 32; idx++)
@@ -155,7 +225,7 @@
 				        snd_info_buffer_t * buffer)
 {
 	u32 pc;
-	emu10k1_t *emu = snd_magic_cast(emu10k1_t, entry->private_data, return);
+	emu10k1_t *emu = entry->private_data;
 
 	snd_iprintf(buffer, "FX8010 Instruction List '%s'\n", emu->fx8010.name);
 	snd_iprintf(buffer, "  Code dump      :\n");
@@ -194,7 +264,7 @@
 				    struct file *file, char __user *buf, long count)
 {
 	long size;
-	emu10k1_t *emu = snd_magic_cast(emu10k1_t, entry->private_data, return -ENXIO);
+	emu10k1_t *emu = entry->private_data;
 	unsigned int offset;
 	
 	if (!strcmp(entry->name, "fx8010_tram_addr")) {
diff -Nru a/sound/pci/emu10k1/io.c b/sound/pci/emu10k1/io.c
--- a/sound/pci/emu10k1/io.c	2004-08-04 17:48:48 -07:00
+++ b/sound/pci/emu10k1/io.c	2004-08-04 17:48:48 -07:00
@@ -231,7 +231,7 @@
 
 unsigned short snd_emu10k1_ac97_read(ac97_t *ac97, unsigned short reg)
 {
-	emu10k1_t *emu = snd_magic_cast(emu10k1_t, ac97->private_data, return -ENXIO);
+	emu10k1_t *emu = ac97->private_data;
 	unsigned long flags;
 	unsigned short val;
 
@@ -244,7 +244,7 @@
 
 void snd_emu10k1_ac97_write(ac97_t *ac97, unsigned short reg, unsigned short data)
 {
-	emu10k1_t *emu = snd_magic_cast(emu10k1_t, ac97->private_data, return);
+	emu10k1_t *emu = ac97->private_data;
 	unsigned long flags;
 
 	spin_lock_irqsave(&emu->emu_lock, flags);
diff -Nru a/sound/pci/emu10k1/irq.c b/sound/pci/emu10k1/irq.c
--- a/sound/pci/emu10k1/irq.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/emu10k1/irq.c	2004-08-04 17:48:49 -07:00
@@ -32,7 +32,7 @@
 
 irqreturn_t snd_emu10k1_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	emu10k1_t *emu = snd_magic_cast(emu10k1_t, dev_id, return IRQ_NONE);
+	emu10k1_t *emu = dev_id;
 	unsigned int status, orig_status;
 	int handled = 0;
 
diff -Nru a/sound/pci/emu10k1/memory.c b/sound/pci/emu10k1/memory.c
--- a/sound/pci/emu10k1/memory.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/emu10k1/memory.c	2004-08-04 17:48:49 -07:00
@@ -22,6 +22,7 @@
  */
 
 #include <sound/driver.h>
+#include <linux/pci.h>
 #include <linux/time.h>
 #include <sound/core.h>
 #include <sound/emu10k1.h>
@@ -291,7 +292,7 @@
 snd_emu10k1_alloc_pages(emu10k1_t *emu, snd_pcm_substream_t *substream)
 {
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	struct snd_sg_buf *sgbuf = runtime->dma_private;
+	struct snd_sg_buf *sgbuf = snd_pcm_substream_sgbuf(substream);
 	snd_util_memhdr_t *hdr;
 	emu10k1_memblk_t *blk;
 	int page, err, idx;
@@ -441,10 +442,11 @@
 	get_single_page_range(emu->memhdr, blk, &first_page, &last_page);
 	/* allocate kernel pages */
 	for (page = first_page; page <= last_page; page++) {
-		if (snd_dma_alloc_pages(&emu->dma_dev, PAGE_SIZE, &dmab) < 0)
+		if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(emu->pci),
+					PAGE_SIZE, &dmab) < 0)
 			goto __fail;
 		if (! is_valid_page(emu, dmab.addr)) {
-			snd_dma_free_pages(&emu->dma_dev, &dmab);
+			snd_dma_free_pages(&dmab);
 			goto __fail;
 		}
 		emu->page_addr_table[page] = dmab.addr;
@@ -459,7 +461,7 @@
 		dmab.area = emu->page_ptr_table[page];
 		dmab.addr = emu->page_addr_table[page];
 		dmab.bytes = PAGE_SIZE;
-		snd_dma_free_pages(&emu->dma_dev, &dmab);
+		snd_dma_free_pages(&dmab);
 		emu->page_addr_table[page] = 0;
 		emu->page_ptr_table[page] = NULL;
 	}
@@ -476,13 +478,15 @@
 	struct snd_dma_buffer dmab;
 
 	get_single_page_range(emu->memhdr, blk, &first_page, &last_page);
+	dmab.dev.type = SNDRV_DMA_TYPE_DEV;
+	dmab.dev.dev = snd_dma_pci_data(emu->pci);
 	for (page = first_page; page <= last_page; page++) {
 		if (emu->page_ptr_table[page] == NULL)
 			continue;
 		dmab.area = emu->page_ptr_table[page];
 		dmab.addr = emu->page_addr_table[page];
 		dmab.bytes = PAGE_SIZE;
-		snd_dma_free_pages(&emu->dma_dev, &dmab);
+		snd_dma_free_pages(&dmab);
 		emu->page_addr_table[page] = 0;
 		emu->page_ptr_table[page] = NULL;
 	}
diff -Nru a/sound/pci/ens1370.c b/sound/pci/ens1370.c
--- a/sound/pci/ens1370.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/ens1370.c	2004-08-04 17:48:49 -07:00
@@ -40,8 +40,6 @@
 #include <sound/initval.h>
 #include <sound/asoundef.h>
 
-#define chip_t ensoniq_t
-
 #ifndef CHIP1371
 #undef CHIP1370
 #define CHIP1370
@@ -56,15 +54,14 @@
 
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>, Thomas Sailer <sailer@ife.ee.ethz.ch>");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
 #ifdef CHIP1370
 MODULE_DESCRIPTION("Ensoniq AudioPCI ES1370");
-MODULE_DEVICES("{{Ensoniq,AudioPCI-97 ES1370},"
+MODULE_SUPPORTED_DEVICE("{{Ensoniq,AudioPCI-97 ES1370},"
 	        "{Creative Labs,SB PCI64/128 (ES1370)}}");
 #endif
 #ifdef CHIP1371
 MODULE_DESCRIPTION("Ensoniq/Creative AudioPCI ES1371+");
-MODULE_DEVICES("{{Ensoniq,AudioPCI ES1371/73},"
+MODULE_SUPPORTED_DEVICE("{{Ensoniq,AudioPCI ES1371/73},"
 		"{Ensoniq,AudioPCI ES1373},"
 		"{Creative Labs,Ectiva EV1938},"
 		"{Creative Labs,SB PCI64/128 (ES1371/73)},"
@@ -90,22 +87,17 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for Ensoniq AudioPCI soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for Ensoniq AudioPCI soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable Ensoniq AudioPCI soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 #ifdef SUPPORT_JOYSTICK
 #ifdef CHIP1371
 module_param_array(joystick_port, int, boot_devs, 0444);
 MODULE_PARM_DESC(joystick_port, "Joystick port address.");
-MODULE_PARM_SYNTAX(joystick_port, SNDRV_ENABLED ",allows:{{0},{1},{0x200},{0x208},{0x210},{0x218}},dialog:list");
 #else
 module_param_array(joystick, bool, boot_devs, 0444);
 MODULE_PARM_DESC(joystick, "Enable joystick.");
-MODULE_PARM_SYNTAX(joystick, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC);
 #endif
 #endif /* SUPPORT_JOYSTICK */
 
@@ -388,7 +380,6 @@
 	unsigned long capture3size;
 
 	unsigned long port;
-	struct resource *res_port;
 	unsigned int mode;
 	unsigned int uartm;	/* UART mode */
 
@@ -435,7 +426,6 @@
 	unsigned int spdif_stream;
 
 #ifdef CHIP1370
-	struct snd_dma_device dma_dev;
 	struct snd_dma_buffer dma_bug;
 #endif
 
@@ -581,7 +571,7 @@
 static void snd_es1370_codec_write(ak4531_t *ak4531,
 				   unsigned short reg, unsigned short val)
 {
-	ensoniq_t *ensoniq = snd_magic_cast(ensoniq_t, ak4531->private_data, return);
+	ensoniq_t *ensoniq = ak4531->private_data;
 	unsigned long flags;
 	unsigned long end_time = jiffies + HZ / 10;
 
@@ -611,7 +601,7 @@
 static void snd_es1371_codec_write(ac97_t *ac97,
 				   unsigned short reg, unsigned short val)
 {
-	ensoniq_t *ensoniq = snd_magic_cast(ensoniq_t, ac97->private_data, return);
+	ensoniq_t *ensoniq = ac97->private_data;
 	unsigned long flags;
 	unsigned int t, x;
 
@@ -649,7 +639,7 @@
 static unsigned short snd_es1371_codec_read(ac97_t *ac97,
 					    unsigned short reg)
 {
-	ensoniq_t *ensoniq = snd_magic_cast(ensoniq_t, ac97->private_data, return -ENXIO);
+	ensoniq_t *ensoniq = ac97->private_data;
 	unsigned long flags;
 	unsigned int t, x, fail = 0;
 
@@ -844,7 +834,6 @@
 
 static int snd_ensoniq_playback1_prepare(snd_pcm_substream_t * substream)
 {
-	unsigned long flags;
 	ensoniq_t *ensoniq = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
 	unsigned int mode = 0;
@@ -855,7 +844,7 @@
 		mode |= 0x02;
 	if (runtime->channels > 1)
 		mode |= 0x01;
-	spin_lock_irqsave(&ensoniq->reg_lock, flags);
+	spin_lock_irq(&ensoniq->reg_lock);
 	ensoniq->ctrl &= ~ES_DAC1_EN;
 	outl(ensoniq->ctrl, ES_REG(ensoniq, CONTROL));
 	outl(ES_MEM_PAGEO(ES_PAGE_DAC), ES_REG(ensoniq, MEM_PAGE));
@@ -878,13 +867,12 @@
 	snd_es1371_dac1_rate(ensoniq, runtime->rate);
 #endif
 	outl(ensoniq->ctrl, ES_REG(ensoniq, CONTROL));
-	spin_unlock_irqrestore(&ensoniq->reg_lock, flags);
+	spin_unlock_irq(&ensoniq->reg_lock);
 	return 0;
 }
 
 static int snd_ensoniq_playback2_prepare(snd_pcm_substream_t * substream)
 {
-	unsigned long flags;
 	ensoniq_t *ensoniq = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
 	unsigned int mode = 0;
@@ -895,7 +883,7 @@
 		mode |= 0x02;
 	if (runtime->channels > 1)
 		mode |= 0x01;
-	spin_lock_irqsave(&ensoniq->reg_lock, flags);
+	spin_lock_irq(&ensoniq->reg_lock);
 	ensoniq->ctrl &= ~ES_DAC2_EN;
 	outl(ensoniq->ctrl, ES_REG(ensoniq, CONTROL));
 	outl(ES_MEM_PAGEO(ES_PAGE_DAC), ES_REG(ensoniq, MEM_PAGE));
@@ -917,13 +905,12 @@
 	snd_es1371_dac2_rate(ensoniq, runtime->rate);
 #endif
 	outl(ensoniq->ctrl, ES_REG(ensoniq, CONTROL));
-	spin_unlock_irqrestore(&ensoniq->reg_lock, flags);
+	spin_unlock_irq(&ensoniq->reg_lock);
 	return 0;
 }
 
 static int snd_ensoniq_capture_prepare(snd_pcm_substream_t * substream)
 {
-	unsigned long flags;
 	ensoniq_t *ensoniq = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
 	unsigned int mode = 0;
@@ -934,7 +921,7 @@
 		mode |= 0x02;
 	if (runtime->channels > 1)
 		mode |= 0x01;
-	spin_lock_irqsave(&ensoniq->reg_lock, flags);
+	spin_lock_irq(&ensoniq->reg_lock);
 	ensoniq->ctrl &= ~ES_ADC_EN;
 	outl(ensoniq->ctrl, ES_REG(ensoniq, CONTROL));
 	outl(ES_MEM_PAGEO(ES_PAGE_ADC), ES_REG(ensoniq, MEM_PAGE));
@@ -954,7 +941,7 @@
 	snd_es1371_adc_rate(ensoniq, runtime->rate);
 #endif
 	outl(ensoniq->ctrl, ES_REG(ensoniq, CONTROL));
-	spin_unlock_irqrestore(&ensoniq->reg_lock, flags);
+	spin_unlock_irq(&ensoniq->reg_lock);
 	return 0;
 }
 
@@ -1151,31 +1138,29 @@
 
 static int snd_ensoniq_playback2_close(snd_pcm_substream_t * substream)
 {
-	unsigned long flags;
 	ensoniq_t *ensoniq = snd_pcm_substream_chip(substream);
 
 	ensoniq->playback2_substream = NULL;
-	spin_lock_irqsave(&ensoniq->reg_lock, flags);
+	spin_lock_irq(&ensoniq->reg_lock);
 #ifdef CHIP1370
 	ensoniq->u.es1370.pclkdiv_lock &= ~ES_MODE_PLAY2;
 #endif
 	ensoniq->mode &= ~ES_MODE_PLAY2;
-	spin_unlock_irqrestore(&ensoniq->reg_lock, flags);
+	spin_unlock_irq(&ensoniq->reg_lock);
 	return 0;
 }
 
 static int snd_ensoniq_capture_close(snd_pcm_substream_t * substream)
 {
-	unsigned long flags;
 	ensoniq_t *ensoniq = snd_pcm_substream_chip(substream);
 
 	ensoniq->capture_substream = NULL;
-	spin_lock_irqsave(&ensoniq->reg_lock, flags);
+	spin_lock_irq(&ensoniq->reg_lock);
 #ifdef CHIP1370
 	ensoniq->u.es1370.pclkdiv_lock &= ~ES_MODE_CAPTURE;
 #endif
 	ensoniq->mode &= ~ES_MODE_CAPTURE;
-	spin_unlock_irqrestore(&ensoniq->reg_lock, flags);
+	spin_unlock_irq(&ensoniq->reg_lock);
 	return 0;
 }
 
@@ -1214,7 +1199,7 @@
 
 static void snd_ensoniq_pcm_free(snd_pcm_t *pcm)
 {
-	ensoniq_t *ensoniq = snd_magic_cast(ensoniq_t, pcm->private_data, return);
+	ensoniq_t *ensoniq = pcm->private_data;
 	ensoniq->pcm1 = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
@@ -1261,7 +1246,7 @@
 
 static void snd_ensoniq_pcm_free2(snd_pcm_t *pcm)
 {
-	ensoniq_t *ensoniq = snd_magic_cast(ensoniq_t, pcm->private_data, return);
+	ensoniq_t *ensoniq = pcm->private_data;
 	ensoniq->pcm2 = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
@@ -1565,7 +1550,7 @@
 
 static void snd_ensoniq_mixer_free_ac97(ac97_t *ac97)
 {
-	ensoniq_t *ensoniq = snd_magic_cast(ensoniq_t, ac97->private_data, return);
+	ensoniq_t *ensoniq = ac97->private_data;
 	ensoniq->u.es1371.ac97 = NULL;
 }
 
@@ -1585,14 +1570,15 @@
 static int snd_ensoniq_1371_mixer(ensoniq_t * ensoniq)
 {
 	snd_card_t *card = ensoniq->card;
-	ac97_bus_t bus, *pbus;
-	ac97_t ac97;
+	ac97_bus_t *pbus;
+	ac97_template_t ac97;
 	int err, idx;
+	static ac97_bus_ops_t ops = {
+		.write = snd_es1371_codec_write,
+		.read = snd_es1371_codec_read,
+	};
 
-	memset(&bus, 0, sizeof(bus));
-	bus.write = snd_es1371_codec_write;
-	bus.read = snd_es1371_codec_read;
-	if ((err = snd_ac97_bus(card, &bus, &pbus)) < 0)
+	if ((err = snd_ac97_bus(card, 0, &ops, NULL, &pbus)) < 0)
 		return err;
 
 	memset(&ac97, 0, sizeof(ac97));
@@ -1663,30 +1649,28 @@
 static int snd_ensoniq_control_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
 	ensoniq_t *ensoniq = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	int mask = kcontrol->private_value;
 	
-	spin_lock_irqsave(&ensoniq->reg_lock, flags);
+	spin_lock_irq(&ensoniq->reg_lock);
 	ucontrol->value.integer.value[0] = ensoniq->ctrl & mask ? 1 : 0;
-	spin_unlock_irqrestore(&ensoniq->reg_lock, flags);
+	spin_unlock_irq(&ensoniq->reg_lock);
 	return 0;
 }
 
 static int snd_ensoniq_control_put(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
 	ensoniq_t *ensoniq = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	int mask = kcontrol->private_value;
 	unsigned int nval;
 	int change;
 	
 	nval = ucontrol->value.integer.value[0] ? mask : 0;
-	spin_lock_irqsave(&ensoniq->reg_lock, flags);
+	spin_lock_irq(&ensoniq->reg_lock);
 	change = (ensoniq->ctrl & mask) != nval;
 	ensoniq->ctrl &= ~mask;
 	ensoniq->ctrl |= nval;
 	outl(ensoniq->ctrl, ES_REG(ensoniq, CONTROL));
-	spin_unlock_irqrestore(&ensoniq->reg_lock, flags);
+	spin_unlock_irq(&ensoniq->reg_lock);
 	return change;
 }
 
@@ -1703,7 +1687,7 @@
 
 static void snd_ensoniq_mixer_free_ak4531(ak4531_t *ak4531)
 {
-	ensoniq_t *ensoniq = snd_magic_cast(ensoniq_t, ak4531->private_data, return);
+	ensoniq_t *ensoniq = ak4531->private_data;
 	ensoniq->u.es1370.ak4531 = NULL;
 }
 
@@ -1785,7 +1769,7 @@
 static void snd_ensoniq_proc_read(snd_info_entry_t *entry, 
 				  snd_info_buffer_t * buffer)
 {
-	ensoniq_t *ensoniq = snd_magic_cast(ensoniq_t, entry->private_data, return);
+	ensoniq_t *ensoniq = entry->private_data;
 
 #ifdef CHIP1370
 	snd_iprintf(buffer, "Ensoniq AudioPCI ES1370\n\n");
@@ -1833,21 +1817,18 @@
       __hw_end:
 #ifdef CHIP1370
 	if (ensoniq->dma_bug.area)
-		snd_dma_free_pages(&ensoniq->dma_dev, &ensoniq->dma_bug);
+		snd_dma_free_pages(&ensoniq->dma_bug);
 #endif
-	if (ensoniq->res_port) {
-		release_resource(ensoniq->res_port);
-		kfree_nocheck(ensoniq->res_port);
-	}
 	if (ensoniq->irq >= 0)
 		free_irq(ensoniq->irq, (void *)ensoniq);
-	snd_magic_kfree(ensoniq);
+	pci_release_regions(ensoniq->pci);
+	kfree(ensoniq);
 	return 0;
 }
 
 static int snd_ensoniq_dev_free(snd_device_t *device)
 {
-	ensoniq_t *ensoniq = snd_magic_cast(ensoniq_t, device->device_data, return -ENXIO);
+	ensoniq_t *ensoniq = device->device_data;
 	return snd_ensoniq_free(ensoniq);
 }
 
@@ -1894,19 +1875,18 @@
 	*rensoniq = NULL;
 	if ((err = pci_enable_device(pci)) < 0)
 		return err;
-	ensoniq = snd_magic_kcalloc(ensoniq_t, 0, GFP_KERNEL);
+	ensoniq = kcalloc(1, sizeof(*ensoniq), GFP_KERNEL);
 	if (ensoniq == NULL)
 		return -ENOMEM;
 	spin_lock_init(&ensoniq->reg_lock);
 	ensoniq->card = card;
 	ensoniq->pci = pci;
 	ensoniq->irq = -1;
-	ensoniq->port = pci_resource_start(pci, 0);
-	if ((ensoniq->res_port = request_region(ensoniq->port, 0x40, "Ensoniq AudioPCI")) == NULL) {
-		snd_printk("unable to grab ports 0x%lx-0x%lx\n", ensoniq->port, ensoniq->port + 0x40 - 1);
-		snd_ensoniq_free(ensoniq);
-		return -EBUSY;
+	if ((err = pci_request_regions(pci, "Ensoniq AudioPCI")) < 0) {
+		kfree(ensoniq);
+		return err;
 	}
+	ensoniq->port = pci_resource_start(pci, 0);
 	if (request_irq(pci->irq, snd_audiopci_interrupt, SA_INTERRUPT|SA_SHIRQ, "Ensoniq AudioPCI", (void *)ensoniq)) {
 		snd_printk("unable to grab IRQ %d\n", pci->irq);
 		snd_ensoniq_free(ensoniq);
@@ -1914,10 +1894,8 @@
 	}
 	ensoniq->irq = pci->irq;
 #ifdef CHIP1370
-	memset(&ensoniq->dma_dev, 0, sizeof(ensoniq->dma_dev));
-	ensoniq->dma_dev.type = SNDRV_DMA_TYPE_DEV;
-	ensoniq->dma_dev.dev = snd_dma_pci_data(pci);
-	if (snd_dma_alloc_pages(&ensoniq->dma_dev, 16, &ensoniq->dma_bug) < 0) {
+	if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci),
+				16, &ensoniq->dma_bug) < 0) {
 		snd_printk("unable to allocate space for phantom area - dma_bug\n");
 		snd_ensoniq_free(ensoniq);
 		return -EBUSY;
@@ -2074,10 +2052,9 @@
 
 static int snd_ensoniq_midi_input_open(snd_rawmidi_substream_t * substream)
 {
-	unsigned long flags;
-	ensoniq_t *ensoniq = snd_magic_cast(ensoniq_t, substream->rmidi->private_data, return -ENXIO);
+	ensoniq_t *ensoniq = substream->rmidi->private_data;
 
-	spin_lock_irqsave(&ensoniq->reg_lock, flags);
+	spin_lock_irq(&ensoniq->reg_lock);
 	ensoniq->uartm |= ES_MODE_INPUT;
 	ensoniq->midi_input = substream;
 	if (!(ensoniq->uartm & ES_MODE_OUTPUT)) {
@@ -2085,16 +2062,15 @@
 		outb(ensoniq->uartc = 0, ES_REG(ensoniq, UART_CONTROL));
 		outl(ensoniq->ctrl |= ES_UART_EN, ES_REG(ensoniq, CONTROL));
 	}
-	spin_unlock_irqrestore(&ensoniq->reg_lock, flags);
+	spin_unlock_irq(&ensoniq->reg_lock);
 	return 0;
 }
 
 static int snd_ensoniq_midi_input_close(snd_rawmidi_substream_t * substream)
 {
-	unsigned long flags;
-	ensoniq_t *ensoniq = snd_magic_cast(ensoniq_t, substream->rmidi->private_data, return -ENXIO);
+	ensoniq_t *ensoniq = substream->rmidi->private_data;
 
-	spin_lock_irqsave(&ensoniq->reg_lock, flags);
+	spin_lock_irq(&ensoniq->reg_lock);
 	if (!(ensoniq->uartm & ES_MODE_OUTPUT)) {
 		outb(ensoniq->uartc = 0, ES_REG(ensoniq, UART_CONTROL));
 		outl(ensoniq->ctrl &= ~ES_UART_EN, ES_REG(ensoniq, CONTROL));
@@ -2103,16 +2079,15 @@
 	}
 	ensoniq->midi_input = NULL;
 	ensoniq->uartm &= ~ES_MODE_INPUT;
-	spin_unlock_irqrestore(&ensoniq->reg_lock, flags);
+	spin_unlock_irq(&ensoniq->reg_lock);
 	return 0;
 }
 
 static int snd_ensoniq_midi_output_open(snd_rawmidi_substream_t * substream)
 {
-	unsigned long flags;
-	ensoniq_t *ensoniq = snd_magic_cast(ensoniq_t, substream->rmidi->private_data, return -ENXIO);
+	ensoniq_t *ensoniq = substream->rmidi->private_data;
 
-	spin_lock_irqsave(&ensoniq->reg_lock, flags);
+	spin_lock_irq(&ensoniq->reg_lock);
 	ensoniq->uartm |= ES_MODE_OUTPUT;
 	ensoniq->midi_output = substream;
 	if (!(ensoniq->uartm & ES_MODE_INPUT)) {
@@ -2120,16 +2095,15 @@
 		outb(ensoniq->uartc = 0, ES_REG(ensoniq, UART_CONTROL));
 		outl(ensoniq->ctrl |= ES_UART_EN, ES_REG(ensoniq, CONTROL));
 	}
-	spin_unlock_irqrestore(&ensoniq->reg_lock, flags);
+	spin_unlock_irq(&ensoniq->reg_lock);
 	return 0;
 }
 
 static int snd_ensoniq_midi_output_close(snd_rawmidi_substream_t * substream)
 {
-	unsigned long flags;
-	ensoniq_t *ensoniq = snd_magic_cast(ensoniq_t, substream->rmidi->private_data, return -ENXIO);
+	ensoniq_t *ensoniq = substream->rmidi->private_data;
 
-	spin_lock_irqsave(&ensoniq->reg_lock, flags);
+	spin_lock_irq(&ensoniq->reg_lock);
 	if (!(ensoniq->uartm & ES_MODE_INPUT)) {
 		outb(ensoniq->uartc = 0, ES_REG(ensoniq, UART_CONTROL));
 		outl(ensoniq->ctrl &= ~ES_UART_EN, ES_REG(ensoniq, CONTROL));
@@ -2138,14 +2112,14 @@
 	}
 	ensoniq->midi_output = NULL;
 	ensoniq->uartm &= ~ES_MODE_OUTPUT;
-	spin_unlock_irqrestore(&ensoniq->reg_lock, flags);
+	spin_unlock_irq(&ensoniq->reg_lock);
 	return 0;
 }
 
 static void snd_ensoniq_midi_input_trigger(snd_rawmidi_substream_t * substream, int up)
 {
 	unsigned long flags;
-	ensoniq_t *ensoniq = snd_magic_cast(ensoniq_t, substream->rmidi->private_data, return);
+	ensoniq_t *ensoniq = substream->rmidi->private_data;
 	int idx;
 
 	spin_lock_irqsave(&ensoniq->reg_lock, flags);
@@ -2169,7 +2143,7 @@
 static void snd_ensoniq_midi_output_trigger(snd_rawmidi_substream_t * substream, int up)
 {
 	unsigned long flags;
-	ensoniq_t *ensoniq = snd_magic_cast(ensoniq_t, substream->rmidi->private_data, return);
+	ensoniq_t *ensoniq = substream->rmidi->private_data;
 	unsigned char byte;
 
 	spin_lock_irqsave(&ensoniq->reg_lock, flags);
@@ -2240,7 +2214,7 @@
 
 static irqreturn_t snd_audiopci_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	ensoniq_t *ensoniq = snd_magic_cast(ensoniq_t, dev_id, return IRQ_NONE);
+	ensoniq_t *ensoniq = dev_id;
 	unsigned int status, sctrl;
 
 	if (ensoniq == NULL)
diff -Nru a/sound/pci/es1938.c b/sound/pci/es1938.c
--- a/sound/pci/es1938.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/es1938.c	2004-08-04 17:48:49 -07:00
@@ -54,6 +54,7 @@
 #include <linux/slab.h>
 #include <linux/gameport.h>
 #include <linux/moduleparam.h>
+#include <linux/delay.h>
 #include <sound/core.h>
 #include <sound/control.h>
 #include <sound/pcm.h>
@@ -63,13 +64,10 @@
 
 #include <asm/io.h>
 
-#define chip_t es1938_t
-
 MODULE_AUTHOR("Jaromir Koutek <miri@punknet.cz>");
 MODULE_DESCRIPTION("ESS Solo-1");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{ESS,ES1938},"
+MODULE_SUPPORTED_DEVICE("{{ESS,ES1938},"
                 "{ESS,ES1946},"
                 "{ESS,ES1969},"
 		"{TerraTec,128i PCI}}");
@@ -88,13 +86,10 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for ESS Solo-1 soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for ESS Solo-1 soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable ESS Solo-1 soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 
 #define SLIO_REG(chip, x) ((chip)->io_port + ESSIO_REG_##x)
 
@@ -206,15 +201,10 @@
 	int irq;
 
 	unsigned long io_port;
-	struct resource *res_io_port;
 	unsigned long sb_port;
-	struct resource *res_sb_port;
 	unsigned long vc_port;
-	struct resource *res_vc_port;
 	unsigned long mpu_port;
-	struct resource *res_mpu_port;
 	unsigned long game_port;
-	struct resource *res_game_port;
 	unsigned long ddma_port;
 
 	unsigned char irqmask;
@@ -573,7 +563,12 @@
 	case SNDRV_PCM_TRIGGER_START:
 		/* According to the documentation this should be:
 		   0x13 but that value may randomly swap stereo channels */
+                snd_es1938_mixer_write(chip, ESSSB_IREG_AUDIO2CONTROL1, 0x92);
+                udelay(10);
 		snd_es1938_mixer_write(chip, ESSSB_IREG_AUDIO2CONTROL1, 0x93);
+                /* This two stage init gives the FIFO -> DAC connection time to
+                 * settle before first data from DMA flows in.  This should ensure
+                 * no swapping of stereo channels.  Report a bug if otherwise :-) */
 		outb(0x0a, SLIO_REG(chip, AUDIO2MODE));
 		chip->active |= DAC2;
 		break;
@@ -690,6 +685,8 @@
 
 	chip->dma2_shift = 2 - mono - is8;
 
+        snd_es1938_reset_fifo(chip);
+
 	/* set clock and counters */
         snd_es1938_rate_set(chip, substream, DAC2);
 
@@ -874,9 +871,9 @@
 	.rate_max =		48000,
 	.channels_min =		1,
 	.channels_max =		2,
-	.buffer_bytes_max =	65536,
+        .buffer_bytes_max =	0x8000,       /* DMA controller screws on higher values */
 	.period_bytes_min =	64,
-	.period_bytes_max =	65536,
+	.period_bytes_max =	0x8000,
 	.periods_min =		1,
 	.periods_max =		1024,
 	.fifo_size =		256,
@@ -896,9 +893,9 @@
 	.rate_max =		48000,
 	.channels_min =		1,
 	.channels_max =		2,
-	.buffer_bytes_max =	65536,
+        .buffer_bytes_max =	0x8000,       /* DMA controller screws on higher values */
 	.period_bytes_min =	64,
-	.period_bytes_max =	65536,
+	.period_bytes_max =	0x8000,
 	.periods_min =		1,
 	.periods_max =		1024,
 	.fifo_size =		256,
@@ -1129,7 +1126,7 @@
 
 static void snd_es1938_hwv_free(snd_kcontrol_t *kcontrol)
 {
-	es1938_t *chip = snd_magic_cast(es1938_t, _snd_kcontrol_chip(kcontrol), return);
+	es1938_t *chip = snd_kcontrol_chip(kcontrol);
 	chip->master_volume = NULL;
 	chip->master_switch = NULL;
 	chip->hw_volume = NULL;
@@ -1348,35 +1345,16 @@
 	if (chip->gameport.io)
 		gameport_unregister_port(&chip->gameport);
 #endif
-	if (chip->res_io_port) {
-		release_resource(chip->res_io_port);
-		kfree_nocheck(chip->res_io_port);
-	}
-	if (chip->res_sb_port) {
-		release_resource(chip->res_sb_port);
-		kfree_nocheck(chip->res_sb_port);
-	}
-	if (chip->res_vc_port) {
-		release_resource(chip->res_vc_port);
-		kfree_nocheck(chip->res_vc_port);
-	}
-	if (chip->res_mpu_port) {
-		release_resource(chip->res_mpu_port);
-		kfree_nocheck(chip->res_mpu_port);
-	}
-	if (chip->res_game_port) {
-		release_resource(chip->res_game_port);
-		kfree_nocheck(chip->res_game_port);
-	}
 	if (chip->irq >= 0)
 		free_irq(chip->irq, (void *)chip);
-	snd_magic_kfree(chip);
+	pci_release_regions(chip->pci);
+	kfree(chip);
 	return 0;
 }
 
 static int snd_es1938_dev_free(snd_device_t *device)
 {
-	es1938_t *chip = snd_magic_cast(es1938_t, device->device_data, return -ENXIO);
+	es1938_t *chip = device->device_data;
 	return snd_es1938_free(chip);
 }
 
@@ -1402,43 +1380,22 @@
                 return -ENXIO;
         }
 
-	chip = snd_magic_kcalloc(es1938_t, 0, GFP_KERNEL);
+	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
 	if (chip == NULL)
 		return -ENOMEM;
 	spin_lock_init(&chip->reg_lock);
 	spin_lock_init(&chip->mixer_lock);
 	chip->card = card;
 	chip->pci = pci;
-	chip->io_port = pci_resource_start(pci, 0);
-	if ((chip->res_io_port = request_region(chip->io_port, 8, "ESS Solo-1")) == NULL) {
-		snd_printk("unable to grab region 0x%lx-0x%lx\n", chip->io_port, chip->io_port + 8 - 1);
-		snd_es1938_free(chip);
-		return -EBUSY;
+	if ((err = pci_request_regions(pci, "ESS Solo-1")) < 0) {
+		kfree(chip);
+		return err;
 	}
+	chip->io_port = pci_resource_start(pci, 0);
 	chip->sb_port = pci_resource_start(pci, 1);
-	if ((chip->res_sb_port = request_region(chip->sb_port, 0x10, "ESS Solo-1 SB")) == NULL) {
-		snd_printk("unable to grab SB region 0x%lx-0x%lx\n", chip->sb_port, chip->sb_port + 0x10 - 1);
-		snd_es1938_free(chip);
-		return -EBUSY;
-	}
 	chip->vc_port = pci_resource_start(pci, 2);
-	if ((chip->res_vc_port = request_region(chip->vc_port, 0x10, "ESS Solo-1 VC (DMA)")) == NULL) {
-		snd_printk("unable to grab VC (DMA) region 0x%lx-0x%lx\n", chip->vc_port, chip->vc_port + 0x10 - 1);
-		snd_es1938_free(chip);
-		return -EBUSY;
-	}
 	chip->mpu_port = pci_resource_start(pci, 3);
-	if ((chip->res_mpu_port = request_region(chip->mpu_port, 4, "ESS Solo-1 MIDI")) == NULL) {
-		snd_printk("unable to grab MIDI region 0x%lx-0x%lx\n", chip->mpu_port, chip->mpu_port + 4 - 1);
-		snd_es1938_free(chip);
-		return -EBUSY;
-	}
 	chip->game_port = pci_resource_start(pci, 4);
-	if ((chip->res_game_port = request_region(chip->game_port, 4, "ESS Solo-1 GAME")) == NULL) {
-		snd_printk("unable to grab GAME region 0x%lx-0x%lx\n", chip->game_port, chip->game_port + 4 - 1);
-		snd_es1938_free(chip);
-		return -EBUSY;
-	}
 	if (request_irq(pci->irq, snd_es1938_interrupt, SA_INTERRUPT|SA_SHIRQ, "ES1938", (void *)chip)) {
 		snd_printk("unable to grab IRQ %d\n", pci->irq);
 		snd_es1938_free(chip);
@@ -1492,7 +1449,7 @@
  * -------------------------------------------------------------------- */
 static irqreturn_t snd_es1938_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	es1938_t *chip = snd_magic_cast(es1938_t, dev_id, return IRQ_NONE);
+	es1938_t *chip = dev_id;
 	unsigned char status, audiostatus;
 	int handled = 0;
 
diff -Nru a/sound/pci/es1968.c b/sound/pci/es1968.c
--- a/sound/pci/es1968.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/es1968.c	2004-08-04 17:48:49 -07:00
@@ -109,15 +109,12 @@
 #include <sound/ac97_codec.h>
 #include <sound/initval.h>
 
-#define chip_t es1968_t
-
 #define CARD_NAME "ESS Maestro1/2"
 #define DRIVER_NAME "ES1968"
 
 MODULE_DESCRIPTION("ESS Maestro");
-MODULE_CLASSES("{sound}");
 MODULE_LICENSE("GPL");
-MODULE_DEVICES("{{ESS,Maestro 2e},"
+MODULE_SUPPORTED_DEVICE("{{ESS,Maestro 2e},"
 		"{ESS,Maestro 2},"
 		"{ESS,Maestro 1},"
 		"{TerraTec,DMX}}");
@@ -142,35 +139,25 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(total_bufsize, int, boot_devs, 0444);
 MODULE_PARM_DESC(total_bufsize, "Total buffer size in kB.");
-MODULE_PARM_SYNTAX(total_bufsize, SNDRV_ENABLED ",allows:{{1,4096}},skill:advanced");
 module_param_array(pcm_substreams_p, int, boot_devs, 0444);
 MODULE_PARM_DESC(pcm_substreams_p, "PCM Playback substreams for " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(pcm_substreams_p, SNDRV_ENABLED ",allows:{{1,8}}");
 module_param_array(pcm_substreams_c, int, boot_devs, 0444);
 MODULE_PARM_DESC(pcm_substreams_c, "PCM Capture substreams for " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(pcm_substreams_c, SNDRV_ENABLED ",allows:{{0,8}}");
 module_param_array(clock, int, boot_devs, 0444);
 MODULE_PARM_DESC(clock, "Clock on " CARD_NAME " soundcard.  (0 = auto-detect)");
-MODULE_PARM_SYNTAX(clock, SNDRV_ENABLED);
 module_param_array(use_pm, int, boot_devs, 0444);
 MODULE_PARM_DESC(use_pm, "Toggle power-management.  (0 = off, 1 = on, 2 = auto)");
-MODULE_PARM_SYNTAX(use_pm, SNDRV_ENABLED ",allows:{{0,1,2}},default:2,skill:advanced");
 module_param_array(enable_mpu, int, boot_devs, 0444);
 MODULE_PARM_DESC(enable_mpu, "Enable MPU401.  (0 = off, 1 = on, 2 = auto)");
-MODULE_PARM_SYNTAX(enable_mpu, SNDRV_ENABLED ",allows:{{0,2}},default:2");
 #ifdef SUPPORT_JOYSTICK
 module_param_array(joystick, bool, boot_devs, 0444);
 MODULE_PARM_DESC(joystick, "Enable joystick.");
-MODULE_PARM_SYNTAX(joystick, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC);
 #endif
 
 
@@ -522,9 +509,7 @@
 
 /* DMA Hack! */
 struct snd_esm_memory {
-	char *buf;
-	unsigned long addr;
-	int size;
+	struct snd_dma_buffer buf;
 	int empty;	/* status */
 	struct list_head list;
 };
@@ -573,13 +558,11 @@
 	unsigned int clock;		/* clock */
 
 	/* buffer */
-	struct snd_dma_device dma_dev;
 	struct snd_dma_buffer dma;
 
 	/* Resources... */
 	int irq;
 	unsigned long io_port;
-	struct resource *res_io_port;
 	int type;
 	struct pci_dev *pci;
 	snd_card_t *card;
@@ -696,7 +679,7 @@
 
 static void snd_es1968_ac97_write(ac97_t *ac97, unsigned short reg, unsigned short val)
 {
-	es1968_t *chip = snd_magic_cast(es1968_t, ac97->private_data, return);
+	es1968_t *chip = ac97->private_data;
 	unsigned long flags;
 
 	spin_lock_irqsave(&chip->reg_lock, flags);
@@ -715,7 +698,7 @@
 static unsigned short snd_es1968_ac97_read(ac97_t *ac97, unsigned short reg)
 {
 	u16 data = 0;
-	es1968_t *chip = snd_magic_cast(es1968_t, ac97->private_data, return 0);
+	es1968_t *chip = ac97->private_data;
 	unsigned long flags;
 
 	spin_lock_irqsave(&chip->reg_lock, flags);
@@ -1078,10 +1061,10 @@
 	for (channel = 0; channel <= high_apu; channel++) {
 		apu = es->apu[channel];
 
-		snd_es1968_program_wavecache(chip, es, channel, es->memory->addr, 0);
+		snd_es1968_program_wavecache(chip, es, channel, es->memory->buf.addr, 0);
 
 		/* Offset to PCMBAR */
-		pa = es->memory->addr;
+		pa = es->memory->buf.addr;
 		pa -= chip->dma.addr;
 		pa >>= 1;	/* words */
 
@@ -1230,20 +1213,20 @@
 	/* input mixer (left/mono) */
 	/* parallel in crap, see maestro reg 0xC [8-11] */
 	init_capture_apu(chip, es, 2,
-			 es->mixbuf->addr, ESM_MIXBUF_SIZE/4, /* in words */
+			 es->mixbuf->buf.addr, ESM_MIXBUF_SIZE/4, /* in words */
 			 ESM_APU_INPUTMIXER, 0x14);
 	/* SRC (left/mono); get input from inputing apu */
-	init_capture_apu(chip, es, 0, es->memory->addr, size,
+	init_capture_apu(chip, es, 0, es->memory->buf.addr, size,
 			 ESM_APU_SRCONVERTOR, es->apu[2]);
 	if (es->fmt & ESS_FMT_STEREO) {
 		/* input mixer (right) */
 		init_capture_apu(chip, es, 3,
-				 es->mixbuf->addr + ESM_MIXBUF_SIZE/2,
+				 es->mixbuf->buf.addr + ESM_MIXBUF_SIZE/2,
 				 ESM_MIXBUF_SIZE/4, /* in words */
 				 ESM_APU_INPUTMIXER, 0x15);
 		/* SRC (right) */
 		init_capture_apu(chip, es, 1,
-				 es->memory->addr + size*2, size,
+				 es->memory->buf.addr + size*2, size,
 				 ESM_APU_SRCONVERTOR, es->apu[3]);
 	}
 
@@ -1281,7 +1264,7 @@
 {
 	es1968_t *chip = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	esschan_t *es = snd_magic_cast(esschan_t, runtime->private_data, return -ENXIO);
+	esschan_t *es = runtime->private_data;
 
 	es->dma_size = snd_pcm_lib_buffer_bytes(substream);
 	es->frag_size = snd_pcm_lib_period_bytes(substream);
@@ -1312,10 +1295,9 @@
 static int snd_es1968_pcm_trigger(snd_pcm_substream_t *substream, int cmd)
 {
 	es1968_t *chip = snd_pcm_substream_chip(substream);
-	esschan_t *es = snd_magic_cast(esschan_t, substream->runtime->private_data, return -ENXIO);
-	unsigned long flags;
+	esschan_t *es = substream->runtime->private_data;
 
-	spin_lock_irqsave(&chip->substream_lock, flags);
+	spin_lock(&chip->substream_lock);
 	switch (cmd) {
 	case SNDRV_PCM_TRIGGER_START:
 	case SNDRV_PCM_TRIGGER_RESUME:
@@ -1336,14 +1318,14 @@
 		snd_es1968_bob_dec(chip);
 		break;
 	}
-	spin_unlock_irqrestore(&chip->substream_lock, flags);
+	spin_unlock(&chip->substream_lock);
 	return 0;
 }
 
 static snd_pcm_uframes_t snd_es1968_pcm_pointer(snd_pcm_substream_t *substream)
 {
 	es1968_t *chip = snd_pcm_substream_chip(substream);
-	esschan_t *es = snd_magic_cast(esschan_t, substream->runtime->private_data, return -ENXIO);
+	esschan_t *es = substream->runtime->private_data;
 	unsigned int ptr;
 
 	ptr = snd_es1968_get_dma_ptr(chip, es) << es->wav_shift;
@@ -1408,8 +1390,8 @@
 	down(&chip->memory_mutex);
 	list_for_each(p, &chip->buf_list) {
 		esm_memory_t *buf = list_entry(p, esm_memory_t, list);
-		if (buf->empty && buf->size > max_size)
-			max_size = buf->size;
+		if (buf->empty && buf->buf.bytes > max_size)
+			max_size = buf->buf.bytes;
 	}
 	up(&chip->memory_mutex);
 	if (max_size >= 128*1024)
@@ -1427,24 +1409,25 @@
 	down(&chip->memory_mutex);
 	list_for_each(p, &chip->buf_list) {
 		buf = list_entry(p, esm_memory_t, list);
-		if (buf->empty && buf->size >= size)
+		if (buf->empty && buf->buf.bytes >= size)
 			goto __found;
 	}
 	up(&chip->memory_mutex);
 	return NULL;
 
 __found:
-	if (buf->size > size) {
+	if (buf->buf.bytes > size) {
 		esm_memory_t *chunk = kmalloc(sizeof(*chunk), GFP_KERNEL);
 		if (chunk == NULL) {
 			up(&chip->memory_mutex);
 			return NULL;
 		}
-		chunk->size = buf->size - size;
-		chunk->buf = buf->buf + size;
-		chunk->addr = buf->addr + size;
+		chunk->buf = buf->buf;
+		chunk->buf.bytes -= size;
+		chunk->buf.area += size;
+		chunk->buf.addr += size;
 		chunk->empty = 1;
-		buf->size = size;
+		buf->buf.bytes = size;
 		list_add(&chunk->list, &buf->list);
 	}
 	buf->empty = 0;
@@ -1462,7 +1445,7 @@
 	if (buf->list.prev != &chip->buf_list) {
 		chunk = list_entry(buf->list.prev, esm_memory_t, list);
 		if (chunk->empty) {
-			chunk->size += buf->size;
+			chunk->buf.bytes += buf->buf.bytes;
 			list_del(&buf->list);
 			kfree(buf);
 			buf = chunk;
@@ -1471,7 +1454,7 @@
 	if (buf->list.next != &chip->buf_list) {
 		chunk = list_entry(buf->list.next, esm_memory_t, list);
 		if (chunk->empty) {
-			buf->size += chunk->size;
+			buf->buf.bytes += chunk->buf.bytes;
 			list_del(&chunk->list);
 			kfree(chunk);
 		}
@@ -1485,7 +1468,7 @@
 
 	if (! chip->dma.area)
 		return;
-	snd_dma_free_reserved(&chip->dma_dev);
+	snd_dma_reserve_buf(&chip->dma, snd_dma_pci_buf_id(chip->pci));
 	while ((p = chip->buf_list.next) != &chip->buf_list) {
 		esm_memory_t *chunk = list_entry(p, esm_memory_t, list);
 		list_del(p);
@@ -1499,22 +1482,22 @@
 	int err;
 	esm_memory_t *chunk;
 
-	chip->dma_dev.type = SNDRV_DMA_TYPE_DEV;
-	chip->dma_dev.dev = snd_dma_pci_data(chip->pci);
-	chip->dma_dev.id = 0;
-	if (! snd_dma_get_reserved(&chip->dma_dev, &chip->dma)) {
-		err = snd_dma_alloc_pages_fallback(&chip->dma_dev, chip->total_bufsize, &chip->dma);
+	chip->dma.dev.type = SNDRV_DMA_TYPE_DEV;
+	chip->dma.dev.dev = snd_dma_pci_data(chip->pci);
+	if (! snd_dma_get_reserved_buf(&chip->dma, snd_dma_pci_buf_id(chip->pci))) {
+		err = snd_dma_alloc_pages_fallback(SNDRV_DMA_TYPE_DEV,
+						   snd_dma_pci_data(chip->pci),
+						   chip->total_bufsize, &chip->dma);
 		if (err < 0 || ! chip->dma.area) {
 			snd_printk("es1968: can't allocate dma pages for size %d\n",
 				   chip->total_bufsize);
 			return -ENOMEM;
 		}
 		if ((chip->dma.addr + chip->dma.bytes - 1) & ~((1 << 28) - 1)) {
-			snd_dma_free_pages(&chip->dma_dev, &chip->dma);
+			snd_dma_free_pages(&chip->dma);
 			snd_printk("es1968: DMA buffer beyond 256MB.\n");
 			return -ENOMEM;
 		}
-		snd_dma_set_reserved(&chip->dma_dev, &chip->dma);
 	}
 
 	INIT_LIST_HEAD(&chip->buf_list);
@@ -1525,9 +1508,10 @@
 		return -ENOMEM;
 	}
 	memset(chip->dma.area, 0, ESM_MEM_ALIGN);
-	chunk->buf = chip->dma.area + ESM_MEM_ALIGN;
-	chunk->addr = chip->dma.addr + ESM_MEM_ALIGN;
-	chunk->size = chip->dma.bytes - ESM_MEM_ALIGN;
+	chunk->buf = chip->dma;
+	chunk->buf.area += ESM_MEM_ALIGN;
+	chunk->buf.addr += ESM_MEM_ALIGN;
+	chunk->buf.bytes -= ESM_MEM_ALIGN;
 	chunk->empty = 1;
 	list_add(&chunk->list, &chip->buf_list);
 
@@ -1541,11 +1525,11 @@
 {
 	es1968_t *chip = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	esschan_t *chan = snd_magic_cast(esschan_t, runtime->private_data, return -ENXIO);
+	esschan_t *chan = runtime->private_data;
 	int size = params_buffer_bytes(hw_params);
 
 	if (chan->memory) {
-		if (chan->memory->size >= size) {
+		if (chan->memory->buf.bytes >= size) {
 			runtime->dma_bytes = size;
 			return 0;
 		}
@@ -1556,9 +1540,7 @@
 		// snd_printd("cannot allocate dma buffer: size = %d\n", size);
 		return -ENOMEM;
 	}
-	runtime->dma_bytes = size;
-	runtime->dma_area = chan->memory->buf;
-	runtime->dma_addr = chan->memory->addr;
+	snd_pcm_set_runtime_buffer(substream, &chan->memory->buf);
 	return 1; /* area was changed */
 }
 
@@ -1571,7 +1553,7 @@
 	
 	if (runtime->private_data == NULL)
 		return 0;
-	chan = snd_magic_cast(esschan_t, runtime->private_data, return -ENXIO);
+	chan = runtime->private_data;
 	if (chan->memory) {
 		snd_es1968_free_memory(chip, chan->memory);
 		chan->memory = NULL;
@@ -1616,14 +1598,13 @@
 	snd_pcm_runtime_t *runtime = substream->runtime;
 	esschan_t *es;
 	int apu1;
-	unsigned long flags;
 
 	/* search 2 APUs */
 	apu1 = snd_es1968_alloc_apu_pair(chip, ESM_APU_PCM_PLAY);
 	if (apu1 < 0)
 		return apu1;
 
-	es = snd_magic_kcalloc(esschan_t, 0, GFP_KERNEL);
+	es = kcalloc(1, sizeof(*es), GFP_KERNEL);
 	if (!es) {
 		snd_es1968_free_apu_pair(chip, apu1);
 		return -ENOMEM;
@@ -1645,9 +1626,9 @@
 	snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES,
 				   1024);
 #endif
-	spin_lock_irqsave(&chip->substream_lock, flags);
+	spin_lock_irq(&chip->substream_lock);
 	list_add(&es->list, &chip->substream_list);
-	spin_unlock_irqrestore(&chip->substream_lock, flags);
+	spin_unlock_irq(&chip->substream_lock);
 
 	return 0;
 }
@@ -1658,7 +1639,6 @@
 	es1968_t *chip = snd_pcm_substream_chip(substream);
 	esschan_t *es;
 	int apu1, apu2;
-	unsigned long flags;
 
 	apu1 = snd_es1968_alloc_apu_pair(chip, ESM_APU_PCM_CAPTURE);
 	if (apu1 < 0)
@@ -1669,7 +1649,7 @@
 		return apu2;
 	}
 	
-	es = snd_magic_kcalloc(esschan_t, 0, GFP_KERNEL);
+	es = kcalloc(1, sizeof(*es), GFP_KERNEL);
 	if (!es) {
 		snd_es1968_free_apu_pair(chip, apu1);
 		snd_es1968_free_apu_pair(chip, apu2);
@@ -1692,10 +1672,10 @@
 	if ((es->mixbuf = snd_es1968_new_memory(chip, ESM_MIXBUF_SIZE)) == NULL) {
 		snd_es1968_free_apu_pair(chip, apu1);
 		snd_es1968_free_apu_pair(chip, apu2);
-		snd_magic_kfree(es);
+		kfree(es);
                 return -ENOMEM;
         }
-	memset(es->mixbuf->buf, 0, ESM_MIXBUF_SIZE);
+	memset(es->mixbuf->buf.area, 0, ESM_MIXBUF_SIZE);
 
 	runtime->private_data = es;
 	runtime->hw = snd_es1968_capture;
@@ -1705,9 +1685,9 @@
 	snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES,
 				   1024);
 #endif
-	spin_lock_irqsave(&chip->substream_lock, flags);
+	spin_lock_irq(&chip->substream_lock);
 	list_add(&es->list, &chip->substream_list);
-	spin_unlock_irqrestore(&chip->substream_lock, flags);
+	spin_unlock_irq(&chip->substream_lock);
 
 	return 0;
 }
@@ -1716,16 +1696,15 @@
 {
 	es1968_t *chip = snd_pcm_substream_chip(substream);
 	esschan_t *es;
-	unsigned long flags;
 
 	if (substream->runtime->private_data == NULL)
 		return 0;
-	es = snd_magic_cast(esschan_t, substream->runtime->private_data, return -ENXIO);
-	spin_lock_irqsave(&chip->substream_lock, flags);
+	es = substream->runtime->private_data;
+	spin_lock_irq(&chip->substream_lock);
 	list_del(&es->list);
-	spin_unlock_irqrestore(&chip->substream_lock, flags);
+	spin_unlock_irq(&chip->substream_lock);
 	snd_es1968_free_apu_pair(chip, es->apu[0]);
-	snd_magic_kfree(es);
+	kfree(es);
 
 	return 0;
 }
@@ -1734,18 +1713,17 @@
 {
 	es1968_t *chip = snd_pcm_substream_chip(substream);
 	esschan_t *es;
-	unsigned long flags;
 
 	if (substream->runtime->private_data == NULL)
 		return 0;
-	es = snd_magic_cast(esschan_t, substream->runtime->private_data, return -ENXIO);
-	spin_lock_irqsave(&chip->substream_lock, flags);
+	es = substream->runtime->private_data;
+	spin_lock_irq(&chip->substream_lock);
 	list_del(&es->list);
-	spin_unlock_irqrestore(&chip->substream_lock, flags);
+	spin_unlock_irq(&chip->substream_lock);
 	snd_es1968_free_memory(chip, es->mixbuf);
 	snd_es1968_free_apu_pair(chip, es->apu[0]);
 	snd_es1968_free_apu_pair(chip, es->apu[2]);
-	snd_magic_kfree(es);
+	kfree(es);
 
 	return 0;
 }
@@ -1783,7 +1761,6 @@
 	int i, apu;
 	unsigned int pa, offset, t;
 	esm_memory_t *memory;
-	unsigned long flags;
 	struct timeval start_time, stop_time;
 
 	if (chip->clock == 0)
@@ -1800,11 +1777,11 @@
 		return;
 	}
 
-	memset(memory->buf, 0, CLOCK_MEASURE_BUFSIZE);
+	memset(memory->buf.area, 0, CLOCK_MEASURE_BUFSIZE);
 
-	wave_set_register(chip, apu << 3, (memory->addr - 0x10) & 0xfff8);
+	wave_set_register(chip, apu << 3, (memory->buf.addr - 0x10) & 0xfff8);
 
-	pa = (unsigned int)((memory->addr - chip->dma.addr) >> 1);
+	pa = (unsigned int)((memory->buf.addr - chip->dma.addr) >> 1);
 	pa |= 0x00400000;	/* System RAM (Bit 22) */
 
 	/* initialize apu */
@@ -1820,18 +1797,18 @@
 	apu_set_register(chip, apu, 9, 0xD000);
 	apu_set_register(chip, apu, 10, 0x8F08);
 	apu_set_register(chip, apu, 11, 0x0000);
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	outw(1, chip->io_port + 0x04); /* clear WP interrupts */
 	outw(inw(chip->io_port + ESM_PORT_HOST_IRQ) | ESM_HIRQ_DSIE, chip->io_port + ESM_PORT_HOST_IRQ); /* enable WP ints */
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 
 	snd_es1968_apu_set_freq(chip, apu, ((unsigned int)48000 << 16) / chip->clock); /* 48000 Hz */
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	__apu_set_register(chip, apu, 5, pa & 0xffff);
 	snd_es1968_trigger_apu(chip, apu, ESM_APU_16BITLINEAR);
 	do_gettimeofday(&start_time);
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 #if 0
 	set_current_state(TASK_UNINTERRUPTIBLE);
 	schedule_timeout(HZ / 20); /* 50 msec */
@@ -1842,11 +1819,11 @@
 	 */
 	mdelay(50);
 #endif
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	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 */
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 
 	/* check the current position */
 	offset -= (pa & 0xffff);
@@ -1879,7 +1856,7 @@
 
 static void snd_es1968_pcm_free(snd_pcm_t *pcm)
 {
-	es1968_t *esm = snd_magic_cast(es1968_t, pcm->private_data, return);
+	es1968_t *esm = pcm->private_data;
 	snd_es1968_free_dmabuf(esm);
 	esm->pcm = NULL;
 }
@@ -1952,7 +1929,7 @@
  */
 static void es1968_update_hw_volume(unsigned long private_data)
 {
-	es1968_t *chip = snd_magic_cast(es1968_t, (void*)private_data, return);
+	es1968_t *chip = (es1968_t *) private_data;
 	int x, val;
 
 	/* Figure out which volume control button was pushed,
@@ -2003,7 +1980,7 @@
  */
 static irqreturn_t snd_es1968_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	es1968_t *chip = snd_magic_cast(es1968_t, dev_id, return IRQ_NONE);
+	es1968_t *chip = dev_id;
 	u32 event;
 
 	if (!(event = inb(chip->io_port + 0x1A)))
@@ -2042,15 +2019,16 @@
 static int __devinit
 snd_es1968_mixer(es1968_t *chip)
 {
-	ac97_bus_t bus, *pbus;
-	ac97_t ac97;
+	ac97_bus_t *pbus;
+	ac97_template_t ac97;
 	snd_ctl_elem_id_t id;
 	int err;
+	static ac97_bus_ops_t ops = {
+		.write = snd_es1968_ac97_write,
+		.read = snd_es1968_ac97_read,
+	};
 
-	memset(&bus, 0, sizeof(bus));
-	bus.write = snd_es1968_ac97_write;
-	bus.read = snd_es1968_ac97_read;
-	if ((err = snd_ac97_bus(chip->card, &bus, &pbus)) < 0)
+	if ((err = snd_ac97_bus(chip->card, 0, &ops, NULL, &pbus)) < 0)
 		return err;
 
 	memset(&ac97, 0, sizeof(ac97));
@@ -2420,7 +2398,7 @@
  */
 static int es1968_suspend(snd_card_t *card, unsigned int state)
 {
-	es1968_t *chip = snd_magic_cast(es1968_t, card->pm_private_data, return -EINVAL);
+	es1968_t *chip = card->pm_private_data;
 
 	if (! chip->do_pm)
 		return 0;
@@ -2435,7 +2413,7 @@
 
 static int es1968_resume(snd_card_t *card, unsigned int state)
 {
-	es1968_t *chip = snd_magic_cast(es1968_t, card->pm_private_data, return -EINVAL);
+	es1968_t *chip = card->pm_private_data;
 
 	if (! chip->do_pm)
 		return 0;
@@ -2466,12 +2444,14 @@
 
 static int snd_es1968_free(es1968_t *chip)
 {
-	if (chip->res_io_port) {
+	if (chip->io_port) {
 		synchronize_irq(chip->irq);
 		outw(1, chip->io_port + 0x04); /* clear WP interrupts */
 		outw(0, chip->io_port + ESM_PORT_HOST_IRQ); /* disable IRQ */
 	}
 
+	if (chip->irq >= 0)
+		free_irq(chip->irq, (void *)chip);
 #ifdef SUPPORT_JOYSTICK
 	if (chip->res_joystick) {
 		gameport_unregister_port(&chip->gameport);
@@ -2482,19 +2462,14 @@
 	snd_es1968_set_acpi(chip, ACPI_D3);
 	chip->master_switch = NULL;
 	chip->master_volume = NULL;
-	if (chip->res_io_port) {
-		release_resource(chip->res_io_port);
-		kfree_nocheck(chip->res_io_port);
-	}
-	if (chip->irq >= 0)
-		free_irq(chip->irq, (void *)chip);
-	snd_magic_kfree(chip);
+	pci_release_regions(chip->pci);
+	kfree(chip);
 	return 0;
 }
 
 static int snd_es1968_dev_free(snd_device_t *device)
 {
-	es1968_t *chip = snd_magic_cast(es1968_t, device->device_data, return -ENXIO);
+	es1968_t *chip = device->device_data;
 	return snd_es1968_free(chip);
 }
 
@@ -2542,7 +2517,7 @@
 		return -ENXIO;
 	}
 
-	chip = (es1968_t *) snd_magic_kcalloc(es1968_t, 0, GFP_KERNEL);
+	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
 	if (! chip)
 		return -ENOMEM;
 
@@ -2561,12 +2536,11 @@
 	chip->playback_streams = play_streams;
 	chip->capture_streams = capt_streams;
 
-	chip->io_port = pci_resource_start(pci, 0);
-	if ((chip->res_io_port = request_region(chip->io_port, 0x100, "ESS Maestro")) == NULL) {
-		snd_printk("unable to grab region 0x%lx-0x%lx\n", chip->io_port, chip->io_port + 0x100 - 1);
-		snd_es1968_free(chip);
-		return -EBUSY;
+	if ((err = pci_request_regions(pci, "ESS Maestro")) < 0) {
+		kfree(chip);
+		return err;
 	}
+	chip->io_port = pci_resource_start(pci, 0);
 	if (request_irq(pci->irq, snd_es1968_interrupt, SA_INTERRUPT|SA_SHIRQ,
 			"ESS Maestro", (void*)chip)) {
 		snd_printk("unable to grab IRQ %d\n", pci->irq);
diff -Nru a/sound/pci/fm801.c b/sound/pci/fm801.c
--- a/sound/pci/fm801.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/fm801.c	2004-08-04 17:48:49 -07:00
@@ -40,13 +40,10 @@
 #define TEA575X_RADIO 1
 #endif
 
-#define chip_t fm801_t
-
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("ForteMedia FM801");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{ForteMedia,FM801},"
+MODULE_SUPPORTED_DEVICE("{{ForteMedia,FM801},"
 		"{Genius,SoundMaker Live 5.1}}");
 
 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;	/* Index 0-MAX */
@@ -64,16 +61,12 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for the FM801 soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for the FM801 soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable FM801 soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(tea575x_tuner, bool, boot_devs, 0444);
 MODULE_PARM_DESC(tea575x_tuner, "Enable TEA575x tuner.");
-MODULE_PARM_SYNTAX(tea575x_tuner, SNDRV_ENABLE_DESC);
 
 /*
  *  Direct registers
@@ -161,7 +154,6 @@
 	int irq;
 
 	unsigned long port;	/* I/O port number */
-	struct resource *res_port;
 	unsigned int multichannel: 1,	/* multichannel support */
 		     secondary: 1;	/* secondary codec */
 	unsigned char secondary_addr;	/* address of the secondary codec */
@@ -233,7 +225,7 @@
 				  unsigned short reg,
 				  unsigned short val)
 {
-	fm801_t *chip = snd_magic_cast(fm801_t, ac97->private_data, return);
+	fm801_t *chip = ac97->private_data;
 	int idx;
 
 	/*
@@ -264,7 +256,7 @@
 
 static unsigned short snd_fm801_codec_read(ac97_t *ac97, unsigned short reg)
 {
-	fm801_t *chip = snd_magic_cast(fm801_t, ac97->private_data, return -ENXIO);
+	fm801_t *chip = ac97->private_data;
 	int idx;
 
 	/*
@@ -308,10 +300,8 @@
   38400, 44100, 48000
 };
 
-#define RATES sizeof(rates) / sizeof(rates[0])
-
 static snd_pcm_hw_constraint_list_t hw_constraints_rates = {
-	.count = RATES,
+	.count = ARRAY_SIZE(rates),
 	.list = rates,
 	.mask = 0,
 };
@@ -336,11 +326,11 @@
 {
 	unsigned int idx;
 
-	for (idx = 0; idx < 11; idx++)
+	for (idx = 0; idx < ARRAY_SIZE(rates); idx++)
 		if (rates[idx] == rate)
 			return idx;
 	snd_BUG();
-	return RATES - 1;
+	return ARRAY_SIZE(rates) - 1;
 }
 
 /*
@@ -487,42 +477,40 @@
 static snd_pcm_uframes_t snd_fm801_playback_pointer(snd_pcm_substream_t * substream)
 {
 	fm801_t *chip = snd_pcm_substream_chip(substream);
-	unsigned long flags;
 	size_t ptr;
 
 	if (!(chip->ply_ctrl & FM801_START))
 		return 0;
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock(&chip->reg_lock);
 	ptr = chip->ply_pos + (chip->ply_count - 1) - inw(FM801_REG(chip, PLY_COUNT));
 	if (inw(FM801_REG(chip, IRQ_STATUS)) & FM801_IRQ_PLAYBACK) {
 		ptr += chip->ply_count;
 		ptr %= chip->ply_size;
 	}
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock(&chip->reg_lock);
 	return bytes_to_frames(substream->runtime, ptr);
 }
 
 static snd_pcm_uframes_t snd_fm801_capture_pointer(snd_pcm_substream_t * substream)
 {
 	fm801_t *chip = snd_pcm_substream_chip(substream);
-	unsigned long flags;
 	size_t ptr;
 
 	if (!(chip->cap_ctrl & FM801_START))
 		return 0;
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock(&chip->reg_lock);
 	ptr = chip->cap_pos + (chip->cap_count - 1) - inw(FM801_REG(chip, CAP_COUNT));
 	if (inw(FM801_REG(chip, IRQ_STATUS)) & FM801_IRQ_CAPTURE) {
 		ptr += chip->cap_count;
 		ptr %= chip->cap_size;
 	}
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock(&chip->reg_lock);
 	return bytes_to_frames(substream->runtime, ptr);
 }
 
 static irqreturn_t snd_fm801_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	fm801_t *chip = snd_magic_cast(fm801_t, dev_id, return IRQ_NONE);
+	fm801_t *chip = dev_id;
 	unsigned short status;
 	unsigned int tmp;
 
@@ -680,7 +668,7 @@
 
 static void snd_fm801_pcm_free(snd_pcm_t *pcm)
 {
-	fm801_t *chip = snd_magic_cast(fm801_t, pcm->private_data, return);
+	fm801_t *chip = pcm->private_data;
 	chip->pcm = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
@@ -1076,10 +1064,10 @@
 	int mask = (kcontrol->private_value >> 16) & 0xff;
 	int invert = (kcontrol->private_value >> 24) & 0xff;
 
-	spin_lock(&chip->reg_lock);
+	spin_lock_irq(&chip->reg_lock);
 	ucontrol->value.integer.value[0] = (inw(chip->port + reg) >> shift_left) & mask;
 	ucontrol->value.integer.value[1] = (inw(chip->port + reg) >> shift_right) & mask;
-	spin_unlock(&chip->reg_lock);
+	spin_unlock_irq(&chip->reg_lock);
 	if (invert) {
 		ucontrol->value.integer.value[0] = mask - ucontrol->value.integer.value[0];
 		ucontrol->value.integer.value[1] = mask - ucontrol->value.integer.value[1];
@@ -1176,13 +1164,13 @@
 
 static void snd_fm801_mixer_free_ac97_bus(ac97_bus_t *bus)
 {
-	fm801_t *chip = snd_magic_cast(fm801_t, bus->private_data, return);
+	fm801_t *chip = bus->private_data;
 	chip->ac97_bus = NULL;
 }
 
 static void snd_fm801_mixer_free_ac97(ac97_t *ac97)
 {
-	fm801_t *chip = snd_magic_cast(fm801_t, ac97->private_data, return);
+	fm801_t *chip = ac97->private_data;
 	if (ac97->num == 0) {
 		chip->ac97 = NULL;
 	} else {
@@ -1192,18 +1180,17 @@
 
 static int __devinit snd_fm801_mixer(fm801_t *chip)
 {
-	ac97_bus_t bus;
-	ac97_t ac97;
+	ac97_template_t ac97;
 	unsigned int i;
 	int err;
+	static ac97_bus_ops_t ops = {
+		.write = snd_fm801_codec_write,
+		.read = snd_fm801_codec_read,
+	};
 
-	memset(&bus, 0, sizeof(bus));
-	bus.write = snd_fm801_codec_write;
-	bus.read = snd_fm801_codec_read;
-	bus.private_data = chip;
-	bus.private_free = snd_fm801_mixer_free_ac97_bus;
-	if ((err = snd_ac97_bus(chip->card, &bus, &chip->ac97_bus)) < 0)
+	if ((err = snd_ac97_bus(chip->card, 0, &ops, chip, &chip->ac97_bus)) < 0)
 		return err;
+	chip->ac97_bus->private_free = snd_fm801_mixer_free_ac97_bus;
 
 	memset(&ac97, 0, sizeof(ac97));
 	ac97.private_data = chip;
@@ -1245,20 +1232,17 @@
 #ifdef TEA575X_RADIO
 	snd_tea575x_exit(&chip->tea);
 #endif
-	if (chip->res_port) {
-		release_resource(chip->res_port);
-		kfree_nocheck(chip->res_port);
-	}
 	if (chip->irq >= 0)
 		free_irq(chip->irq, (void *)chip);
+	pci_release_regions(chip->pci);
 
-	snd_magic_kfree(chip);
+	kfree(chip);
 	return 0;
 }
 
 static int snd_fm801_dev_free(snd_device_t *device)
 {
-	fm801_t *chip = snd_magic_cast(fm801_t, device->device_data, return -ENXIO);
+	fm801_t *chip = device->device_data;
 	return snd_fm801_free(chip);
 }
 
@@ -1279,19 +1263,18 @@
 	*rchip = NULL;
 	if ((err = pci_enable_device(pci)) < 0)
 		return err;
-	chip = snd_magic_kcalloc(fm801_t, 0, GFP_KERNEL);
+	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
 	if (chip == NULL)
 		return -ENOMEM;
 	spin_lock_init(&chip->reg_lock);
 	chip->card = card;
 	chip->pci = pci;
 	chip->irq = -1;
-	chip->port = pci_resource_start(pci, 0);
-	if ((chip->res_port = request_region(chip->port, 0x80, "FM801")) == NULL) {
-		snd_printk("unable to grab region 0x%lx-0x%lx\n", chip->port, chip->port + 0x80 - 1);
-		snd_fm801_free(chip);
-		return -EBUSY;
+	if ((err = pci_request_regions(pci, "FM801")) < 0) {
+		kfree(chip);
+		return err;
 	}
+	chip->port = pci_resource_start(pci, 0);
 	if (request_irq(pci->irq, snd_fm801_interrupt, SA_INTERRUPT|SA_SHIRQ, "FM801", (void *)chip)) {
 		snd_printk("unable to grab IRQ %d\n", chip->irq);
 		snd_fm801_free(chip);
diff -Nru a/sound/pci/ice1712/Makefile b/sound/pci/ice1712/Makefile
--- a/sound/pci/ice1712/Makefile	2004-08-04 17:48:48 -07:00
+++ b/sound/pci/ice1712/Makefile	2004-08-04 17:48:48 -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
+snd-ice1724-objs := ice1724.o amp.o revo.o aureon.o vt1720_mobo.o pontis.o
 
 # Toplevel Module Dependency
 obj-$(CONFIG_SND_ICE1712) += snd-ice1712.o snd-ice17xx-ak4xxx.o
diff -Nru a/sound/pci/ice1712/ak4xxx.c b/sound/pci/ice1712/ak4xxx.c
--- a/sound/pci/ice1712/ak4xxx.c	2004-08-04 17:48:48 -07:00
+++ b/sound/pci/ice1712/ak4xxx.c	2004-08-04 17:48:48 -07:00
@@ -33,7 +33,6 @@
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("ICEnsemble ICE17xx <-> AK4xxx AD/DA chip interface");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
 
 static void snd_ice1712_akm4xxx_lock(akm4xxx_t *ak, int chip)
 {
diff -Nru a/sound/pci/ice1712/aureon.c b/sound/pci/ice1712/aureon.c
--- a/sound/pci/ice1712/aureon.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/ice1712/aureon.c	2004-08-04 17:48:49 -07:00
@@ -75,7 +75,7 @@
 #define WM_DAC_ATTEN		0x00	/* DAC1-8 analog attenuation */
 #define WM_DAC_MASTER_ATTEN	0x08	/* DAC master analog attenuation */
 #define WM_DAC_DIG_ATTEN	0x09	/* DAC1-8 digital attenuation */
-#define WM_DAC_DIG_MATER_ATTEN	0x11	/* DAC master digital attenuation */
+#define WM_DAC_DIG_MASTER_ATTEN	0x11	/* DAC master digital attenuation */
 #define WM_PHASE_SWAP		0x12	/* DAC phase */
 #define WM_DAC_CTRL1		0x13	/* DAC control bits */
 #define WM_MUTE			0x14	/* mute controls */
@@ -149,20 +149,27 @@
 }
 
 /*
+ * set the register value of WM codec
+ */
+static void wm_put_nocache(ice1712_t *ice, int reg, unsigned short val)
+{
+	aureon_spi_write(ice, AUREON_WM_CS, (reg << 9) | (val & 0x1ff), 16);
+}
+
+/*
  * set the register value of WM codec and remember it
  */
 static void wm_put(ice1712_t *ice, int reg, unsigned short val)
 {
-	aureon_spi_write(ice, AUREON_WM_CS, (reg << 9) | (val & 0x1ff), 16);
+	wm_put_nocache(ice, reg, val);
 	reg <<= 1;
 	ice->akm[0].images[reg] = val >> 8;
 	ice->akm[0].images[reg + 1] = val;
 }
 
 /*
- * DAC mute control
  */
-static int wm_dac_mute_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo)
+static int aureon_mono_bool_info(snd_kcontrol_t *k, snd_ctl_elem_info_t *uinfo)
 {
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
 	uinfo->count = 1;
@@ -171,6 +178,11 @@
 	return 0;
 }
 
+/*
+ * DAC mute control
+ */
+#define wm_dac_mute_info	aureon_mono_bool_info
+
 static int wm_dac_mute_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
 {
 	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
@@ -205,9 +217,10 @@
  */
 static int wm_dac_vol_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo)
 {
+	int voices = kcontrol->private_value >> 8;
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
-	uinfo->count = 1;
-	uinfo->value.integer.min = 0;		/* mute */
+	uinfo->count = voices;
+	uinfo->value.integer.min = 0;		/* mute (-101dB) */
 	uinfo->value.integer.max = 101;		/* 0dB */
 	return 0;
 }
@@ -215,19 +228,20 @@
 static int wm_dac_vol_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
 {
 	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
-	int idx;
+	int i, idx, ofs, voices;
 	unsigned short vol;
 
+	voices = kcontrol->private_value >> 8;
+	ofs = kcontrol->private_value & 0xff;
 	down(&ice->gpio_mutex);
-	if (kcontrol->private_value)
-		idx = WM_DAC_MASTER_ATTEN;
-	else
-		idx  = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id) + WM_DAC_ATTEN;
-	vol = wm_get(ice, idx) & 0x7f;
-	if (vol <= 0x1a)
-		ucontrol->value.integer.value[0] = 0;
-	else
-		ucontrol->value.integer.value[0] = vol - 0x1a;
+	for (i = 0; i < voices; i++) {
+		idx  = WM_DAC_ATTEN + ofs + i;
+		vol = wm_get(ice, idx) & 0x7f;
+		if (vol <= 0x1a)
+			ucontrol->value.integer.value[i] = 0;
+		else
+			ucontrol->value.integer.value[i] = vol - 0x1a;
+	}
 	up(&ice->gpio_mutex);
 	return 0;
 }
@@ -235,23 +249,64 @@
 static int wm_dac_vol_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
 {
 	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
-	int idx;
+	int i, idx, ofs, voices;
 	unsigned short ovol, nvol;
-	int change;
+	int change = 0;
 
+	voices = kcontrol->private_value >> 8;
+	ofs = kcontrol->private_value & 0xff;
 	snd_ice1712_save_gpio_status(ice);
-	if (kcontrol->private_value)
-		idx = WM_DAC_MASTER_ATTEN;
-	else
-		idx  = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id) + WM_DAC_ATTEN;
-	nvol = ucontrol->value.integer.value[0] + 0x1a;
-	ovol = wm_get(ice, idx) & 0x7f;
-	change = (ovol != nvol);
-	if (change) {
-		if (nvol <= 0x1a && ovol <= 0x1a)
-			change = 0;
-		else
-			wm_put(ice, idx, nvol | 0x180); /* update on zero detect */
+	for (i = 0; i < 2; i++) {
+		idx  = WM_DAC_ATTEN + ofs + i;
+		nvol = ucontrol->value.integer.value[i] + 0x1a;
+		ovol = wm_get(ice, idx) & 0x7f;
+		if (ovol != nvol) {
+			if (nvol <= 0x1a && ovol <= 0x1a)
+				continue;
+			wm_put(ice, idx, nvol | 0x80); /* zero-detect, prelatch */
+			wm_put_nocache(ice, idx, nvol | 0x180); /* update */
+			change = 1;
+		}
+	}
+	snd_ice1712_restore_gpio_status(ice);
+	return change;
+}
+
+/* digital master volume */
+static int wm_master_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 (-127.5dB) */
+	uinfo->value.integer.max = 0xff;	/* 0dB */
+	return 0;
+}
+
+static int wm_master_vol_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+	unsigned short vol;
+
+	down(&ice->gpio_mutex);
+	vol = wm_get(ice, WM_DAC_DIG_MASTER_ATTEN) & 0xff;
+	ucontrol->value.integer.value[0] = 0xff - vol;
+	up(&ice->gpio_mutex);
+	return 0;
+}
+
+static int wm_master_vol_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+	unsigned short ovol, nvol;
+	int change = 0;
+
+	snd_ice1712_save_gpio_status(ice);
+	nvol = 0xff - ucontrol->value.integer.value[0];
+	ovol = wm_get(ice, WM_DAC_DIG_MASTER_ATTEN) & 0xff;
+	if (ovol != nvol) {
+		wm_put(ice, WM_DAC_DIG_MASTER_ATTEN, nvol); /* prelatch */
+		wm_put_nocache(ice, WM_DAC_DIG_MASTER_ATTEN, nvol | 0x100); /* update */
+		change = 1;
 	}
 	snd_ice1712_restore_gpio_status(ice);
 	return change;
@@ -260,10 +315,10 @@
 /*
  * ADC mute control
  */
-static int wm_adc_mute_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo)
+static int wm_adc_mute_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo)
 {
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
-	uinfo->count = 1;
+	uinfo->count = 2;
 	uinfo->value.integer.min = 0;
 	uinfo->value.integer.max = 1;
 	return 0;
@@ -273,10 +328,13 @@
 {
 	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
 	unsigned short val;
+	int i;
 
 	down(&ice->gpio_mutex);
-	val = wm_get(ice, snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)+WM_ADC_GAIN);
-	ucontrol->value.integer.value[0] = ~val>>5 & 0x1;
+	for (i = 0; i < 2; i++) {
+		val = wm_get(ice, WM_ADC_GAIN + i);
+		ucontrol->value.integer.value[i] = ~val>>5 & 0x1;
+	}
 	up(&ice->gpio_mutex);
 	return 0;
 }
@@ -285,14 +343,17 @@
 {
 	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
 	unsigned short new, old;
-	int change;
+	int i, change = 0;
 
 	snd_ice1712_save_gpio_status(ice);
-	old = wm_get(ice, snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)+WM_ADC_GAIN);
-	new = (~ucontrol->value.integer.value[0]<<5&0x20) | (old&~0x20);
-	change = (new != old);
-	if (change)
-		wm_put(ice, snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)+WM_ADC_GAIN, new);
+	for (i = 0; i < 2; i++) {
+		old = wm_get(ice, WM_ADC_GAIN + i);
+		new = (~ucontrol->value.integer.value[i]<<5&0x20) | (old&~0x20);
+		if (new != old) {
+			wm_put(ice, snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)+WM_ADC_GAIN, new);
+			change = 1;
+		}
+	}
 	snd_ice1712_restore_gpio_status(ice);
 
 	return change;
@@ -304,7 +365,7 @@
 static int wm_adc_vol_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo)
 {
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
-	uinfo->count = 1;
+	uinfo->count = 2;
 	uinfo->value.integer.min = 0;		/* -12dB */
 	uinfo->value.integer.max = 0x1f;	/* 19dB */
 	return 0;
@@ -313,13 +374,15 @@
 static int wm_adc_vol_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
 {
 	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
-	int idx;
+	int i, idx;
 	unsigned short vol;
 
 	down(&ice->gpio_mutex);
-	idx  = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id) + WM_ADC_GAIN;
-	vol = wm_get(ice, idx) & 0x1f;
-	ucontrol->value.integer.value[0] = vol;
+	for (i = 0; i < 2; i++) {
+		idx = WM_ADC_GAIN + i;
+		vol = wm_get(ice, idx) & 0x1f;
+		ucontrol->value.integer.value[i] = vol;
+	}
 	up(&ice->gpio_mutex);
 	return 0;
 }
@@ -327,17 +390,20 @@
 static int wm_adc_vol_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
 {
 	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
-	int idx;
+	int i, idx;
 	unsigned short ovol, nvol;
-	int change;
+	int change = 0;
 
 	snd_ice1712_save_gpio_status(ice);
-	idx  = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id) + WM_ADC_GAIN;
-	nvol = ucontrol->value.integer.value[0];
-	ovol = wm_get(ice, idx);
-	change = ((ovol & 0x1f)  != nvol);
-	if (change)
-		wm_put(ice, idx, nvol | (ovol & ~0x1f));
+	for (i = 0; i < 2; i++) {
+		idx  = WM_ADC_GAIN + i;
+		nvol = ucontrol->value.integer.value[i];
+		ovol = wm_get(ice, idx);
+		if ((ovol & 0x1f) != nvol) {
+			wm_put(ice, idx, nvol | (ovol & ~0x1f));
+			change = 1;
+		}
+	}
 	snd_ice1712_restore_gpio_status(ice);
 	return change;
 }
@@ -355,7 +421,7 @@
 		"AC97"		//AIN5
 	};
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
-	uinfo->count = 1;
+	uinfo->count = 2;
 	uinfo->value.enumerated.items = 5;
 	if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
 		uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1;
@@ -420,14 +486,7 @@
 	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;
-}
+#define aureon_hpamp_info	aureon_mono_bool_info
 
 static int aureon_hpamp_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
 {
@@ -448,6 +507,9 @@
 /*
  * Deemphasis
  */
+
+#define aureon_deemp_info	aureon_mono_bool_info
+
 static int aureon_deemp_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
 {
 	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
@@ -519,44 +581,67 @@
  * mixers
  */
 
-static snd_kcontrol_new_t aureon51_dac_control __devinitdata = {
-	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
-	.name = "DAC Volume",
-	.count = 6,
-	.info = wm_dac_vol_info,
-	.get = wm_dac_vol_get,
-	.put = wm_dac_vol_put,
-};
-
-static snd_kcontrol_new_t aureon71_dac_control __devinitdata = {
-	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
-	.name = "DAC Volume",
-	.count = 8,
-	.info = wm_dac_vol_info,
-	.get = wm_dac_vol_get,
-	.put = wm_dac_vol_put,
-};
-
-static snd_kcontrol_new_t wm_controls[] __devinitdata = {
+static snd_kcontrol_new_t aureon_dac_controls[] __devinitdata = {
 	{
 		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
-		.name = "Master Playback Switch",
-		.info = wm_dac_mute_info,
-		.get = wm_dac_mute_get,
-		.put = wm_dac_mute_put,
+		.name = "Front Playback Volume",
+		.info = wm_dac_vol_info,
+		.get = wm_dac_vol_get,
+		.put = wm_dac_vol_put,
+		.private_value = (2 << 8) | 0
 	},
 	{
 		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
-		.name = "Master Playback Volume",
+		.name = "Rear Playback Volume",
 		.info = wm_dac_vol_info,
 		.get = wm_dac_vol_get,
 		.put = wm_dac_vol_put,
-		.private_value = 1,
+		.private_value = (2 << 8) | 2
 	},
 	{
 		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
-		.name = "ADC Switch",
-		.count = 2,
+		.name = "Center Playback Volume",
+		.info = wm_dac_vol_info,
+		.get = wm_dac_vol_get,
+		.put = wm_dac_vol_put,
+		.private_value = (1 << 8) | 4
+	},
+	{
+		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+		.name = "LFE Playback Volume",
+		.info = wm_dac_vol_info,
+		.get = wm_dac_vol_get,
+		.put = wm_dac_vol_put,
+		.private_value = (1 << 8) | 5
+	},
+	{
+		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+		.name = "Side Playback Volume",
+		.info = wm_dac_vol_info,
+		.get = wm_dac_vol_get,
+		.put = wm_dac_vol_put,
+		.private_value = (2 << 8) | 6
+	}
+};
+
+static snd_kcontrol_new_t wm_controls[] __devinitdata = {
+ 	{
+ 		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+		.name = "Master Playback Switch",
+		.info = wm_dac_mute_info,
+		.get = wm_dac_mute_get,
+		.put = wm_dac_mute_put,
+ 	},
+ 	{
+ 		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+		.name = "Master Playback Volume",
+		.info = wm_master_vol_info,
+		.get = wm_master_vol_get,
+		.put = wm_master_vol_put,
+ 	},
+	{
+		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+		.name = "Capture Switch",
 		.info = wm_adc_mute_info,
 		.get = wm_adc_mute_get,
 		.put = wm_adc_mute_put,
@@ -564,15 +649,14 @@
 	},
 	{
 		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
-		.name = "ADC Volume",
-		.count = 2,
+		.name = "Capture Volume",
 		.info = wm_adc_vol_info,
 		.get = wm_adc_vol_get,
 		.put = wm_adc_vol_put,
 	},
 	{
 		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
-		.name = "Capture Route",
+		.name = "Capture Source",
 		.info = wm_adc_mux_info,
 		.get = wm_adc_mux_get,
 		.put = wm_adc_mux_put,
@@ -580,14 +664,14 @@
 	{
 		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
 		.name = "Headphone Amplifier Switch",
-		.info = aureon_bool_info,
+		.info = aureon_hpamp_info,
 		.get = aureon_hpamp_get,
 		.put = aureon_hpamp_put
 	},
 	{
 		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
 		.name = "DAC Deemphasis Switch",
-		.info = aureon_bool_info,
+		.info = aureon_deemp_info,
 		.get = aureon_deemp_get,
 		.put = aureon_deemp_put
 	},
@@ -603,15 +687,17 @@
 
 static int __devinit aureon_add_controls(ice1712_t *ice)
 {
-	unsigned int i;
+	unsigned int i, counts;
 	int err;
 
+	counts = ARRAY_SIZE(aureon_dac_controls);
 	if (ice->eeprom.subvendor == VT1724_SUBDEVICE_AUREON51_SKY)
-		err = snd_ctl_add(ice->card, snd_ctl_new1(&aureon51_dac_control, ice));
-	else
-		err = snd_ctl_add(ice->card, snd_ctl_new1(&aureon71_dac_control, ice));
-	if (err < 0)
-		return err;
+		counts--; /* no side */
+	for (i = 0; i < counts; i++) {
+		err = snd_ctl_add(ice->card, snd_ctl_new1(&aureon_dac_controls[i], ice));
+		if (err < 0)
+			return err;
+	}
 
 	for (i = 0; i < ARRAY_SIZE(wm_controls); i++) {
 		err = snd_ctl_add(ice->card, snd_ctl_new1(&wm_controls[i], ice));
@@ -718,15 +804,15 @@
 
 	if (ice->eeprom.subvendor == VT1724_SUBDEVICE_AUREON51_SKY) {
 		ice->num_total_dacs = 6;
-		ice->num_total_adcs = 6;
+		ice->num_total_adcs = 2;
 	} else {
 		/* aureon 7.1 and prodigy 7.1 */
 		ice->num_total_dacs = 8;
-		ice->num_total_adcs = 8;
+		ice->num_total_adcs = 2;
 	}
 
 	/* to remeber the register values */
-	ice->akm = snd_kcalloc(sizeof(akm4xxx_t), GFP_KERNEL);
+	ice->akm = kcalloc(1, sizeof(akm4xxx_t), GFP_KERNEL);
 	if (! ice->akm)
 		return -ENOMEM;
 	ice->akm_codecs = 1;
diff -Nru a/sound/pci/ice1712/delta.c b/sound/pci/ice1712/delta.c
--- a/sound/pci/ice1712/delta.c	2004-08-04 17:48:48 -07:00
+++ b/sound/pci/ice1712/delta.c	2004-08-04 17:48:48 -07:00
@@ -126,7 +126,7 @@
 /* sequential write */
 static int ap_cs8427_sendbytes(snd_i2c_device_t *device, unsigned char *bytes, int count)
 {
-	ice1712_t *ice = snd_magic_cast(ice1712_t, device->bus->private_data, return -EIO);
+	ice1712_t *ice = device->bus->private_data;
 	int res = count;
 	unsigned char tmp;
 
@@ -143,7 +143,7 @@
 /* sequential read */
 static int ap_cs8427_readbytes(snd_i2c_device_t *device, unsigned char *bytes, int count)
 {
-	ice1712_t *ice = snd_magic_cast(ice1712_t, device->bus->private_data, return -EIO);
+	ice1712_t *ice = device->bus->private_data;
 	int res = count;
 	unsigned char tmp;
 	
diff -Nru a/sound/pci/ice1712/ews.c b/sound/pci/ice1712/ews.c
--- a/sound/pci/ice1712/ews.c	2004-08-04 17:48:48 -07:00
+++ b/sound/pci/ice1712/ews.c	2004-08-04 17:48:48 -07:00
@@ -45,7 +45,7 @@
 /* send SDA and SCL */
 static void ewx_i2c_setlines(snd_i2c_bus_t *bus, int clk, int data)
 {
-	ice1712_t *ice = snd_magic_cast(ice1712_t, bus->private_data, return);
+	ice1712_t *ice = bus->private_data;
 	unsigned char tmp = 0;
 	if (clk)
 		tmp |= ICE1712_EWX2496_SERIAL_CLOCK;
@@ -57,13 +57,13 @@
 
 static int ewx_i2c_getclock(snd_i2c_bus_t *bus)
 {
-	ice1712_t *ice = snd_magic_cast(ice1712_t, bus->private_data, return -EIO);
+	ice1712_t *ice = bus->private_data;
 	return snd_ice1712_read(ice, ICE1712_IREG_GPIO_DATA) & ICE1712_EWX2496_SERIAL_CLOCK ? 1 : 0;
 }
 
 static int ewx_i2c_getdata(snd_i2c_bus_t *bus, int ack)
 {
-	ice1712_t *ice = snd_magic_cast(ice1712_t, bus->private_data, return -EIO);
+	ice1712_t *ice = bus->private_data;
 	int bit;
 	/* set RW pin to low */
 	snd_ice1712_write(ice, ICE1712_IREG_GPIO_WRITE_MASK, ~ICE1712_EWX2496_RW);
@@ -80,7 +80,7 @@
 
 static void ewx_i2c_start(snd_i2c_bus_t *bus)
 {
-	ice1712_t *ice = snd_magic_cast(ice1712_t, bus->private_data, return);
+	ice1712_t *ice = bus->private_data;
 	unsigned char mask;
 
 	snd_ice1712_save_gpio_status(ice);
@@ -99,13 +99,13 @@
 
 static void ewx_i2c_stop(snd_i2c_bus_t *bus)
 {
-	ice1712_t *ice = snd_magic_cast(ice1712_t, bus->private_data, return);
+	ice1712_t *ice = bus->private_data;
 	snd_ice1712_restore_gpio_status(ice);
 }
 
 static void ewx_i2c_direction(snd_i2c_bus_t *bus, int clock, int data)
 {
-	ice1712_t *ice = snd_magic_cast(ice1712_t, bus->private_data, return);
+	ice1712_t *ice = bus->private_data;
 	unsigned char mask = 0;
 
 	if (clock)
@@ -223,6 +223,7 @@
 	switch (ice->eeprom.subvendor) {
 	case ICE1712_SUBDEVICE_EWS88MT:
 	case ICE1712_SUBDEVICE_EWS88MT_NEW:
+	case ICE1712_SUBDEVICE_PHASE88:
 		snd_runtime_check(snd_i2c_sendbytes(ice->cs8404, &bits, 1) == 1, goto _error);
 		break;
 	case ICE1712_SUBDEVICE_EWS88D:
@@ -410,6 +411,7 @@
 		break;	
 	case ICE1712_SUBDEVICE_EWS88MT:
 	case ICE1712_SUBDEVICE_EWS88MT_NEW:
+	case ICE1712_SUBDEVICE_PHASE88:
 		ice->num_total_dacs = 8;
 		ice->num_total_adcs = 8;
 		break;
@@ -440,6 +442,7 @@
 		break;
 	case ICE1712_SUBDEVICE_EWS88MT:
 	case ICE1712_SUBDEVICE_EWS88MT_NEW:
+	case ICE1712_SUBDEVICE_PHASE88:
 		if ((err = snd_i2c_device_create(ice->i2c, "CS8404", ICE1712_EWS88MT_CS8404_ADDR, &ice->cs8404)) < 0)
 			return err;
 		if ((err = snd_i2c_device_create(ice->i2c, "PCF8574 (1st)", ICE1712_EWS88MT_INPUT_ADDR, &ice->i2cdevs[0])) < 0)
@@ -470,6 +473,7 @@
 		break;
 	case ICE1712_SUBDEVICE_EWS88MT:
 	case ICE1712_SUBDEVICE_EWS88MT_NEW:
+	case ICE1712_SUBDEVICE_PHASE88:
 	case ICE1712_SUBDEVICE_EWS88D:
 		/* set up CS8404 */
 		ice->spdif.ops.open = ews88_open_spdif;
@@ -498,6 +502,7 @@
 	switch (ice->eeprom.subvendor) {
 	case ICE1712_SUBDEVICE_EWS88MT:
 	case ICE1712_SUBDEVICE_EWS88MT_NEW:
+	case ICE1712_SUBDEVICE_PHASE88:
 		err = snd_ice1712_akm4xxx_init(ak, &akm_ews88mt, &akm_ews88mt_priv, ice);
 		break;
 	case ICE1712_SUBDEVICE_EWX2496:
@@ -924,6 +929,7 @@
 	case ICE1712_SUBDEVICE_EWX2496:
 	case ICE1712_SUBDEVICE_EWS88MT:
 	case ICE1712_SUBDEVICE_EWS88MT_NEW:
+	case ICE1712_SUBDEVICE_PHASE88:
 	case ICE1712_SUBDEVICE_DMX6FIRE:
 		err = snd_ice1712_akm4xxx_build_controls(ice);
 		if (err < 0)
@@ -942,6 +948,7 @@
 		break;
 	case ICE1712_SUBDEVICE_EWS88MT:
 	case ICE1712_SUBDEVICE_EWS88MT_NEW:
+	case ICE1712_SUBDEVICE_PHASE88:
 		err = snd_ctl_add(ice->card, snd_ctl_new1(&snd_ice1712_ews88mt_input_sense, ice));
 		if (err < 0)
 			return err;
@@ -988,6 +995,13 @@
 		.subvendor = ICE1712_SUBDEVICE_EWS88MT_NEW,
 		.name = "TerraTec EWS88MT",
 		.model = "ews88mt_new",
+		.chip_init = snd_ice1712_ews_init,
+		.build_controls = snd_ice1712_ews_add_controls,
+	},
+	{
+		.subvendor = ICE1712_SUBDEVICE_PHASE88,
+		.name = "TerraTec Phase88",
+		.model = "phase88",
 		.chip_init = snd_ice1712_ews_init,
 		.build_controls = snd_ice1712_ews_add_controls,
 	},
diff -Nru a/sound/pci/ice1712/ews.h b/sound/pci/ice1712/ews.h
--- a/sound/pci/ice1712/ews.h	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/ice1712/ews.h	2004-08-04 17:48:49 -07:00
@@ -29,13 +29,15 @@
 		"{TerraTec,EWX 24/96},"\
 		"{TerraTec,EWS 88MT},"\
 		"{TerraTec,EWS 88D},"\
-		"{TerraTec,DMX 6Fire},"
+		"{TerraTec,DMX 6Fire},"\
+		"{TerraTec,Phase 88},"
 
 #define ICE1712_SUBDEVICE_EWX2496	0x3b153011
 #define ICE1712_SUBDEVICE_EWS88MT	0x3b151511
 #define ICE1712_SUBDEVICE_EWS88MT_NEW	0x3b152511
 #define ICE1712_SUBDEVICE_EWS88D	0x3b152b11
 #define ICE1712_SUBDEVICE_DMX6FIRE	0x3b153811
+#define ICE1712_SUBDEVICE_PHASE88	0x3b155111
 
 /* entry point */
 extern struct snd_ice1712_card_info snd_ice1712_ews_cards[];
diff -Nru a/sound/pci/ice1712/ice1712.c b/sound/pci/ice1712/ice1712.c
--- a/sound/pci/ice1712/ice1712.c	2004-08-04 17:48:48 -07:00
+++ b/sound/pci/ice1712/ice1712.c	2004-08-04 17:48:48 -07:00
@@ -73,8 +73,7 @@
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("ICEnsemble ICE1712 (Envy24)");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{"
+MODULE_SUPPORTED_DEVICE("{"
 	       HOONTECH_DEVICE_DESC
 	       DELTA_DEVICE_DESC
 	       EWS_DEVICE_DESC
@@ -91,19 +90,14 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for ICE1712 soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for ICE1712 soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable ICE1712 soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(omni, bool, boot_devs, 0444);
 MODULE_PARM_DESC(omni, "Enable Midiman M-Audio Delta Omni I/O support.");
-MODULE_PARM_SYNTAX(omni, SNDRV_ENABLED "," SNDRV_ENABLE_DESC);
 module_param_array(cs8427_timeout, int, boot_devs, 0444);
 MODULE_PARM_DESC(cs8427_timeout, "Define reset timeout for cs8427 chip in msec resolution.");
-MODULE_PARM_SYNTAX(cs8427_timeout, SNDRV_ENABLED ", allows:{{1,1000}},default=500,skill:advanced");
 module_param_array(model, charp, boot_devs, 0444);
 MODULE_PARM_DESC(model, "Use the given board model.");
 
@@ -416,7 +410,7 @@
 
 static irqreturn_t snd_ice1712_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	ice1712_t *ice = snd_magic_cast(ice1712_t, dev_id, return IRQ_NONE);
+	ice1712_t *ice = dev_id;
 	unsigned char status;
 	int handled = 0;
 
@@ -590,7 +584,7 @@
 	rate = (runtime->rate * 8192) / 375;
 	if (rate > 0x000fffff)
 		rate = 0x000fffff;
-	spin_lock(&ice->reg_lock);
+	spin_lock_irq(&ice->reg_lock);
 	outb(0, ice->ddma_port + 15);
 	outb(ICE1712_DMA_MODE_WRITE | ICE1712_DMA_AUTOINIT, ice->ddma_port + 0x0b);
 	outl(runtime->dma_addr, ice->ddma_port + 0);
@@ -603,7 +597,7 @@
 	snd_ice1712_write(ice, ICE1712_IREG_PBK_COUNT_HI, period_size >> 8);
 	snd_ice1712_write(ice, ICE1712_IREG_PBK_LEFT, 0);
 	snd_ice1712_write(ice, ICE1712_IREG_PBK_RIGHT, 0);
-	spin_unlock(&ice->reg_lock);
+	spin_unlock_irq(&ice->reg_lock);
 	return 0;
 }
 
@@ -626,7 +620,7 @@
 	ice->playback_con_active_buf[substream->number] = 0;
 	ice->playback_con_virt_addr[substream->number] = runtime->dma_addr;
 	chn = substream->number * 2;
-	spin_lock(&ice->reg_lock);
+	spin_lock_irq(&ice->reg_lock);
 	snd_ice1712_ds_write(ice, chn, ICE1712_DSC_ADDR0, runtime->dma_addr);
 	snd_ice1712_ds_write(ice, chn, ICE1712_DSC_COUNT0, period_size);
 	snd_ice1712_ds_write(ice, chn, ICE1712_DSC_ADDR1, runtime->dma_addr + (runtime->periods > 1 ? period_size + 1 : 0));
@@ -638,7 +632,7 @@
 		snd_ice1712_ds_write(ice, chn + 1, ICE1712_DSC_RATE, rate);
 		snd_ice1712_ds_write(ice, chn + 1, ICE1712_DSC_VOLUME, 0);
 	}
-	spin_unlock(&ice->reg_lock);
+	spin_unlock_irq(&ice->reg_lock);
 	return 0;
 }
 
@@ -656,13 +650,13 @@
 		tmp &= ~0x04;
 	if (runtime->channels == 2)
 		tmp &= ~0x02;
-	spin_lock(&ice->reg_lock);
+	spin_lock_irq(&ice->reg_lock);
 	outl(ice->capture_con_virt_addr = runtime->dma_addr, ICEREG(ice, CONCAP_ADDR));
 	outw(buf_size, ICEREG(ice, CONCAP_COUNT));
 	snd_ice1712_write(ice, ICE1712_IREG_CAP_COUNT_HI, period_size >> 8);
 	snd_ice1712_write(ice, ICE1712_IREG_CAP_COUNT_LO, period_size & 0xff);
 	snd_ice1712_write(ice, ICE1712_IREG_CAP_CTRL, tmp);
-	spin_unlock(&ice->reg_lock);
+	spin_unlock_irq(&ice->reg_lock);
 	snd_ac97_set_rate(ice->ac97, AC97_PCM_LR_ADC_RATE, runtime->rate);
 	return 0;
 }
@@ -874,7 +868,7 @@
 
 static void snd_ice1712_pcm_free(snd_pcm_t *pcm)
 {
-	ice1712_t *ice = snd_magic_cast(ice1712_t, pcm->private_data, return);
+	ice1712_t *ice = pcm->private_data;
 	ice->pcm = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
@@ -912,7 +906,7 @@
 
 static void snd_ice1712_pcm_free_ds(snd_pcm_t *pcm)
 {
-	ice1712_t *ice = snd_magic_cast(ice1712_t, pcm->private_data, return);
+	ice1712_t *ice = pcm->private_data;
 	ice->pcm_ds = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
@@ -952,10 +946,8 @@
 static unsigned int rates[] = { 8000, 9600, 11025, 12000, 16000, 22050, 24000,
 				32000, 44100, 48000, 64000, 88200, 96000 };
 
-#define RATES sizeof(rates) / sizeof(rates[0])
-
 static snd_pcm_hw_constraint_list_t hw_constraints_rates = {
-	.count = RATES,
+	.count = ARRAY_SIZE(rates),
 	.list = rates,
 	.mask = 0,
 };
@@ -1077,11 +1069,11 @@
 	ice1712_t *ice = snd_pcm_substream_chip(substream);
 
 	ice->playback_pro_size = snd_pcm_lib_buffer_bytes(substream);
-	spin_lock(&ice->reg_lock);
+	spin_lock_irq(&ice->reg_lock);
 	outl(substream->runtime->dma_addr, ICEMT(ice, PLAYBACK_ADDR));
 	outw((ice->playback_pro_size >> 2) - 1, ICEMT(ice, PLAYBACK_SIZE));
 	outw((snd_pcm_lib_period_bytes(substream) >> 2) - 1, ICEMT(ice, PLAYBACK_COUNT));
-	spin_unlock(&ice->reg_lock);
+	spin_unlock_irq(&ice->reg_lock);
 
 	return 0;
 }
@@ -1100,11 +1092,11 @@
 	ice1712_t *ice = snd_pcm_substream_chip(substream);
 
 	ice->capture_pro_size = snd_pcm_lib_buffer_bytes(substream);
-	spin_lock(&ice->reg_lock);
+	spin_lock_irq(&ice->reg_lock);
 	outl(substream->runtime->dma_addr, ICEMT(ice, CAPTURE_ADDR));
 	outw((ice->capture_pro_size >> 2) - 1, ICEMT(ice, CAPTURE_SIZE));
 	outw((snd_pcm_lib_period_bytes(substream) >> 2) - 1, ICEMT(ice, CAPTURE_COUNT));
-	spin_unlock(&ice->reg_lock);
+	spin_unlock_irq(&ice->reg_lock);
 	return 0;
 }
 
@@ -1238,7 +1230,7 @@
 
 static void snd_ice1712_pcm_profi_free(snd_pcm_t *pcm)
 {
-	ice1712_t *ice = snd_magic_cast(ice1712_t, pcm->private_data, return);
+	ice1712_t *ice = pcm->private_data;
 	ice->pcm_pro = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
@@ -1511,21 +1503,26 @@
 
 static void snd_ice1712_mixer_free_ac97(ac97_t *ac97)
 {
-	ice1712_t *ice = snd_magic_cast(ice1712_t, ac97->private_data, return);
+	ice1712_t *ice = ac97->private_data;
 	ice->ac97 = NULL;
 }
 
 static int __devinit snd_ice1712_ac97_mixer(ice1712_t * ice)
 {
-	int err;
-	ac97_t ac97;
-	ac97_bus_t bus, *pbus;
+	int err, bus_num = 0;
+	ac97_template_t ac97;
+	ac97_bus_t *pbus;
+	static ac97_bus_ops_t con_ops = {
+		.write = snd_ice1712_ac97_write,
+		.read = snd_ice1712_ac97_read,
+	};
+	static ac97_bus_ops_t pro_ops = {
+		.write = snd_ice1712_pro_ac97_write,
+		.read = snd_ice1712_pro_ac97_read,
+	};
 
 	if (ice_has_con_ac97(ice)) {
-		memset(&bus, 0, sizeof(bus));
-		bus.write = snd_ice1712_ac97_write;
-		bus.read = snd_ice1712_ac97_read;
-		if ((err = snd_ac97_bus(ice->card, &bus, &pbus)) < 0)
+		if ((err = snd_ac97_bus(ice->card, bus_num++, &con_ops, NULL, &pbus)) < 0)
 			return err;
 		memset(&ac97, 0, sizeof(ac97));
 		ac97.private_data = ice;
@@ -1540,10 +1537,7 @@
 	}
 
 	if (! (ice->eeprom.data[ICE_EEP1_ACLINK] & ICE1712_CFG_PRO_I2S)) {
-		memset(&bus, 0, sizeof(bus));
-		bus.write = snd_ice1712_pro_ac97_write;
-		bus.read = snd_ice1712_pro_ac97_read;
-		if ((err = snd_ac97_bus(ice->card, &bus, &pbus)) < 0)
+		if ((err = snd_ac97_bus(ice->card, bus_num, &pro_ops, NULL, &pbus)) < 0)
 			return err;
 		memset(&ac97, 0, sizeof(ac97));
 		ac97.private_data = ice;
@@ -1570,7 +1564,7 @@
 static void snd_ice1712_proc_read(snd_info_entry_t *entry, 
 				  snd_info_buffer_t * buffer)
 {
-	ice1712_t *ice = snd_magic_cast(ice1712_t, entry->private_data, return);
+	ice1712_t *ice = entry->private_data;
 	unsigned int idx;
 
 	snd_iprintf(buffer, "%s\n\n", ice->card->longname);
@@ -2468,7 +2462,7 @@
 
 static int snd_ice1712_free(ice1712_t *ice)
 {
-	if (ice->res_port == NULL)
+	if (! ice->port)
 		goto __hw_end;
 	/* mask all interrupts */
 	outb(0xc0, ICEMT(ice, IRQ));
@@ -2479,30 +2473,16 @@
 		synchronize_irq(ice->irq);
 		free_irq(ice->irq, (void *) ice);
 	}
-	if (ice->res_port) {
-		release_resource(ice->res_port);
-		kfree_nocheck(ice->res_port);
-	}
-	if (ice->res_ddma_port) {
-		release_resource(ice->res_ddma_port);
-		kfree_nocheck(ice->res_ddma_port);
-	}
-	if (ice->res_dmapath_port) {
-		release_resource(ice->res_dmapath_port);
-		kfree_nocheck(ice->res_dmapath_port);
-	}
-	if (ice->res_profi_port) {
-		release_resource(ice->res_profi_port);
-		kfree_nocheck(ice->res_profi_port);
-	}
+	if (ice->port)
+		pci_release_regions(ice->pci);
 	snd_ice1712_akm4xxx_free(ice);
-	snd_magic_kfree(ice);
+	kfree(ice);
 	return 0;
 }
 
 static int snd_ice1712_dev_free(snd_device_t *device)
 {
-	ice1712_t *ice = snd_magic_cast(ice1712_t, device->device_data, return -ENXIO);
+	ice1712_t *ice = device->device_data;
 	return snd_ice1712_free(ice);
 }
 
@@ -2531,7 +2511,7 @@
 		return -ENXIO;
 	}
 
-	ice = snd_magic_kcalloc(ice1712_t, 0, GFP_KERNEL);
+	ice = kcalloc(1, sizeof(*ice), GFP_KERNEL);
 	if (ice == NULL)
 		return -ENOMEM;
 	ice->omni = omni ? 1 : 0;
@@ -2555,36 +2535,21 @@
 	ice->card = card;
 	ice->pci = pci;
 	ice->irq = -1;
-	ice->port = pci_resource_start(pci, 0);
-	ice->ddma_port = pci_resource_start(pci, 1);
-	ice->dmapath_port = pci_resource_start(pci, 2);
-	ice->profi_port = pci_resource_start(pci, 3);
 	pci_set_master(pci);
 	pci_write_config_word(ice->pci, 0x40, 0x807f);
 	pci_write_config_word(ice->pci, 0x42, 0x0006);
 	snd_ice1712_proc_init(ice);
 	synchronize_irq(pci->irq);
 
-	if ((ice->res_port = request_region(ice->port, 32, "ICE1712 - Controller")) == NULL) {
-		snd_printk("unable to grab ports 0x%lx-0x%lx\n", ice->port, ice->port + 32 - 1);
-		snd_ice1712_free(ice);
-		return -EIO;
-	}
-	if ((ice->res_ddma_port = request_region(ice->ddma_port, 16, "ICE1712 - DDMA")) == NULL) {
-		snd_printk("unable to grab ports 0x%lx-0x%lx\n", ice->ddma_port, ice->ddma_port + 16 - 1);
-		snd_ice1712_free(ice);
-		return -EIO;
-	}
-	if ((ice->res_dmapath_port = request_region(ice->dmapath_port, 16, "ICE1712 - DMA path")) == NULL) {
-		snd_printk("unable to grab ports 0x%lx-0x%lx\n", ice->dmapath_port, ice->dmapath_port + 16 - 1);
-		snd_ice1712_free(ice);
-		return -EIO;
-	}
-	if ((ice->res_profi_port = request_region(ice->profi_port, 64, "ICE1712 - Professional")) == NULL) {
-		snd_printk("unable to grab ports 0x%lx-0x%lx\n", ice->profi_port, ice->profi_port + 16 - 1);
-		snd_ice1712_free(ice);
-		return -EIO;
+	if ((err = pci_request_regions(pci, "ICE1712")) < 0) {
+		kfree(ice);
+		return err;
 	}
+	ice->port = pci_resource_start(pci, 0);
+	ice->ddma_port = pci_resource_start(pci, 1);
+	ice->dmapath_port = pci_resource_start(pci, 2);
+	ice->profi_port = pci_resource_start(pci, 3);
+
 	if (request_irq(pci->irq, snd_ice1712_interrupt, SA_INTERRUPT|SA_SHIRQ, "ICE1712", (void *) ice)) {
 		snd_printk("unable to grab IRQ %d\n", pci->irq);
 		snd_ice1712_free(ice);
diff -Nru a/sound/pci/ice1712/ice1712.h b/sound/pci/ice1712/ice1712.h
--- a/sound/pci/ice1712/ice1712.h	2004-08-04 17:48:48 -07:00
+++ b/sound/pci/ice1712/ice1712.h	2004-08-04 17:48:48 -07:00
@@ -294,13 +294,9 @@
 	int irq;
 
 	unsigned long port;
-	struct resource *res_port;
 	unsigned long ddma_port;
-	struct resource *res_ddma_port;
 	unsigned long dmapath_port;
-	struct resource *res_dmapath_port;
 	unsigned long profi_port;
-	struct resource *res_profi_port;
 
 	struct pci_dev *pci;
 	snd_card_t *card;
@@ -367,8 +363,6 @@
 	} gpio;
 	struct semaphore gpio_mutex;
 };
-
-#define chip_t ice1712_t
 
 
 /*
diff -Nru a/sound/pci/ice1712/ice1724.c b/sound/pci/ice1712/ice1724.c
--- a/sound/pci/ice1712/ice1724.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/ice1712/ice1724.c	2004-08-04 17:48:49 -07:00
@@ -44,16 +44,19 @@
 #include "amp.h"
 #include "revo.h"
 #include "aureon.h"
+#include "vt1720_mobo.h"
+#include "pontis.h"
 
 
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("VIA ICEnsemble ICE1724/1720 (Envy24HT/PT)");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{"
+MODULE_SUPPORTED_DEVICE("{"
 	       REVO_DEVICE_DESC
 	       AMP_AUDIO2000_DEVICE_DESC
 	       AUREON_DEVICE_DESC
+	       VT1720_MOBO_DEVICE_DESC
+	       PONTIS_DEVICE_DESC
 		"{VIA,VT1720},"
 		"{VIA,VT1724},"
 		"{ICEnsemble,Generic ICE1724},"
@@ -68,13 +71,10 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for ICE1724 soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for ICE1724 soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable ICE1724 soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(model, charp, boot_devs, 0444);
 MODULE_PARM_DESC(model, "Use the given board model.");
 
@@ -190,21 +190,26 @@
 static void snd_vt1724_set_gpio_mask(ice1712_t *ice, unsigned int data)
 {
 	outw(data, ICEREG1724(ice, GPIO_WRITE_MASK));
-	outb((data >> 16) & 0xff, ICEREG1724(ice, GPIO_WRITE_MASK_22));
+	if (! ice->vt1720) /* VT1720 supports only 16 GPIO bits */
+		outb((data >> 16) & 0xff, ICEREG1724(ice, GPIO_WRITE_MASK_22));
 	inw(ICEREG1724(ice, GPIO_WRITE_MASK)); /* dummy read for pci-posting */
 }
 
 static void snd_vt1724_set_gpio_data(ice1712_t *ice, unsigned int data)
 {
 	outw(data, ICEREG1724(ice, GPIO_DATA));
-	outb(data >> 16, ICEREG1724(ice, GPIO_DATA_22));
+	if (! ice->vt1720)
+		outb(data >> 16, ICEREG1724(ice, GPIO_DATA_22));
 	inw(ICEREG1724(ice, GPIO_DATA)); /* dummy read for pci-posting */
 }
 
 static unsigned int snd_vt1724_get_gpio_data(ice1712_t *ice)
 {
 	unsigned int data;
-	data = (unsigned int)inb(ICEREG1724(ice, GPIO_DATA_22));
+	if (! ice->vt1720)
+		data = (unsigned int)inb(ICEREG1724(ice, GPIO_DATA_22));
+	else
+		data = 0;
 	data = (data << 16) | inw(ICEREG1724(ice, GPIO_DATA));
 	return data;
 }
@@ -215,7 +220,7 @@
 
 static irqreturn_t snd_vt1724_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	ice1712_t *ice = snd_magic_cast(ice1712_t, dev_id, return IRQ_NONE);
+	ice1712_t *ice = dev_id;
 	unsigned char status;
 	int handled = 0;
 
@@ -230,7 +235,7 @@
 		if ((status & VT1724_IRQ_MPU_RX)||(status & VT1724_IRQ_MPU_TX)) {
 			if (ice->rmidi[0])
 				snd_mpu401_uart_interrupt(irq, ice->rmidi[0]->private_data, regs);
-			outb(VT1724_IRQ_MPU_RX|VT1724_IRQ_MPU_TX, ICEREG1724(ice, IRQSTAT));
+			outb(status & (VT1724_IRQ_MPU_RX|VT1724_IRQ_MPU_TX), ICEREG1724(ice, IRQSTAT));
 			status &= ~(VT1724_IRQ_MPU_RX|VT1724_IRQ_MPU_TX);
 		}
 		if (status & VT1724_IRQ_MTPCM) {
@@ -317,6 +322,13 @@
 	.mask = 0,
 };
 
+struct vt1724_pcm_reg {
+	unsigned int addr;	/* ADDR register offset */
+	unsigned int size;	/* SIZE register offset */
+	unsigned int count;	/* COUNT register offset */
+	unsigned int start;	/* start & pause bit */
+};
+
 static int snd_vt1724_pcm_trigger(snd_pcm_substream_t *substream, int cmd)
 {
 	ice1712_t *ice = snd_pcm_substream_chip(substream);
@@ -327,8 +339,10 @@
 
 	what = 0;
 	snd_pcm_group_for_each(pos, substream) {
+		struct vt1724_pcm_reg *reg;
 		s = snd_pcm_group_substream_entry(pos);
-		what |= (unsigned long)(s->runtime->private_data);
+		reg = s->runtime->private_data;
+		what |= reg->start;
 		snd_pcm_trigger_done(s, substream);
 	}
 
@@ -371,12 +385,26 @@
 #define DMA_PAUSES	(VT1724_RDMA0_PAUSE|VT1724_PDMA0_PAUSE|VT1724_RDMA1_PAUSE|\
 	VT1724_PDMA1_PAUSE|VT1724_PDMA2_PAUSE|VT1724_PDMA3_PAUSE|VT1724_PDMA4_PAUSE)
 
+static int get_max_rate(ice1712_t *ice)
+{
+	if (ice->eeprom.data[ICE_EEP2_ACLINK] & VT1724_CFG_PRO_I2S) {
+		if ((ice->eeprom.data[ICE_EEP2_I2S] & 0x08) && !ice->vt1720)
+			return 192000;
+		else
+			return 96000;
+	} else
+		return 48000;
+}
+
 static void snd_vt1724_set_pro_rate(ice1712_t *ice, unsigned int rate, int force)
 {
 	unsigned long flags;
 	unsigned char val, old;
 	unsigned int i;
 
+	if (rate > get_max_rate(ice))
+		return;
+
 	spin_lock_irqsave(&ice->reg_lock, flags);
 	if ((inb(ICEMT1724(ice, DMA_CONTROL)) & DMA_STARTS) || 
 	    (inb(ICEMT1724(ice, DMA_PAUSE)) & DMA_PAUSES)) {
@@ -410,6 +438,8 @@
 		val = 0;
 		break;
 	}
+	old = inb(ICEMT1724(ice, RATE));
+	val |= (old & 0xf0);
 	outb(val, ICEMT1724(ice, RATE));
 	if (rate == ice->cur_rate) {
 		spin_unlock_irqrestore(&ice->reg_lock, flags);
@@ -419,7 +449,7 @@
 	ice->cur_rate = rate;
 
 	/* check MT02 */
-	if (ice->eeprom.data[ICE_EEP2_ACLINK] & 0x80) {
+	if (ice->eeprom.data[ICE_EEP2_ACLINK] & VT1724_CFG_PRO_I2S) {
 		val = old = inb(ICEMT1724(ice, I2S_FORMAT));
 		if (rate > 96000)
 			val |= VT1724_MT_I2S_MCLK_128X; /* 128x MCLK */
@@ -446,15 +476,6 @@
 		if (ice->akm[i].ops.set_rate_val)
 			ice->akm[i].ops.set_rate_val(&ice->akm[i], rate);
 	}
-
-	/* set up AC97 registers if needed */
-	if (! (ice->eeprom.data[ICE_EEP2_ACLINK] & 0x80) && ice->ac97) {
-		snd_ac97_set_rate(ice->ac97, AC97_PCM_FRONT_DAC_RATE, rate);
-		snd_ac97_set_rate(ice->ac97, AC97_PCM_SURR_DAC_RATE, rate);
-		snd_ac97_set_rate(ice->ac97, AC97_PCM_LFE_DAC_RATE, rate);
-		snd_ac97_set_rate(ice->ac97, AC97_SPDIF, rate);
-		snd_ac97_set_rate(ice->ac97, AC97_PCM_LR_ADC_RATE, rate);
-	}
 }
 
 static int snd_vt1724_pcm_hw_params(snd_pcm_substream_t * substream,
@@ -518,7 +539,7 @@
 	unsigned char val;
 	unsigned int size;
 
-	spin_lock(&ice->reg_lock);
+	spin_lock_irq(&ice->reg_lock);
 	val = (8 - substream->runtime->channels) >> 1;
 	outb(val, ICEMT1724(ice, BURST));
 
@@ -533,7 +554,7 @@
 	outw(size, ICEMT1724(ice, PLAYBACK_COUNT));
 	outb(size >> 16, ICEMT1724(ice, PLAYBACK_COUNT) + 2);
 
-	spin_unlock(&ice->reg_lock);
+	spin_unlock_irq(&ice->reg_lock);
 
 	// printk("pro prepare: ch = %d, addr = 0x%x, buffer = 0x%x, period = 0x%x\n", substream->runtime->channels, (unsigned int)substream->runtime->dma_addr, snd_pcm_lib_buffer_bytes(substream), snd_pcm_lib_period_bytes(substream));
 	return 0;
@@ -562,7 +583,9 @@
 	ptr = inl(ICEMT1724(ice, PLAYBACK_SIZE)) & 0xffffff;
 	ptr = (ptr + 1) << 2;
 	ptr = bytes_to_frames(substream->runtime, ptr);
-	if (ptr <= substream->runtime->buffer_size)
+	if (! ptr)
+		;
+	else if (ptr <= substream->runtime->buffer_size)
 		ptr = substream->runtime->buffer_size - ptr;
 	else {
 		snd_printd("ice1724: invalid ptr %d (size=%d)\n", (int)ptr, (int)substream->runtime->buffer_size);
@@ -572,29 +595,23 @@
 	return ptr;
 }
 
-struct vt1724_pcm_reg {
-	unsigned int addr;	/* ADDR register offset */
-	unsigned int size;	/* SIZE register offset */
-	unsigned int count;	/* COUNT register offset */
-	unsigned int start;	/* start bit */
-	unsigned int pause;	/* pause bit */
-};
-
-static int snd_vt1724_pcm_prepare(snd_pcm_substream_t *substream, const struct vt1724_pcm_reg *reg)
+static int snd_vt1724_pcm_prepare(snd_pcm_substream_t *substream)
 {
 	ice1712_t *ice = snd_pcm_substream_chip(substream);
+	struct vt1724_pcm_reg *reg = substream->runtime->private_data;
 
-	spin_lock(&ice->reg_lock);
+	spin_lock_irq(&ice->reg_lock);
 	outl(substream->runtime->dma_addr, ice->profi_port + reg->addr);
 	outw((snd_pcm_lib_buffer_bytes(substream) >> 2) - 1, ice->profi_port + reg->size);
 	outw((snd_pcm_lib_period_bytes(substream) >> 2) - 1, ice->profi_port + reg->count);
-	spin_unlock(&ice->reg_lock);
+	spin_unlock_irq(&ice->reg_lock);
 	return 0;
 }
 
-static snd_pcm_uframes_t snd_vt1724_pcm_pointer(snd_pcm_substream_t *substream, const struct vt1724_pcm_reg *reg)
+static snd_pcm_uframes_t snd_vt1724_pcm_pointer(snd_pcm_substream_t *substream)
 {
 	ice1712_t *ice = snd_pcm_substream_chip(substream);
+	struct vt1724_pcm_reg *reg = substream->runtime->private_data;
 	size_t ptr;
 
 	if (!(inl(ICEMT1724(ice, DMA_CONTROL)) & reg->start))
@@ -607,7 +624,9 @@
 	ptr = inw(ice->profi_port + reg->size);
 	ptr = (ptr + 1) << 2;
 	ptr = bytes_to_frames(substream->runtime, ptr);
-	if (ptr <= substream->runtime->buffer_size)
+	if (! ptr)
+		;
+	else if (ptr <= substream->runtime->buffer_size)
 		ptr = substream->runtime->buffer_size - ptr;
 	else {
 		snd_printd("ice1724: invalid ptr %d (size=%d)\n", (int)ptr, (int)substream->runtime->buffer_size);
@@ -617,24 +636,20 @@
 #endif
 }
 
-const static struct vt1724_pcm_reg vt1724_capture_pro_reg = {
+static struct vt1724_pcm_reg vt1724_playback_pro_reg = {
+	.addr = VT1724_MT_PLAYBACK_ADDR,
+	.size = VT1724_MT_PLAYBACK_SIZE,
+	.count = VT1724_MT_PLAYBACK_COUNT,
+	.start = VT1724_PDMA0_START,
+};
+
+static struct vt1724_pcm_reg vt1724_capture_pro_reg = {
 	.addr = VT1724_MT_CAPTURE_ADDR,
 	.size = VT1724_MT_CAPTURE_SIZE,
 	.count = VT1724_MT_CAPTURE_COUNT,
 	.start = VT1724_RDMA0_START,
-	.pause = VT1724_RDMA0_PAUSE,
 };
 
-static int snd_vt1724_capture_pro_prepare(snd_pcm_substream_t * substream)
-{
-	return snd_vt1724_pcm_prepare(substream, &vt1724_capture_pro_reg);
-}
-
-static snd_pcm_uframes_t snd_vt1724_capture_pro_pointer(snd_pcm_substream_t * substream)
-{
-	return snd_vt1724_pcm_pointer(substream, &vt1724_capture_pro_reg);
-}
-
 static snd_pcm_hardware_t snd_vt1724_playback_pro =
 {
 	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
@@ -698,9 +713,10 @@
 static int set_rate_constraints(ice1712_t *ice, snd_pcm_substream_t *substream)
 {
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	if (ice->eeprom.data[ICE_EEP2_ACLINK] & 0x80) {
+	if (ice->eeprom.data[ICE_EEP2_ACLINK] & VT1724_CFG_PRO_I2S) {
 		/* I2S */
-		if (ice->eeprom.data[ICE_EEP2_I2S] & 0x08)
+		/* VT1720 doesn't support more than 96kHz */
+		if ((ice->eeprom.data[ICE_EEP2_I2S] & 0x08) && !ice->vt1720)
 			return snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &hw_constraints_rates_192);
 		else {
 			runtime->hw.rates = SNDRV_PCM_RATE_KNOT | SNDRV_PCM_RATE_8000_96000;
@@ -709,25 +725,14 @@
 		}
 	} else if (ice->ac97) {
 		/* ACLINK */
-		int ratec;
-		if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-			ratec = AC97_RATES_FRONT_DAC;
-		else
-			ratec = AC97_RATES_ADC;
-		runtime->hw.rates = ice->ac97->rates[ratec];
 		runtime->hw.rate_max = 48000;
-		if (runtime->hw.rates == SNDRV_PCM_RATE_48000) {
-			runtime->hw.rate_min = 48000;
-			return 0;
-		} else {
-			runtime->hw.rates = SNDRV_PCM_RATE_KNOT | SNDRV_PCM_RATE_8000_48000;
-			return snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &hw_constraints_rates_48);
-		}
+		runtime->hw.rates = SNDRV_PCM_RATE_KNOT | SNDRV_PCM_RATE_8000_48000;
+		return snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &hw_constraints_rates_48);
 	}
 	return 0;
 }
 
-/* multi-channel playback needs alignment 8x32bit regarless of the channels
+/* multi-channel playback needs alignment 8x32bit regardless of the channels
  * actually used
  */
 #define VT1724_BUFFER_ALIGN	0x20
@@ -738,7 +743,7 @@
 	ice1712_t *ice = snd_pcm_substream_chip(substream);
 	int chs;
 
-	runtime->private_data = (void*)VT1724_PDMA0_START; /* irq/status/trigger bit */
+	runtime->private_data = &vt1724_playback_pro_reg;
 	ice->playback_pro_substream = substream;
 	runtime->hw = snd_vt1724_playback_pro;
 	snd_pcm_set_sync(substream);
@@ -767,12 +772,16 @@
 	ice1712_t *ice = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
 
-	runtime->private_data = (void*)VT1724_RDMA0_START; /* irq/status/trigger bit */
+	runtime->private_data = &vt1724_capture_pro_reg;
 	ice->capture_pro_substream = substream;
 	runtime->hw = snd_vt1724_2ch_stereo;
 	snd_pcm_set_sync(substream);
 	snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24);
 	set_rate_constraints(ice, substream);
+	snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES,
+				   VT1724_BUFFER_ALIGN);
+	snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES,
+				   VT1724_BUFFER_ALIGN);
 	return 0;
 }
 
@@ -814,9 +823,9 @@
 	.ioctl =	snd_pcm_lib_ioctl,
 	.hw_params =	snd_vt1724_pcm_hw_params,
 	.hw_free =	snd_vt1724_pcm_hw_free,
-	.prepare =	snd_vt1724_capture_pro_prepare,
+	.prepare =	snd_vt1724_pcm_prepare,
 	.trigger =	snd_vt1724_pcm_trigger,
-	.pointer =	snd_vt1724_capture_pro_pointer,
+	.pointer =	snd_vt1724_pcm_pointer,
 };
 
 static int __devinit snd_vt1724_pcm_profi(ice1712_t * ice, int device)
@@ -848,40 +857,60 @@
  * SPDIF PCM
  */
 
-const static struct vt1724_pcm_reg vt1724_playback_spdif_reg = {
+static struct vt1724_pcm_reg vt1724_playback_spdif_reg = {
 	.addr = VT1724_MT_PDMA4_ADDR,
 	.size = VT1724_MT_PDMA4_SIZE,
 	.count = VT1724_MT_PDMA4_COUNT,
 	.start = VT1724_PDMA4_START,
-	.pause = VT1724_PDMA4_PAUSE,
 };
 
-const static struct vt1724_pcm_reg vt1724_capture_spdif_reg = {
+static struct vt1724_pcm_reg vt1724_capture_spdif_reg = {
 	.addr = VT1724_MT_RDMA1_ADDR,
 	.size = VT1724_MT_RDMA1_SIZE,
 	.count = VT1724_MT_RDMA1_COUNT,
 	.start = VT1724_RDMA1_START,
-	.pause = VT1724_RDMA1_PAUSE,
 };
 
-static int snd_vt1724_playback_spdif_prepare(snd_pcm_substream_t * substream)
+/* update spdif control bits; call with reg_lock */
+static void update_spdif_bits(ice1712_t *ice, unsigned int val)
 {
-	return snd_vt1724_pcm_prepare(substream, &vt1724_playback_spdif_reg);
-}
+	unsigned char cbit, disabled;
 
-static snd_pcm_uframes_t snd_vt1724_playback_spdif_pointer(snd_pcm_substream_t * substream)
-{
-	return snd_vt1724_pcm_pointer(substream, &vt1724_playback_spdif_reg);
+	cbit = inb(ICEREG1724(ice, SPDIF_CFG));
+	disabled = cbit & ~VT1724_CFG_SPDIF_OUT_EN;
+	if (cbit != disabled)
+		outb(disabled, ICEREG1724(ice, SPDIF_CFG));
+	outw(val, ICEMT1724(ice, SPDIF_CTRL));
+	if (cbit != disabled)
+		outb(cbit, ICEREG1724(ice, SPDIF_CFG));
+	outw(val, ICEMT1724(ice, SPDIF_CTRL));
 }
 
-static int snd_vt1724_capture_spdif_prepare(snd_pcm_substream_t * substream)
+/* update SPDIF control bits according to the given rate */
+static void update_spdif_rate(ice1712_t *ice, unsigned int rate)
 {
-	return snd_vt1724_pcm_prepare(substream, &vt1724_capture_spdif_reg);
+	unsigned int val, nval;
+	unsigned long flags;
+
+	spin_lock_irqsave(&ice->reg_lock, flags);
+	nval = val = inw(ICEMT1724(ice, SPDIF_CTRL));
+	nval &= ~(7 << 12);
+	switch (rate) {
+	case 44100: break;
+	case 48000: nval |= 2 << 12; break;
+	case 32000: nval |= 3 << 12; break;
+	}
+	if (val != nval)
+		update_spdif_bits(ice, nval);
+	spin_unlock_irqrestore(&ice->reg_lock, flags);
 }
 
-static snd_pcm_uframes_t snd_vt1724_capture_spdif_pointer(snd_pcm_substream_t * substream)
+static int snd_vt1724_playback_spdif_prepare(snd_pcm_substream_t * substream)
 {
-	return snd_vt1724_pcm_pointer(substream, &vt1724_capture_spdif_reg);
+	ice1712_t *ice = snd_pcm_substream_chip(substream);
+	if (! ice->force_pdma4)
+		update_spdif_rate(ice, substream->runtime->rate);
+	return snd_vt1724_pcm_prepare(substream);
 }
 
 static int snd_vt1724_playback_spdif_open(snd_pcm_substream_t *substream)
@@ -889,7 +918,7 @@
 	ice1712_t *ice = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
 
-	runtime->private_data = (void*)VT1724_PDMA4_START; /* irq/status/trigger bit */
+	runtime->private_data = &vt1724_playback_spdif_reg;
 	ice->playback_con_substream = substream;
 	if (ice->force_pdma4) {
 		runtime->hw = snd_vt1724_2ch_stereo;
@@ -898,6 +927,10 @@
 		runtime->hw = snd_vt1724_spdif;
 	snd_pcm_set_sync(substream);
 	snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24);
+	snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES,
+				   VT1724_BUFFER_ALIGN);
+	snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES,
+				   VT1724_BUFFER_ALIGN);
 	return 0;
 }
 
@@ -917,7 +950,7 @@
 	ice1712_t *ice = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
 
-	runtime->private_data = (void*)VT1724_RDMA1_START; /* irq/status/trigger bit */
+	runtime->private_data = &vt1724_capture_spdif_reg;
 	ice->capture_con_substream = substream;
 	if (ice->force_rdma1) {
 		runtime->hw = snd_vt1724_2ch_stereo;
@@ -926,6 +959,10 @@
 		runtime->hw = snd_vt1724_spdif;
 	snd_pcm_set_sync(substream);
 	snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24);
+	snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES,
+				   VT1724_BUFFER_ALIGN);
+	snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES,
+				   VT1724_BUFFER_ALIGN);
 	return 0;
 }
 
@@ -948,7 +985,7 @@
 	.hw_free =	snd_vt1724_pcm_hw_free,
 	.prepare =	snd_vt1724_playback_spdif_prepare,
 	.trigger =	snd_vt1724_pcm_trigger,
-	.pointer =	snd_vt1724_playback_spdif_pointer,
+	.pointer =	snd_vt1724_pcm_pointer,
 };
 
 static snd_pcm_ops_t snd_vt1724_capture_spdif_ops = {
@@ -957,9 +994,9 @@
 	.ioctl =	snd_pcm_lib_ioctl,
 	.hw_params =	snd_vt1724_pcm_hw_params,
 	.hw_free =	snd_vt1724_pcm_hw_free,
-	.prepare =	snd_vt1724_capture_spdif_prepare,
+	.prepare =	snd_vt1724_pcm_prepare,
 	.trigger =	snd_vt1724_pcm_trigger,
-	.pointer =	snd_vt1724_capture_spdif_pointer,
+	.pointer =	snd_vt1724_pcm_pointer,
 };
 
 
@@ -1017,27 +1054,24 @@
  * independent surround PCMs
  */
 
-const static struct vt1724_pcm_reg vt1724_playback_dma_regs[3] = {
+static struct vt1724_pcm_reg vt1724_playback_dma_regs[3] = {
 	{
 		.addr = VT1724_MT_PDMA1_ADDR,
 		.size = VT1724_MT_PDMA1_SIZE,
 		.count = VT1724_MT_PDMA1_COUNT,
 		.start = VT1724_PDMA1_START,
-		.pause = VT1724_PDMA1_PAUSE,
 	},
 	{
 		.addr = VT1724_MT_PDMA2_ADDR,
 		.size = VT1724_MT_PDMA2_SIZE,
 		.count = VT1724_MT_PDMA2_COUNT,
 		.start = VT1724_PDMA2_START,
-		.pause = VT1724_PDMA2_PAUSE,
 	},
 	{
 		.addr = VT1724_MT_PDMA3_ADDR,
 		.size = VT1724_MT_PDMA3_SIZE,
 		.count = VT1724_MT_PDMA3_COUNT,
 		.start = VT1724_PDMA3_START,
-		.pause = VT1724_PDMA3_PAUSE,
 	},
 };
 
@@ -1046,17 +1080,12 @@
 	ice1712_t *ice = snd_pcm_substream_chip(substream);
 	unsigned char val;
 
-	spin_lock(&ice->reg_lock);
+	spin_lock_irq(&ice->reg_lock);
 	val = 3 - substream->number;
 	if (inb(ICEMT1724(ice, BURST)) < val)
 		outb(val, ICEMT1724(ice, BURST));
-	spin_unlock(&ice->reg_lock);
-	return snd_vt1724_pcm_prepare(substream, &vt1724_playback_dma_regs[substream->number]);
-}
-
-static snd_pcm_uframes_t snd_vt1724_playback_indep_pointer(snd_pcm_substream_t * substream)
-{
-	return snd_vt1724_pcm_pointer(substream, &vt1724_playback_dma_regs[substream->number]);
+	spin_unlock_irq(&ice->reg_lock);
+	return snd_vt1724_pcm_prepare(substream);
 }
 
 static int snd_vt1724_playback_indep_open(snd_pcm_substream_t *substream)
@@ -1071,7 +1100,7 @@
 		return -EBUSY; /* FIXME: should handle blocking mode properly */
 	}
 	up(&ice->open_mutex);
-	runtime->private_data = (void*)(1UL << (substream->number + 4));
+	runtime->private_data = &vt1724_playback_dma_regs[substream->number];
 	ice->playback_con_substream_ds[substream->number] = substream;
 	runtime->hw = snd_vt1724_2ch_stereo;
 	snd_pcm_set_sync(substream);
@@ -1100,7 +1129,7 @@
 	.hw_free =	snd_vt1724_pcm_hw_free,
 	.prepare =	snd_vt1724_playback_indep_prepare,
 	.trigger =	snd_vt1724_pcm_trigger,
-	.pointer =	snd_vt1724_playback_indep_pointer,
+	.pointer =	snd_vt1724_pcm_pointer,
 };
 
 
@@ -1143,17 +1172,19 @@
 	int err;
 
 	if (! (ice->eeprom.data[ICE_EEP2_ACLINK] & VT1724_CFG_PRO_I2S)) {
-		ac97_bus_t bus, *pbus;
-		ac97_t ac97;
+		ac97_bus_t *pbus;
+		ac97_template_t ac97;
+		static ac97_bus_ops_t ops = {
+			.write = snd_vt1724_ac97_write,
+			.read = snd_vt1724_ac97_read,
+		};
+
 		/* cold reset */
 		outb(inb(ICEMT1724(ice, AC97_CMD)) | 0x80, ICEMT1724(ice, AC97_CMD));
 		mdelay(5); /* FIXME */
 		outb(inb(ICEMT1724(ice, AC97_CMD)) & ~0x80, ICEMT1724(ice, AC97_CMD));
 
-		memset(&bus, 0, sizeof(bus));
-		bus.write = snd_vt1724_ac97_write;
-		bus.read = snd_vt1724_ac97_read;
-		if ((err = snd_ac97_bus(ice->card, &bus, &pbus)) < 0)
+		if ((err = snd_ac97_bus(ice->card, 0, &ops, NULL, &pbus)) < 0)
 			return err;
 		memset(&ac97, 0, sizeof(ac97));
 		ac97.private_data = ice;
@@ -1181,7 +1212,7 @@
 static void snd_vt1724_proc_read(snd_info_entry_t *entry, 
 				 snd_info_buffer_t * buffer)
 {
-	ice1712_t *ice = snd_magic_cast(ice1712_t, entry->private_data, return);
+	ice1712_t *ice = entry->private_data;
 	unsigned int idx;
 
 	snd_iprintf(buffer, "%s\n\n", ice->card->longname);
@@ -1274,7 +1305,7 @@
 		}
 	} else {
 		/* consumer */
-		val |= diga->status[0] & 0x04; /* copyright */
+		val |= diga->status[1] & 0x04; /* copyright */
 		if ((diga->status[0] & IEC958_AES0_CON_EMPHASIS)== IEC958_AES0_CON_EMPHASIS_5015)
 			val |= 1U << 3;
 		val |= (unsigned int)(diga->status[1] & 0x3f) << 4; /* category */
@@ -1326,22 +1357,13 @@
 {
 	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
 	unsigned int val, old;
-	unsigned long flags;
 
 	val = encode_spdif_bits(&ucontrol->value.iec958);
-	spin_lock_irqsave(&ice->reg_lock, flags);
+	spin_lock_irq(&ice->reg_lock);
 	old = inw(ICEMT1724(ice, SPDIF_CTRL));
-	if (val != old) {
-		unsigned char cbit, disabled;
-		cbit = inb(ICEREG1724(ice, SPDIF_CFG));
-		disabled = cbit & ~VT1724_CFG_SPDIF_OUT_EN;
-		if (cbit != disabled)
-			outb(disabled, ICEREG1724(ice, SPDIF_CFG));
-		outw(val, ICEMT1724(ice, SPDIF_CTRL));
-		if (cbit != disabled)
-			outb(cbit, ICEREG1724(ice, SPDIF_CFG));
-	}
-	spin_unlock_irqrestore(&ice->reg_lock, flags);
+	if (val != old)
+		update_spdif_bits(ice, val);
+	spin_unlock_irq(&ice->reg_lock);
 	return (val != old);
 }
 
@@ -1415,15 +1437,15 @@
 {
 	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
 	unsigned char old, val;
-	unsigned long flags;
-	spin_lock_irqsave(&ice->reg_lock, flags);
+
+	spin_lock_irq(&ice->reg_lock);
 	old = val = inb(ICEREG1724(ice, SPDIF_CFG));
 	val &= ~VT1724_CFG_SPDIF_OUT_EN;
 	if (ucontrol->value.integer.value[0])
 		val |= VT1724_CFG_SPDIF_OUT_EN;
 	if (old != val)
 		outb(val, ICEREG1724(ice, SPDIF_CFG));
-	spin_unlock_irqrestore(&ice->reg_lock, flags);
+	spin_unlock_irq(&ice->reg_lock);
 	return old != val;
 }
 
@@ -1490,7 +1512,7 @@
  */
 static int snd_vt1724_pro_internal_clock_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo)
 {
-	static char *texts[] = {
+	static char *texts_1724[] = {
 		"8000",		/* 0: 6 */
 		"9600",		/* 1: 3 */
 		"11025",	/* 2: 10 */
@@ -1508,12 +1530,32 @@
 		"192000",	/* 14: 14 */
 		"IEC958 Input",	/* 15: -- */
 	};
+	static char *texts_1720[] = {
+		"8000",		/* 0: 6 */
+		"9600",		/* 1: 3 */
+		"11025",	/* 2: 10 */
+		"12000",	/* 3: 2 */
+		"16000",	/* 4: 5 */
+		"22050",	/* 5: 9 */
+		"24000",	/* 6: 1 */
+		"32000",	/* 7: 4 */
+		"44100",	/* 8: 8 */
+		"48000",	/* 9: 0 */
+		"64000",	/* 10: 15 */
+		"88200",	/* 11: 11 */
+		"96000",	/* 12: 7 */
+		"IEC958 Input",	/* 13: -- */
+	};
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
 	uinfo->count = 1;
-	uinfo->value.enumerated.items = 16;
+	uinfo->value.enumerated.items = ice->vt1720 ? 14 : 16;
 	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]);
+	strcpy(uinfo->value.enumerated.name,
+	       ice->vt1720 ? texts_1720[uinfo->value.enumerated.item] :
+	       texts_1724[uinfo->value.enumerated.item]);
 	return 0;
 }
 
@@ -1527,7 +1569,7 @@
 	
 	spin_lock_irq(&ice->reg_lock);
 	if (is_spdif_master(ice)) {
-		ucontrol->value.enumerated.item[0] = 15;
+		ucontrol->value.enumerated.item[0] = ice->vt1720 ? 13 : 15;
 	} else {
 		val = xlate[inb(ICEMT1724(ice, RATE)) & 15];
 		if (val == 255) {
@@ -1544,17 +1586,22 @@
 {
 	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
 	unsigned char oval;
+	int rate;
 	int change = 0;
+	int spdif = ice->vt1720 ? 13 : 15;
 
 	spin_lock_irq(&ice->reg_lock);
 	oval = inb(ICEMT1724(ice, RATE));
-	if (ucontrol->value.enumerated.item[0] == 15) {
+	if (ucontrol->value.enumerated.item[0] == spdif) {
 		outb(oval | VT1724_SPDIF_MASTER, ICEMT1724(ice, RATE));
 	} else {
-		PRO_RATE_DEFAULT = rates[ucontrol->value.integer.value[0] % 15];
-		spin_unlock_irq(&ice->reg_lock);
-		snd_vt1724_set_pro_rate(ice, PRO_RATE_DEFAULT, 1);
-		spin_lock_irq(&ice->reg_lock);
+		rate = rates[ucontrol->value.integer.value[0] % 15];
+		if (rate <= get_max_rate(ice)) {
+			PRO_RATE_DEFAULT = rate;
+			spin_unlock_irq(&ice->reg_lock);
+			snd_vt1724_set_pro_rate(ice, PRO_RATE_DEFAULT, 1);
+			spin_lock_irq(&ice->reg_lock);
+		}
 	}
 	change = inb(ICEMT1724(ice, RATE)) != oval;
 	spin_unlock_irq(&ice->reg_lock);
@@ -1815,6 +1862,8 @@
 	snd_vt1724_revo_cards,
 	snd_vt1724_amp_cards, 
 	snd_vt1724_aureon_cards,
+	snd_vt1720_mobo_cards,
+	snd_vt1720_pontis_cards,
 	NULL,
 };
 
@@ -1822,24 +1871,28 @@
 /*
  */
 
-unsigned char snd_vt1724_read_i2c(ice1712_t *ice, unsigned char dev, unsigned char addr)
+static void wait_i2c_busy(ice1712_t *ice)
 {
-	long t = 0x10000;
+	int t = 0x10000;
+	while ((inb(ICEREG1724(ice, I2C_CTRL)) & VT1724_I2C_BUSY) && t--)
+		;
+}
 
+unsigned char snd_vt1724_read_i2c(ice1712_t *ice, unsigned char dev, unsigned char addr)
+{
 	outb(addr, ICEREG1724(ice, I2C_BYTE_ADDR));
 	outb(dev & ~VT1724_I2C_WRITE, ICEREG1724(ice, I2C_DEV_ADDR));
-	while (t-- > 0 && (inb(ICEREG1724(ice, I2C_CTRL)) & VT1724_I2C_BUSY)) ;
+	wait_i2c_busy(ice);
 	return inb(ICEREG1724(ice, I2C_DATA));
 }
 
 void snd_vt1724_write_i2c(ice1712_t *ice, unsigned char dev, unsigned char addr, unsigned char data)
 {
-	long t = 0x10000;
-
+	wait_i2c_busy(ice);
 	outb(addr, ICEREG1724(ice, I2C_BYTE_ADDR));
 	outb(data, ICEREG1724(ice, I2C_DATA));
 	outb(dev | VT1724_I2C_WRITE, ICEREG1724(ice, I2C_DEV_ADDR));
-	while (t-- > 0 && (inb(ICEREG1724(ice, I2C_CTRL)) & VT1724_I2C_BUSY)) ;
+	wait_i2c_busy(ice);
 }
 
 static int __devinit snd_vt1724_read_eeprom(ice1712_t *ice, const char *modelname)
@@ -1930,9 +1983,6 @@
 
 	outb(0, ICEREG1724(ice, POWERDOWN));
 
-	/* read back to check the availability of SPDIF out */
-	ice->eeprom.data[ICE_EEP2_SPDIF] = inb(ICEREG1724(ice, SPDIF_CFG));
-
 	return 0;
 }
 
@@ -1994,10 +2044,9 @@
 
 	if (ice->num_total_dacs > 0) {
 		snd_kcontrol_new_t tmp = snd_vt1724_mixer_pro_analog_route;
-		if (ice->vt1720)
+		tmp.count = ice->num_total_dacs;
+		if (ice->vt1720 && tmp.count > 2)
 			tmp.count = 2;
-		else
-			tmp.count = ice->num_total_dacs;
 		err = snd_ctl_add(ice->card, snd_ctl_new1(&tmp, ice));
 		if (err < 0)
 			return err;
@@ -2012,7 +2061,7 @@
 
 static int snd_vt1724_free(ice1712_t *ice)
 {
-	if (ice->res_port == NULL)
+	if (! ice->port)
 		goto __hw_end;
 	/* mask all interrupts */
 	outb(0xff, ICEMT1724(ice, DMA_INT_MASK));
@@ -2023,22 +2072,15 @@
 		synchronize_irq(ice->irq);
 		free_irq(ice->irq, (void *) ice);
 	}
-	if (ice->res_port) {
-		release_resource(ice->res_port);
-		kfree_nocheck(ice->res_port);
-	}
-	if (ice->res_profi_port) {
-		release_resource(ice->res_profi_port);
-		kfree_nocheck(ice->res_profi_port);
-	}
+	pci_release_regions(ice->pci);
 	snd_ice1712_akm4xxx_free(ice);
-	snd_magic_kfree(ice);
+	kfree(ice);
 	return 0;
 }
 
 static int snd_vt1724_dev_free(snd_device_t *device)
 {
-	ice1712_t *ice = snd_magic_cast(ice1712_t, device->device_data, return -ENXIO);
+	ice1712_t *ice = device->device_data;
 	return snd_vt1724_free(ice);
 }
 
@@ -2060,7 +2102,7 @@
 	if ((err = pci_enable_device(pci)) < 0)
 		return err;
 
-	ice = snd_magic_kcalloc(ice1712_t, 0, GFP_KERNEL);
+	ice = kcalloc(1, sizeof(*ice), GFP_KERNEL);
 	if (ice == NULL)
 		return -ENOMEM;
 	ice->vt1724 = 1;
@@ -2074,24 +2116,17 @@
 	ice->card = card;
 	ice->pci = pci;
 	ice->irq = -1;
-	ice->port = pci_resource_start(pci, 0);
-	ice->profi_port = pci_resource_start(pci, 1);
 	pci_set_master(pci);
 	snd_vt1724_proc_init(ice);
 	synchronize_irq(pci->irq);
 
-	if ((ice->res_port = request_region(ice->port, 32, "ICE1724 - Controller")) == NULL) {
-		snd_printk("unable to grab ports 0x%lx-0x%lx\n", ice->port, ice->port + 32 - 1);
-		snd_vt1724_free(ice);
-		return -EIO;
+	if ((err = pci_request_regions(pci, "ICE1724")) < 0) {
+		kfree(ice);
+		return err;
 	}
+	ice->port = pci_resource_start(pci, 0);
+	ice->profi_port = pci_resource_start(pci, 1);
 
-	if ((ice->res_profi_port = request_region(ice->profi_port, 128, "ICE1724 - Professional")) == NULL) {
-		snd_printk("unable to grab ports 0x%lx-0x%lx\n", ice->profi_port, ice->profi_port + 16 - 1);
-		snd_vt1724_free(ice);
-		return -EIO;
-	}
-		
 	if (request_irq(pci->irq, snd_vt1724_interrupt, SA_INTERRUPT|SA_SHIRQ, "ICE1724", (void *) ice)) {
 		snd_printk("unable to grab IRQ %d\n", pci->irq);
 		snd_vt1724_free(ice);
diff -Nru a/sound/pci/ice1712/pontis.c b/sound/pci/ice1712/pontis.c
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/sound/pci/ice1712/pontis.c	2004-08-04 17:48:49 -07:00
@@ -0,0 +1,839 @@
+/*
+ *   ALSA driver for ICEnsemble VT1724 (Envy24HT)
+ *
+ *   Lowlevel functions for Pontis MS300
+ *
+ *	Copyright (c) 2004 Takashi Iwai <tiwai@suse.de>
+ *
+ *   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 <sound/info.h>
+
+#include "ice1712.h"
+#include "envy24ht.h"
+#include "pontis.h"
+
+/* I2C addresses */
+#define WM_DEV		0x34
+#define CS_DEV		0x20
+
+/* WM8776 registers */
+#define WM_HP_ATTEN_L		0x00	/* headphone left attenuation */
+#define WM_HP_ATTEN_R		0x01	/* headphone left attenuation */
+#define WM_HP_MASTER		0x02	/* headphone master (both channels), override LLR */
+#define WM_DAC_ATTEN_L		0x03	/* digital left attenuation */
+#define WM_DAC_ATTEN_R		0x04
+#define WM_DAC_MASTER		0x05
+#define WM_PHASE_SWAP		0x06	/* DAC phase swap */
+#define WM_DAC_CTRL1		0x07
+#define WM_DAC_MUTE		0x08
+#define WM_DAC_CTRL2		0x09
+#define WM_DAC_INT		0x0a
+#define WM_ADC_INT		0x0b
+#define WM_MASTER_CTRL		0x0c
+#define WM_POWERDOWN		0x0d
+#define WM_ADC_ATTEN_L		0x0e
+#define WM_ADC_ATTEN_R		0x0f
+#define WM_ALC_CTRL1		0x10
+#define WM_ALC_CTRL2		0x11
+#define WM_ALC_CTRL3		0x12
+#define WM_NOISE_GATE		0x13
+#define WM_LIMITER		0x14
+#define WM_ADC_MUX		0x15
+#define WM_OUT_MUX		0x16
+#define WM_RESET		0x17
+
+/*
+ * GPIO
+ */
+#define PONTIS_CS_CS		(1<<4)	/* CS */
+#define PONTIS_CS_CLK		(1<<5)	/* CLK */
+#define PONTIS_CS_RDATA		(1<<6)	/* CS8416 -> VT1720 */
+#define PONTIS_CS_WDATA		(1<<7)	/* VT1720 -> CS8416 */
+
+
+/*
+ * get the current register value of WM codec
+ */
+static unsigned short wm_get(ice1712_t *ice, int reg)
+{
+	reg <<= 1;
+	return ((unsigned short)ice->akm[0].images[reg] << 8) |
+		ice->akm[0].images[reg + 1];
+}
+
+/*
+ * set the register value of WM codec and remember it
+ */
+static void wm_put_nocache(ice1712_t *ice, int reg, unsigned short val)
+{
+	unsigned short cval;
+	cval = (reg << 9) | val;
+	snd_vt1724_write_i2c(ice, WM_DEV, cval >> 8, cval & 0xff);
+}
+
+static void wm_put(ice1712_t *ice, int reg, unsigned short val)
+{
+	wm_put_nocache(ice, reg, val);
+	reg <<= 1;
+	ice->akm[0].images[reg] = val >> 8;
+	ice->akm[0].images[reg + 1] = val;
+}
+
+/*
+ * DAC volume attenuation mixer control (-64dB to 0dB)
+ */
+
+#define DAC_0dB	0xff
+#define DAC_RES	128
+#define DAC_MIN	(DAC_0dB - DAC_RES)
+
+static int wm_dac_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;	/* mute */
+	uinfo->value.integer.max = DAC_RES;	/* 0dB, 0.5dB step */
+	return 0;
+}
+
+static int wm_dac_vol_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+	unsigned short val;
+	int i;
+
+	down(&ice->gpio_mutex);
+	for (i = 0; i < 2; i++) {
+		val = wm_get(ice, WM_DAC_ATTEN_L + i) & 0xff;
+		val = val > DAC_MIN ? (val - DAC_MIN) : 0;
+		ucontrol->value.integer.value[i] = val;
+	}
+	up(&ice->gpio_mutex);
+	return 0;
+}
+
+static int wm_dac_vol_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+	unsigned short oval, nval;
+	int i, idx, change = 0;
+
+	down(&ice->gpio_mutex);
+	for (i = 0; i < 2; i++) {
+		nval = ucontrol->value.integer.value[i];
+		nval = (nval ? (nval + DAC_MIN) : 0) & 0xff;
+		idx = WM_DAC_ATTEN_L + i;
+		oval = wm_get(ice, idx) & 0xff;
+		if (oval != nval) {
+			wm_put(ice, idx, nval);
+			wm_put_nocache(ice, idx, nval | 0x100);
+			change = 1;
+		}
+	}
+	up(&ice->gpio_mutex);
+	return change;
+}
+
+/*
+ * ADC gain mixer control (-64dB to 0dB)
+ */
+
+#define ADC_0dB	0xcf
+#define ADC_RES	128
+#define ADC_MIN	(ADC_0dB - ADC_RES)
+
+static int wm_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;	/* mute (-64dB) */
+	uinfo->value.integer.max = ADC_RES;	/* 0dB, 0.5dB step */
+	return 0;
+}
+
+static int wm_adc_vol_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+	unsigned short val;
+	int i;
+
+	down(&ice->gpio_mutex);
+	for (i = 0; i < 2; i++) {
+		val = wm_get(ice, WM_ADC_ATTEN_L + i) & 0xff;
+		val = val > ADC_MIN ? (val - ADC_MIN) : 0;
+		ucontrol->value.integer.value[i] = val;
+	}
+	up(&ice->gpio_mutex);
+	return 0;
+}
+
+static int wm_adc_vol_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+	unsigned short ovol, nvol;
+	int i, idx, change = 0;
+
+	down(&ice->gpio_mutex);
+	for (i = 0; i < 2; i++) {
+		nvol = ucontrol->value.integer.value[i];
+		nvol = nvol ? (nvol + ADC_MIN) : 0;
+		idx  = WM_ADC_ATTEN_L + i;
+		ovol = wm_get(ice, idx) & 0xff;
+		if (ovol != nvol) {
+			wm_put(ice, idx, nvol);
+			change = 1;
+		}
+	}
+	up(&ice->gpio_mutex);
+	return change;
+}
+
+/*
+ * ADC input mux mixer control
+ */
+static int wm_adc_mux_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 wm_adc_mux_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+	int bit = kcontrol->private_value;
+
+	down(&ice->gpio_mutex);
+	ucontrol->value.integer.value[0] = (wm_get(ice, WM_ADC_MUX) & (1 << bit)) ? 1 : 0;
+	up(&ice->gpio_mutex);
+	return 0;
+}
+
+static int wm_adc_mux_put(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+	int bit = kcontrol->private_value;
+	unsigned short oval, nval;
+	int change;
+
+	down(&ice->gpio_mutex);
+	nval = oval = wm_get(ice, WM_ADC_MUX);
+	if (ucontrol->value.integer.value[0])
+		nval |= (1 << bit);
+	else
+		nval &= ~(1 << bit);
+	change = nval != oval;
+	if (change) {
+		wm_put(ice, WM_ADC_MUX, nval);
+	}
+	up(&ice->gpio_mutex);
+	return 0;
+}
+
+/*
+ * Analog bypass (In -> Out)
+ */
+static int wm_bypass_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 wm_bypass_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+
+	down(&ice->gpio_mutex);
+	ucontrol->value.integer.value[0] = (wm_get(ice, WM_OUT_MUX) & 0x04) ? 1 : 0;
+	up(&ice->gpio_mutex);
+	return 0;
+}
+
+static int wm_bypass_put(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+	unsigned short val, oval;
+	int change = 0;
+
+	down(&ice->gpio_mutex);
+	val = oval = wm_get(ice, WM_OUT_MUX);
+	if (ucontrol->value.integer.value[0])
+		val |= 0x04;
+	else
+		val &= ~0x04;
+	if (val != oval) {
+		wm_put(ice, WM_OUT_MUX, val);
+		change = 1;
+	}
+	up(&ice->gpio_mutex);
+	return change;
+}
+
+/*
+ * Left/Right swap
+ */
+static int wm_chswap_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 wm_chswap_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+
+	down(&ice->gpio_mutex);
+	ucontrol->value.integer.value[0] = (wm_get(ice, WM_DAC_CTRL1) & 0xf0) != 0x90;
+	up(&ice->gpio_mutex);
+	return 0;
+}
+
+static int wm_chswap_put(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+	unsigned short val, oval;
+	int change = 0;
+
+	down(&ice->gpio_mutex);
+	oval = wm_get(ice, WM_DAC_CTRL1);
+	val = oval & 0x0f;
+	if (ucontrol->value.integer.value[0])
+		val |= 0x60;
+	else
+		val |= 0x90;
+	if (val != oval) {
+		wm_put(ice, WM_DAC_CTRL1, val);
+		wm_put_nocache(ice, WM_DAC_CTRL1, val);
+		change = 1;
+	}
+	up(&ice->gpio_mutex);
+	return change;
+}
+
+/*
+ * write data in the SPI mode
+ */
+static void set_gpio_bit(ice1712_t *ice, unsigned int bit, int val)
+{
+	unsigned int tmp = snd_ice1712_gpio_read(ice);
+	if (val)
+		tmp |= bit;
+	else
+		tmp &= ~bit;
+	snd_ice1712_gpio_write(ice, tmp);
+}
+
+static void spi_send_bits(ice1712_t *ice, unsigned int data, int bits)
+{
+	int i;
+	/* assume bits are aligned to 8 */
+	for (i = 0; i < bits; i++) {
+		set_gpio_bit(ice, PONTIS_CS_CLK, 0);
+		udelay(1);
+		set_gpio_bit(ice, PONTIS_CS_WDATA, data & 0x80);
+		udelay(1);
+		set_gpio_bit(ice, PONTIS_CS_CLK, 1);
+		udelay(1);
+		data <<= 1;
+	}
+}
+
+static unsigned int spi_read_bits(ice1712_t *ice, int bits)
+{
+	int i;
+	unsigned int val = 0;
+
+	for (i = 0; i < bits; i++) {
+		set_gpio_bit(ice, PONTIS_CS_CLK, 0);
+		udelay(1);
+		if (snd_ice1712_gpio_read(ice) & PONTIS_CS_RDATA)
+			val |= 1;
+		udelay(1);
+		set_gpio_bit(ice, PONTIS_CS_CLK, 1);
+		udelay(1);
+		val <<= 1;
+	}
+	return val;
+}
+
+
+static void spi_write(ice1712_t *ice, unsigned int dev, unsigned int reg, unsigned int data)
+{
+	unsigned int val;
+	val = ((dev & ~1) << 16) | (reg << 8) | data;
+	snd_ice1712_gpio_set_dir(ice, PONTIS_CS_CS|PONTIS_CS_WDATA|PONTIS_CS_CLK);
+	snd_ice1712_gpio_set_mask(ice, ~(PONTIS_CS_CS|PONTIS_CS_WDATA|PONTIS_CS_CLK));
+	set_gpio_bit(ice, PONTIS_CS_CS, 0);
+	spi_send_bits(ice, val, 24);
+	set_gpio_bit(ice, PONTIS_CS_CS, 1);
+	udelay(1);
+	/* restore */
+	snd_ice1712_gpio_set_mask(ice, ice->gpio.write_mask);
+	snd_ice1712_gpio_set_dir(ice, ice->gpio.direction);
+}
+
+static unsigned int spi_read(ice1712_t *ice, unsigned int dev, unsigned int reg)
+{
+	unsigned int val;
+	val = ((dev & ~1) << 8) | reg;
+	snd_ice1712_gpio_set_dir(ice, PONTIS_CS_CS|PONTIS_CS_WDATA|PONTIS_CS_CLK);
+	snd_ice1712_gpio_set_mask(ice, ~(PONTIS_CS_CS|PONTIS_CS_WDATA|PONTIS_CS_CLK));
+	set_gpio_bit(ice, PONTIS_CS_CS, 0);
+	spi_send_bits(ice, val, 16);
+	set_gpio_bit(ice, PONTIS_CS_CS, 1);
+	udelay(1);
+	set_gpio_bit(ice, PONTIS_CS_CS, 0);
+	spi_send_bits(ice, dev | 1, 8);
+	val = spi_read_bits(ice, 8);
+	set_gpio_bit(ice, PONTIS_CS_CS, 1);
+	udelay(1);
+	/* restore */
+	snd_ice1712_gpio_set_mask(ice, ice->gpio.write_mask);
+	snd_ice1712_gpio_set_dir(ice, ice->gpio.direction);
+	return val;
+}
+
+
+/*
+ * SPDIF input source
+ */
+static int cs_source_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo)
+{
+	static char *texts[] = {
+		"Coax",		/* RXP0 */
+		"Optical",	/* RXP1 */
+		"CD",		/* RXP2 */
+	};
+	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
+	uinfo->count = 1;
+	uinfo->value.enumerated.items = 3;
+	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 cs_source_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+
+	down(&ice->gpio_mutex);
+	ucontrol->value.enumerated.item[0] = ice->gpio.saved[0];
+	up(&ice->gpio_mutex);
+	return 0;
+}
+
+static int cs_source_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+	unsigned char val;
+	int change = 0;
+
+	down(&ice->gpio_mutex);
+	if (ucontrol->value.enumerated.item[0] != ice->gpio.saved[0]) {
+		ice->gpio.saved[0] = ucontrol->value.enumerated.item[0] & 3;
+		val = 0x80 | (ice->gpio.saved[0] << 3);
+		spi_write(ice, CS_DEV, 0x04, val);
+		change = 1;
+	}
+	up(&ice->gpio_mutex);
+	return 0;
+}
+
+
+/*
+ * GPIO controls
+ */
+static int pontis_gpio_mask_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;
+	uinfo->value.integer.max = 0xffff; /* 16bit */
+	return 0;
+}
+
+static int pontis_gpio_mask_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+	down(&ice->gpio_mutex);
+	/* 4-7 reserved */
+	ucontrol->value.integer.value[0] = (~ice->gpio.write_mask & 0xffff) | 0x00f0;
+	up(&ice->gpio_mutex);
+	return 0;
+}
+	
+static int pontis_gpio_mask_put(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+	down(&ice->gpio_mutex);
+	/* 4-7 reserved */
+	ice->gpio.write_mask = (~ucontrol->value.integer.value[0] & 0xffff) | 0x00f0;
+	up(&ice->gpio_mutex);
+	return 0;
+}
+
+static int pontis_gpio_dir_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+	down(&ice->gpio_mutex);
+	/* 4-7 reserved */
+	ucontrol->value.integer.value[0] = ice->gpio.direction & 0xff0f;
+	up(&ice->gpio_mutex);
+	return 0;
+}
+	
+static int pontis_gpio_dir_put(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+	down(&ice->gpio_mutex);
+	/* 4-7 reserved */
+	ice->gpio.direction = ucontrol->value.integer.value[0] & 0xff0f;
+	up(&ice->gpio_mutex);
+	return 0;
+}
+
+static int pontis_gpio_data_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+	down(&ice->gpio_mutex);
+	snd_ice1712_gpio_set_dir(ice, ice->gpio.direction);
+	snd_ice1712_gpio_set_mask(ice, ice->gpio.write_mask);
+	ucontrol->value.integer.value[0] = snd_ice1712_gpio_read(ice) & 0xffff;
+	up(&ice->gpio_mutex);
+	return 0;
+}
+
+static int pontis_gpio_data_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	ice1712_t *ice = snd_kcontrol_chip(kcontrol);
+	unsigned int val, nval;
+	int changed = 0;
+	down(&ice->gpio_mutex);
+	snd_ice1712_gpio_set_dir(ice, ice->gpio.direction);
+	snd_ice1712_gpio_set_mask(ice, ice->gpio.write_mask);
+	val = snd_ice1712_gpio_read(ice) & 0xffff;
+	nval = ucontrol->value.integer.value[0] & 0xffff;
+	if (val != nval) {
+		snd_ice1712_gpio_write(ice, nval);
+		changed = 1;
+	}
+	up(&ice->gpio_mutex);
+	return changed;
+}
+
+/*
+ * mixers
+ */
+
+static snd_kcontrol_new_t pontis_controls[] __devinitdata = {
+	{
+		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+		.name = "PCM Playback Volume",
+		.info = wm_dac_vol_info,
+		.get = wm_dac_vol_get,
+		.put = wm_dac_vol_put,
+	},
+	{
+		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+		.name = "Capture Volume",
+		.info = wm_adc_vol_info,
+		.get = wm_adc_vol_get,
+		.put = wm_adc_vol_put,
+	},
+	{
+		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+		.name = "CD Capture Switch",
+		.info = wm_adc_mux_info,
+		.get = wm_adc_mux_get,
+		.put = wm_adc_mux_put,
+		.private_value = 0,
+	},
+	{
+		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+		.name = "Line Capture Switch",
+		.info = wm_adc_mux_info,
+		.get = wm_adc_mux_get,
+		.put = wm_adc_mux_put,
+		.private_value = 1,
+	},
+	{
+		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+		.name = "Analog Bypass Switch",
+		.info = wm_bypass_info,
+		.get = wm_bypass_get,
+		.put = wm_bypass_put,
+	},
+	{
+		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+		.name = "Swap Output Channels",
+		.info = wm_chswap_info,
+		.get = wm_chswap_get,
+		.put = wm_chswap_put,
+	},
+	{
+		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+		.name = "IEC958 Input Source",
+		.info = cs_source_info,
+		.get = cs_source_get,
+		.put = cs_source_put,
+	},
+	/* FIXME: which interface? */
+	{
+		.iface = SNDRV_CTL_ELEM_IFACE_CARD,
+		.name = "GPIO Mask",
+		.info = pontis_gpio_mask_info,
+		.get = pontis_gpio_mask_get,
+		.put = pontis_gpio_mask_put,
+	},
+	{
+		.iface = SNDRV_CTL_ELEM_IFACE_CARD,
+		.name = "GPIO Direction",
+		.info = pontis_gpio_mask_info,
+		.get = pontis_gpio_dir_get,
+		.put = pontis_gpio_dir_put,
+	},
+	{
+		.iface = SNDRV_CTL_ELEM_IFACE_CARD,
+		.name = "GPIO Data",
+		.info = pontis_gpio_mask_info,
+		.get = pontis_gpio_data_get,
+		.put = pontis_gpio_data_put,
+	},
+};
+
+
+/*
+ * WM codec registers
+ */
+static void wm_proc_regs_write(snd_info_entry_t *entry, snd_info_buffer_t *buffer)
+{
+	ice1712_t *ice = (ice1712_t *)entry->private_data;
+	char line[64];
+	unsigned int reg, val;
+	down(&ice->gpio_mutex);
+	while (!snd_info_get_line(buffer, line, sizeof(line))) {
+		if (sscanf(line, "%x %x", &reg, &val) != 2)
+			continue;
+		if (reg <= 0x17 && val <= 0xffff)
+			wm_put(ice, reg, val);
+	}
+	up(&ice->gpio_mutex);
+}
+
+static void wm_proc_regs_read(snd_info_entry_t *entry, snd_info_buffer_t *buffer)
+{
+	ice1712_t *ice = (ice1712_t *)entry->private_data;
+	int reg, val;
+
+	down(&ice->gpio_mutex);
+	for (reg = 0; reg <= 0x17; reg++) {
+		val = wm_get(ice, reg);
+		snd_iprintf(buffer, "%02x = %04x\n", reg, val);
+	}
+	up(&ice->gpio_mutex);
+}
+
+static void wm_proc_init(ice1712_t *ice)
+{
+	snd_info_entry_t *entry;
+	if (! snd_card_proc_new(ice->card, "wm_codec", &entry)) {
+		snd_info_set_text_ops(entry, ice, 1024, wm_proc_regs_read);
+		entry->mode |= S_IWUSR;
+		entry->c.text.write_size = 1024;
+		entry->c.text.write = wm_proc_regs_write;
+	}
+}
+
+static void cs_proc_regs_read(snd_info_entry_t *entry, snd_info_buffer_t *buffer)
+{
+	ice1712_t *ice = (ice1712_t *)entry->private_data;
+	int reg, val;
+
+	down(&ice->gpio_mutex);
+	for (reg = 0; reg <= 0x26; reg++) {
+		val = spi_read(ice, CS_DEV, reg);
+		snd_iprintf(buffer, "%02x = %02x\n", reg, val);
+	}
+	val = spi_read(ice, CS_DEV, 0x7f);
+	snd_iprintf(buffer, "%02x = %02x\n", 0x7f, val);
+	up(&ice->gpio_mutex);
+}
+
+static void cs_proc_init(ice1712_t *ice)
+{
+	snd_info_entry_t *entry;
+	if (! snd_card_proc_new(ice->card, "cs_codec", &entry)) {
+		snd_info_set_text_ops(entry, ice, 1024, cs_proc_regs_read);
+	}
+}
+
+
+static int __devinit pontis_add_controls(ice1712_t *ice)
+{
+	unsigned int i;
+	int err;
+
+	for (i = 0; i < ARRAY_SIZE(pontis_controls); i++) {
+		err = snd_ctl_add(ice->card, snd_ctl_new1(&pontis_controls[i], ice));
+		if (err < 0)
+			return err;
+	}
+
+	wm_proc_init(ice);
+	cs_proc_init(ice);
+
+	return 0;
+}
+
+
+/*
+ * initialize the chip
+ */
+static int __devinit pontis_init(ice1712_t *ice)
+{
+	static unsigned short wm_inits[] = {
+		/* These come first to reduce init pop noise */
+		WM_ADC_MUX,	0x00c0,	/* ADC mute */
+		WM_DAC_MUTE,	0x0001,	/* DAC softmute */
+		WM_DAC_CTRL1,	0x0000,	/* DAC mute */
+
+		WM_POWERDOWN,	0x0008,	/* All power-up except HP */
+		WM_RESET,	0x0000,	/* reset */
+	};
+	static unsigned short wm_inits2[] = {
+		WM_MASTER_CTRL,	0x0022,	/* 256fs, slave mode */
+		WM_DAC_INT,	0x0022,	/* I2S, normal polarity, 24bit */
+		WM_ADC_INT,	0x0022,	/* I2S, normal polarity, 24bit */
+		WM_DAC_CTRL1,	0x0090,	/* DAC L/R */
+		WM_OUT_MUX,	0x0001,	/* OUT DAC */
+		WM_HP_ATTEN_L,	0x0179,	/* HP 0dB */
+		WM_HP_ATTEN_R,	0x0179,	/* HP 0dB */
+		WM_DAC_ATTEN_L,	0x0000,	/* DAC 0dB */
+		WM_DAC_ATTEN_L,	0x0100,	/* DAC 0dB */
+		WM_DAC_ATTEN_R,	0x0000,	/* DAC 0dB */
+		WM_DAC_ATTEN_R,	0x0100,	/* DAC 0dB */
+		// WM_DAC_MASTER,	0x0100,	/* DAC master muted */
+		WM_PHASE_SWAP,	0x0000,	/* phase normal */
+		WM_DAC_CTRL2,	0x0000,	/* no deemphasis, no ZFLG */
+		WM_ADC_ATTEN_L,	0x0000,	/* ADC muted */
+		WM_ADC_ATTEN_R,	0x0000,	/* ADC muted */
+#if 0
+		WM_ALC_CTRL1,	0x007b,	/* */
+		WM_ALC_CTRL2,	0x0000,	/* */
+		WM_ALC_CTRL3,	0x0000,	/* */
+		WM_NOISE_GATE,	0x0000,	/* */
+#endif
+		WM_DAC_MUTE,	0x0000,	/* DAC unmute */
+		WM_ADC_MUX,	0x0003,	/* ADC unmute, both CD/Line On */
+	};
+	static unsigned char cs_inits[] = {
+		0x04,	0x80,	/* RUN, RXP0 */
+		0x05,	0x00,	/* slave, 24bit */
+		0x01,	0x00,
+		0x02,	0x00,
+		0x03,	0x00,
+	};
+	unsigned int i;
+
+	ice->vt1720 = 1;
+	ice->num_total_dacs = 2;
+	ice->num_total_adcs = 2;
+
+	/* to remeber the register values */
+	ice->akm = kcalloc(1, sizeof(akm4xxx_t), GFP_KERNEL);
+	if (! ice->akm)
+		return -ENOMEM;
+	ice->akm_codecs = 1;
+
+	/* HACK - use this as the SPDIF source.
+	 * don't call snd_ice1712_gpio_get/put(), otherwise it's overwritten
+	 */
+	ice->gpio.saved[0] = 0;
+
+	/* initialize WM8776 codec */
+	for (i = 0; i < ARRAY_SIZE(wm_inits); i += 2)
+		wm_put(ice, wm_inits[i], wm_inits[i+1]);
+	set_current_state(TASK_UNINTERRUPTIBLE);
+	schedule_timeout(1);
+	for (i = 0; i < ARRAY_SIZE(wm_inits2); i += 2)
+		wm_put(ice, wm_inits2[i], wm_inits2[i+1]);
+
+	/* initialize CS8416 codec */
+	/* assert PRST#; MT05 bit 7 */
+	outb(inb(ICEMT1724(ice, AC97_CMD)) | 0x80, ICEMT1724(ice, AC97_CMD));
+	mdelay(5);
+	/* deassert PRST# */
+	outb(inb(ICEMT1724(ice, AC97_CMD)) & ~0x80, ICEMT1724(ice, AC97_CMD));
+
+	for (i = 0; i < ARRAY_SIZE(cs_inits); i += 2)
+		spi_write(ice, CS_DEV, cs_inits[i], cs_inits[i+1]);
+
+	return 0;
+}
+
+
+/*
+ * Pontis boards don't provide the EEPROM data at all.
+ * hence the driver needs to sets up it properly.
+ */
+
+static unsigned char pontis_eeprom[] __devinitdata = {
+	0x08,	/* SYSCONF: clock 256, mpu401, spdif-in/ADC, 1DAC */
+	0x80,	/* ACLINK: I2S */
+	0xf8,	/* I2S: vol, 96k, 24bit, 192k */
+	0xc3,	/* SPDIF: out-en, out-int, spdif-in */
+	0x07,	/* GPIO_DIR */
+	0x00,	/* GPIO_DIR1 */
+	0x00,	/* GPIO_DIR2 (ignored) */
+	0x0f,	/* GPIO_MASK (4-7 reserved for CS8416) */
+	0xff,	/* GPIO_MASK1 */
+	0x00,	/* GPIO_MASK2 (ignored) */
+	0x06,	/* GPIO_STATE (0-low, 1-high, 2-high) */
+	0x00,	/* GPIO_STATE1 */
+	0x00,	/* GPIO_STATE2 (ignored) */
+};
+
+/* entry point */
+struct snd_ice1712_card_info snd_vt1720_pontis_cards[] __devinitdata = {
+	{
+		.subvendor = VT1720_SUBDEVICE_PONTIS_MS300,
+		.name = "Pontis MS300",
+		.model = "ms300",
+		.chip_init = pontis_init,
+		.build_controls = pontis_add_controls,
+		.eeprom_size = sizeof(pontis_eeprom),
+		.eeprom_data = pontis_eeprom,
+	},
+	{ } /* terminator */
+};
diff -Nru a/sound/pci/ice1712/pontis.h b/sound/pci/ice1712/pontis.h
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/sound/pci/ice1712/pontis.h	2004-08-04 17:48:49 -07:00
@@ -0,0 +1,33 @@
+#ifndef __SOUND_PONTIS_H
+#define __SOUND_PONTIS_H
+
+/*
+ *   ALSA driver for VIA VT1724 (Envy24HT)
+ *
+ *   Lowlevel functions for Pontis MS300 boards
+ *
+ *	Copyright (c) 2004 Takashi Iwai <tiwai@suse.de>
+ *
+ *   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
+ *
+ */      
+
+#define PONTIS_DEVICE_DESC 	       "{Pontis,MS300},"
+
+#define VT1720_SUBDEVICE_PONTIS_MS300	0x00020002	/* a dummy id for MS300 */
+
+extern struct snd_ice1712_card_info  snd_vt1720_pontis_cards[];
+
+#endif /* __SOUND_PONTIS_H */
diff -Nru a/sound/pci/ice1712/revo.c b/sound/pci/ice1712/revo.c
--- a/sound/pci/ice1712/revo.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/ice1712/revo.c	2004-08-04 17:48:49 -07:00
@@ -128,7 +128,7 @@
 	switch (ice->eeprom.subvendor) {
 	case VT1724_SUBDEVICE_REVOLUTION71:
 		ice->num_total_dacs = 8;
-		ice->num_total_adcs = 4;
+		ice->num_total_adcs = 2;
 		break;
 	default:
 		snd_BUG();
@@ -136,7 +136,7 @@
 	}
 
 	/* second stage of initialization, analog parts and others */
-	ak = ice->akm = snd_kcalloc(sizeof(akm4xxx_t) * 2, GFP_KERNEL);
+	ak = ice->akm = kcalloc(2, sizeof(akm4xxx_t), GFP_KERNEL);
 	if (! ak)
 		return -ENOMEM;
 	ice->akm_codecs = 2;
diff -Nru a/sound/pci/ice1712/vt1720_mobo.c b/sound/pci/ice1712/vt1720_mobo.c
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/sound/pci/ice1712/vt1720_mobo.c	2004-08-04 17:48:49 -07:00
@@ -0,0 +1,106 @@
+/*
+ *   ALSA driver for VT1720/VT1724 (Envy24PT/Envy24HT)
+ *
+ *   Lowlevel functions for VT1720-based motherboards
+ *
+ *	Copyright (c) 2004 Takashi Iwai <tiwai@suse.de>
+ *
+ *   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 "vt1720_mobo.h"
+
+
+static int __devinit k8x800_init(ice1712_t *ice)
+{
+	ice->vt1720 = 1;
+
+	/* VT1616 codec */
+	ice->num_total_dacs = 6;
+	ice->num_total_adcs = 2;
+
+	/* WM8728 codec */
+	/* FIXME: TODO */
+
+	return 0;
+}
+
+static int __devinit k8x800_add_controls(ice1712_t *ice)
+{
+	/* FIXME: needs some quirks for VT1616? */
+	return 0;
+}
+
+/* EEPROM image */
+
+static unsigned char k8x800_eeprom[] __devinitdata = {
+	0x01,	/* SYSCONF: clock 256, 1ADC, 2DACs */
+	0x02,	/* ACLINK: ACLINK, packed */
+	0x00,	/* I2S: - */
+	0x00,	/* SPDIF: - */
+	0xff,	/* GPIO_DIR */
+	0xff,	/* GPIO_DIR1 */
+	0x00,	/* - */
+	0xff,	/* GPIO_MASK */
+	0xff,	/* GPIO_MASK1 */
+	0x00,	/* - */
+	0x00,	/* GPIO_STATE */
+	0x00,	/* GPIO_STATE1 */
+	0x00,	/* - */
+};
+
+
+/* entry point */
+struct snd_ice1712_card_info snd_vt1720_mobo_cards[] __devinitdata = {
+	{
+		.subvendor = VT1720_SUBDEVICE_K8X800,
+		.name = "Albatron K8X800 Pro II",
+		.model = "k8x800",
+		.chip_init = k8x800_init,
+		.build_controls = k8x800_add_controls,
+		.eeprom_size = sizeof(k8x800_eeprom),
+		.eeprom_data = k8x800_eeprom,
+	},
+	{
+		.subvendor = VT1720_SUBDEVICE_ZNF3_150,
+		.name = "Chaintech ZNF3-150",
+		/* identical with k8x800 */
+		.chip_init = k8x800_init,
+		.build_controls = k8x800_add_controls,
+		.eeprom_size = sizeof(k8x800_eeprom),
+		.eeprom_data = k8x800_eeprom,
+	},
+	{
+		.subvendor = VT1720_SUBDEVICE_ZNF3_250,
+		.name = "Chaintech ZNF3-250",
+		/* identical with k8x800 */
+		.chip_init = k8x800_init,
+		.build_controls = k8x800_add_controls,
+		.eeprom_size = sizeof(k8x800_eeprom),
+		.eeprom_data = k8x800_eeprom,
+	},
+	{ } /* terminator */
+};
+
diff -Nru a/sound/pci/ice1712/vt1720_mobo.h b/sound/pci/ice1712/vt1720_mobo.h
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/sound/pci/ice1712/vt1720_mobo.h	2004-08-04 17:48:49 -07:00
@@ -0,0 +1,37 @@
+#ifndef __SOUND_VT1720_MOBO_H
+#define __SOUND_VT1720_MOBO_H
+
+/*
+ *   ALSA driver for VT1720/VT1724 (Envy24PT/Envy24HT)
+ *
+ *   Lowlevel functions for VT1720-based motherboards
+ *
+ *	Copyright (c) 2004 Takashi Iwai <tiwai@suse.de>
+ *
+ *   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
+ *
+ */      
+
+#define VT1720_MOBO_DEVICE_DESC        "{Albatron,K8X800 Pro II},"\
+				       "{Chaintech,ZNF3-150},"\
+				       "{Chaintech,ZNF3-250},"
+
+#define VT1720_SUBDEVICE_K8X800		0xf217052c
+#define VT1720_SUBDEVICE_ZNF3_150	0x0f2741f6
+#define VT1720_SUBDEVICE_ZNF3_250	0x0f2745f6
+
+extern struct snd_ice1712_card_info  snd_vt1720_mobo_cards[];
+
+#endif /* __SOUND_VT1720_MOBO_H */
diff -Nru a/sound/pci/intel8x0.c b/sound/pci/intel8x0.c
--- a/sound/pci/intel8x0.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/intel8x0.c	2004-08-04 17:48:49 -07:00
@@ -48,8 +48,7 @@
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("Intel 82801AA,82901AB,i810,i820,i830,i840,i845,MX440; SiS 7012; Ali 5455");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{Intel,82801AA-ICH},"
+MODULE_SUPPORTED_DEVICE("{{Intel,82801AA-ICH},"
 		"{Intel,82901AB-ICH0},"
 		"{Intel,82801BA-ICH2},"
 		"{Intel,82801CA-ICH3},"
@@ -75,6 +74,7 @@
 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
@@ -85,28 +85,23 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for Intel i8x0 soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for Intel i8x0 soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable Intel i8x0 soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(ac97_clock, int, boot_devs, 0444);
 MODULE_PARM_DESC(ac97_clock, "AC'97 codec clock (0 = auto-detect).");
-MODULE_PARM_SYNTAX(ac97_clock, SNDRV_ENABLED ",default:0");
 module_param_array(ac97_quirk, int, boot_devs, 0444);
 MODULE_PARM_DESC(ac97_quirk, "AC'97 workaround for strange hardware.");
-MODULE_PARM_SYNTAX(ac97_quirk, SNDRV_ENABLED ",allows:{{-1,4}},dialog:list,default:-1");
+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.");
-MODULE_PARM_SYNTAX(joystick, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC);
 #endif
 #ifdef SUPPORT_MIDI
 module_param_array(mpu_port, int, boot_devs, 0444);
 MODULE_PARM_DESC(mpu_port, "MPU401 port # for Intel i8x0 driver.");
-MODULE_PARM_SYNTAX(mpu_port, SNDRV_ENABLED ",allows:{{0},{0x330},{0x300}},dialog:list");
 #endif
 
 /*
@@ -146,9 +141,15 @@
 #ifndef PCI_DEVICE_ID_NVIDIA_MCP_AUDIO
 #define PCI_DEVICE_ID_NVIDIA_MCP_AUDIO	0x01b1
 #endif
+#ifndef PCI_DEVICE_ID_NVIDIA_CK804_AUDIO
+#define PCI_DEVICE_ID_NVIDIA_CK804_AUDIO 0x0059
+#endif
 #ifndef PCI_DEVICE_ID_NVIDIA_MCP2_AUDIO
 #define PCI_DEVICE_ID_NVIDIA_MCP2_AUDIO	0x006a
 #endif
+#ifndef PCI_DEVICE_ID_NVIDIA_CK8_AUDIO
+#define PCI_DEVICE_ID_NVIDIA_CK8_AUDIO	0x008a
+#endif
 #ifndef PCI_DEVICE_ID_NVIDIA_MCP3_AUDIO
 #define PCI_DEVICE_ID_NVIDIA_MCP3_AUDIO	0x00da
 #endif
@@ -397,25 +398,18 @@
 } ichdev_t;
 
 typedef struct _snd_intel8x0 intel8x0_t;
-#define chip_t intel8x0_t
 
 struct _snd_intel8x0 {
 	unsigned int device_type;
-	char ac97_name[32];
-	char ctrl_name[32];
 
 	int irq;
 
 	unsigned int mmio;
 	unsigned long addr;
 	unsigned long remap_addr;
-	struct resource *res;
 	unsigned int bm_mmio;
 	unsigned long bmaddr;
 	unsigned long remap_bmaddr;
-	struct resource *res_bm;
-
-	struct snd_dma_device dma_dev;
 
 	struct pci_dev *pci;
 	snd_card_t *card;
@@ -430,6 +424,7 @@
 	int in_ac97_init: 1,
 	    in_sdin_init: 1;
 	int fix_nocache: 1; /* workaround for 440MX */
+	int buggy_irq: 1; /* workaround for buggy mobos */
 
 	ac97_bus_t *ac97_bus;
 	ac97_t *ac97[3];
@@ -444,10 +439,6 @@
 	struct snd_dma_buffer bdbars;
 	u32 int_sta_reg;		/* interrupt status register */
 	u32 int_sta_mask;		/* interrupt status mask */
-
-#ifdef CONFIG_PM
-	u32 pci_state[64 / sizeof(u32)];
-#endif
 };
 
 static struct pci_device_id snd_intel8x0_ids[] = {
@@ -462,7 +453,10 @@
 	{ 0x8086, 0x7195, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL },	/* 440MX */
 	{ 0x1039, 0x7012, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_SIS },	/* SI7012 */
 	{ 0x10de, 0x01b1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_NFORCE },	/* NFORCE */
+	{ 0x10de, 0x003a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_NFORCE },	/* MCP04 */
 	{ 0x10de, 0x006a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_NFORCE },	/* NFORCE2 */
+	{ 0x10de, 0x0059, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_NFORCE },	/* CK804 */
+	{ 0x10de, 0x008a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_NFORCE },	/* CK8 */
 	{ 0x10de, 0x00da, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_NFORCE },	/* NFORCE3 */
 	{ 0x10de, 0x00ea, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_NFORCE },	/* CK8S */
 	{ 0x1022, 0x746d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL },	/* AMD8111 */
@@ -605,7 +599,7 @@
 				     unsigned short reg,
 				     unsigned short val)
 {
-	intel8x0_t *chip = snd_magic_cast(intel8x0_t, ac97->private_data, return);
+	intel8x0_t *chip = ac97->private_data;
 	
 	spin_lock(&chip->ac97_lock);
 	if (snd_intel8x0_codec_semaphore(chip, ac97->num) < 0) {
@@ -619,7 +613,7 @@
 static unsigned short snd_intel8x0_codec_read(ac97_t *ac97,
 					      unsigned short reg)
 {
-	intel8x0_t *chip = snd_magic_cast(intel8x0_t, ac97->private_data, return ~0);
+	intel8x0_t *chip = ac97->private_data;
 	unsigned short res;
 	unsigned int tmp;
 
@@ -642,6 +636,21 @@
 	return res;
 }
 
+static void snd_intel8x0_codec_read_test(intel8x0_t *chip, unsigned int codec)
+{
+	unsigned int tmp;
+
+	spin_lock(&chip->ac97_lock);
+	if (snd_intel8x0_codec_semaphore(chip, codec) >= 0) {
+		iagetword(chip, codec * 0x80);
+		if ((tmp = igetdword(chip, ICHREG(GLOB_STA))) & ICH_RCS) {
+			/* reset RCS and preserve other R/WC bits */
+			iputdword(chip, ICHREG(GLOB_STA), tmp & ~(ICH_SRI|ICH_PRI|ICH_TRI|ICH_GSCI));
+		}
+	}
+	spin_unlock(&chip->ac97_lock);
+}
+
 /*
  * access to AC97 for Ali5455
  */
@@ -669,7 +678,7 @@
 
 static unsigned short snd_intel8x0_ali_codec_read(ac97_t *ac97, unsigned short reg)
 {
-	intel8x0_t *chip = snd_magic_cast(intel8x0_t, ac97->private_data, return ~0);
+	intel8x0_t *chip = ac97->private_data;
 	unsigned short data = 0xffff;
 
 	spin_lock(&chip->ac97_lock);
@@ -689,7 +698,7 @@
 
 static void snd_intel8x0_ali_codec_write(ac97_t *ac97, unsigned short reg, unsigned short val)
 {
-	intel8x0_t *chip = snd_magic_cast(intel8x0_t, ac97->private_data, return);
+	intel8x0_t *chip = ac97->private_data;
 
 	spin_lock(&chip->ac97_lock);
 	if (snd_intel8x0_ali_codec_semaphore(chip)) {
@@ -778,6 +787,7 @@
 	int status, civ, i, step;
 	int ack = 0;
 
+	spin_lock(&chip->reg_lock);
 	status = igetbyte(chip, port + ichdev->roff_sr);
 	civ = igetbyte(chip, port + ICH_REG_OFF_CIV);
 	if (!(status & ICH_BCIS)) {
@@ -811,10 +821,9 @@
 			ack = 1;
 		}
 	}
+	spin_unlock(&chip->reg_lock);
 	if (ack && ichdev->substream) {
-		spin_unlock(&chip->reg_lock);
 		snd_pcm_period_elapsed(ichdev->substream);
-		spin_lock(&chip->reg_lock);
 	}
 	iputbyte(chip, port + ichdev->roff_sr,
 		 status & (ICH_FIFOE | ICH_BCIS | ICH_LVBCI));
@@ -822,24 +831,19 @@
 
 static irqreturn_t snd_intel8x0_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	intel8x0_t *chip = snd_magic_cast(intel8x0_t, dev_id, return IRQ_NONE);
+	intel8x0_t *chip = dev_id;
 	ichdev_t *ichdev;
 	unsigned int status;
 	unsigned int i;
 
-	spin_lock(&chip->reg_lock);
 	status = igetdword(chip, chip->int_sta_reg);
 	if ((status & chip->int_sta_mask) == 0) {
 		if (status) {
 			/* ack */
 			iputdword(chip, chip->int_sta_reg, status);
-			/* some Nforce[2] boards have problems when
-			   IRQ_NONE is returned here.
-			*/
-			if (chip->device_type != DEVICE_NFORCE)
+			if (! chip->buggy_irq)
 				status = 0;
 		}
-		spin_unlock(&chip->reg_lock);
 		return IRQ_RETVAL(status);
 	}
 
@@ -851,7 +855,6 @@
 
 	/* ack them */
 	iputdword(chip, chip->int_sta_reg, status & chip->int_sta_mask);
-	spin_unlock(&chip->reg_lock);
 	
 	return IRQ_HANDLED;
 }
@@ -1041,16 +1044,16 @@
 	ichdev->physbuf = runtime->dma_addr;
 	ichdev->size = snd_pcm_lib_buffer_bytes(substream);
 	ichdev->fragsize = snd_pcm_lib_period_bytes(substream);
+	spin_lock_irq(&chip->reg_lock);
 	if (ichdev->ichd == ICHD_PCMOUT) {
-		spin_lock(&chip->reg_lock);
 		snd_intel8x0_setup_pcm_out(chip, runtime->channels,
 					   runtime->sample_bits);
-		spin_unlock(&chip->reg_lock);
 		if (chip->device_type == DEVICE_INTEL_ICH4) {
 			ichdev->pos_shift = (runtime->sample_bits > 16) ? 2 : 1;
 		}
 	}
 	snd_intel8x0_setup_periods(chip, ichdev);
+	spin_unlock_irq(&chip->reg_lock);
 	return 0;
 }
 
@@ -1058,17 +1061,25 @@
 {
 	intel8x0_t *chip = snd_pcm_substream_chip(substream);
 	ichdev_t *ichdev = get_ichdev(substream);
-	unsigned long flags;
 	size_t ptr1, ptr;
+	int civ, timeout = 10;
+	unsigned int position;
 
-	ptr1 = igetword(chip, ichdev->reg_offset + ichdev->roff_picb) << ichdev->pos_shift;
-	if (ptr1 != 0)
-		ptr = ichdev->fragsize1 - ptr1;
-	else
-		ptr = 0;
-	spin_lock_irqsave(&chip->reg_lock, flags);
-	ptr += ichdev->position;
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_lock(&chip->reg_lock);
+	do {
+		civ = igetbyte(chip, ichdev->reg_offset + ICH_REG_OFF_CIV);
+		ptr1 = igetword(chip, ichdev->reg_offset + ichdev->roff_picb);
+		position = ichdev->position;
+		if (ptr1 == 0)
+			udelay(1);
+		if (civ == igetbyte(chip, ichdev->reg_offset + ICH_REG_OFF_CIV) &&
+		    ptr1 == igetword(chip, ichdev->reg_offset + ichdev->roff_picb))
+			break;
+	} while (timeout--);
+	ptr1 <<= ichdev->pos_shift;
+	ptr = ichdev->fragsize1 - ptr1;
+	ptr += position;
+	spin_unlock(&chip->reg_lock);
 	if (ptr >= ichdev->size)
 		return 0;
 	return bytes_to_frames(substream->runtime, ptr);
@@ -1099,10 +1110,8 @@
 	2, 4,
 };
 
-#define CHANNELS4 sizeof(channels4) / sizeof(channels4[0])
-
 static snd_pcm_hw_constraint_list_t hw_constraints_channels4 = {
-	.count = CHANNELS4,
+	.count = ARRAY_SIZE(channels4),
 	.list = channels4,
 	.mask = 0,
 };
@@ -1111,10 +1120,8 @@
 	2, 4, 6,
 };
 
-#define CHANNELS6 sizeof(channels6) / sizeof(channels6[0])
-
 static snd_pcm_hw_constraint_list_t hw_constraints_channels6 = {
-	.count = CHANNELS6,
+	.count = ARRAY_SIZE(channels6),
 	.list = channels6,
 	.mask = 0,
 };
@@ -1156,8 +1163,10 @@
 		runtime->hw.channels_max = 4;
 		snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS, &hw_constraints_channels4);
 	}
-	if (chip->smp20bit)
+	if (chip->smp20bit) {
 		runtime->hw.formats |= SNDRV_PCM_FMTBIT_S32_LE;
+		snd_pcm_hw_constraint_msbits(runtime, 0, 32, 20);
+	}
 	return 0;
 }
 
@@ -1249,14 +1258,14 @@
 static int snd_intel8x0_ali_ac97spdifout_open(snd_pcm_substream_t * substream)
 {
 	intel8x0_t *chip = snd_pcm_substream_chip(substream);
-	unsigned long flags;
 	unsigned int val;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	val = igetdword(chip, ICHREG(ALI_INTERFACECR));
 	val |= ICH_ALI_IF_AC97SP;
+	iputdword(chip, ICHREG(ALI_INTERFACECR), val);
 	/* also needs to set ALI_SC_CODEC_SPDF correctly */
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 
 	return snd_intel8x0_pcm_open(substream, &chip->ichd[ALID_AC97SPDIFOUT]);
 }
@@ -1264,14 +1273,14 @@
 static int snd_intel8x0_ali_ac97spdifout_close(snd_pcm_substream_t * substream)
 {
 	intel8x0_t *chip = snd_pcm_substream_chip(substream);
-	unsigned long flags;
 	unsigned int val;
 
 	chip->ichd[ALID_AC97SPDIFOUT].substream = NULL;
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	val = igetdword(chip, ICHREG(ALI_INTERFACECR));
 	val &= ~ICH_ALI_IF_AC97SP;
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	iputdword(chip, ICHREG(ALI_INTERFACECR), val);
+	spin_unlock_irq(&chip->reg_lock);
 
 	return 0;
 }
@@ -1627,13 +1636,13 @@
 
 static void snd_intel8x0_mixer_free_ac97_bus(ac97_bus_t *bus)
 {
-	intel8x0_t *chip = snd_magic_cast(intel8x0_t, bus->private_data, return);
+	intel8x0_t *chip = bus->private_data;
 	chip->ac97_bus = NULL;
 }
 
 static void snd_intel8x0_mixer_free_ac97(ac97_t *ac97)
 {
-	intel8x0_t *chip = snd_magic_cast(intel8x0_t, ac97->private_data, return);
+	intel8x0_t *chip = ac97->private_data;
 	chip->ac97[ac97->num] = NULL;
 }
 
@@ -1802,6 +1811,12 @@
 	},
 	{
 		.vendor = 0x8086,
+		.device = 0x4d56,
+		.name = "Intel ICH/AD1885",
+		.type = AC97_TUNE_HP_ONLY
+	},
+	{
+		.vendor = 0x8086,
 		.device = 0x6000,
 		.mask = 0xfff0,
 		.name = "Intel ICH5/AD1985",
@@ -1828,12 +1843,21 @@
 
 static int __devinit snd_intel8x0_mixer(intel8x0_t *chip, int ac97_clock, int ac97_quirk)
 {
-	ac97_bus_t bus, *pbus;
-	ac97_t ac97, *x97;
+	ac97_bus_t *pbus;
+	ac97_template_t ac97;
 	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,
+		.read = snd_intel8x0_codec_read,
+	};
+	static ac97_bus_ops_t ali_bus_ops = {
+		.write = snd_intel8x0_ali_codec_write,
+		.read = snd_intel8x0_ali_codec_read,
+	};
 
 	switch (chip->device_type) {
 	case DEVICE_NFORCE:
@@ -1849,13 +1873,6 @@
 	};
 
 	chip->in_ac97_init = 1;
-	memset(&bus, 0, sizeof(bus));
-	bus.private_data = chip;
-	bus.private_free = snd_intel8x0_mixer_free_ac97_bus;
-	if (ac97_clock >= 8000 && ac97_clock <= 48000)
-		bus.clock = ac97_clock;
-	else
-		bus.clock = 48000;
 	
 	memset(&ac97, 0, sizeof(ac97));
 	ac97.private_data = chip;
@@ -1863,8 +1880,7 @@
 	ac97.scaps = AC97_SCAP_SKIP_MODEM;
 	if (chip->device_type != DEVICE_ALI) {
 		glob_sta = igetdword(chip, ICHREG(GLOB_STA));
-		bus.write = snd_intel8x0_codec_write;
-		bus.read = snd_intel8x0_codec_read;
+		ops = &standard_bus_ops;
 		if (chip->device_type == DEVICE_INTEL_ICH4) {
 			codecs = 0;
 			if (glob_sta & ICH_PCR)
@@ -1875,19 +1891,15 @@
 				codecs++;
 			chip->in_sdin_init = 1;
 			for (i = 0; i < codecs; i++) {
-				ac97.num = i;
-				snd_intel8x0_codec_read(&ac97, 0);
+				snd_intel8x0_codec_read_test(chip, i);
 				chip->ac97_sdin[i] = igetbyte(chip, ICHREG(SDM)) & ICH_LDI_MASK;
 			}
-			ac97.num = 0;
 			chip->in_sdin_init = 0;
 		} else {
 			codecs = glob_sta & ICH_SCR ? 2 : 1;
 		}
-		bus.vra = 1;
 	} else {
-		bus.write = snd_intel8x0_ali_codec_write;
-		bus.read = snd_intel8x0_ali_codec_read;
+		ops = &ali_bus_ops;
 		codecs = 1;
 		/* detect the secondary codec */
 		for (i = 0; i < 100; i++) {
@@ -1899,23 +1911,28 @@
 			iputdword(chip, ICHREG(ALI_RTSR), reg | 0x40);
 			udelay(1);
 		}
-		/* FIXME: my test board doens't work well with VRA... */
-		bus.vra = 0;
 	}
-	if ((err = snd_ac97_bus(chip->card, &bus, &pbus)) < 0)
+	if ((err = snd_ac97_bus(chip->card, 0, ops, chip, &pbus)) < 0)
 		goto __err;
+	pbus->private_free = snd_intel8x0_mixer_free_ac97_bus;
+	pbus->shared_type = AC97_SHARED_TYPE_ICH;	/* shared with modem driver */
+	if (ac97_clock >= 8000 && ac97_clock <= 48000)
+		pbus->clock = ac97_clock;
+	/* FIXME: my test board doesn't work well with VRA... */
+	if (chip->device_type == DEVICE_ALI)
+		pbus->no_vra = 1;
 	chip->ac97_bus = pbus;
+
 	ac97.pci = chip->pci;
 	for (i = 0; i < codecs; i++) {
 		ac97.num = i;
-		if ((err = snd_ac97_mixer(pbus, &ac97, &x97)) < 0) {
+		if ((err = snd_ac97_mixer(pbus, &ac97, &chip->ac97[i])) < 0) {
 			if (err != -EACCES)
 				snd_printk(KERN_ERR "Unable to initialize codec #%d\n", i);
 			if (i == 0)
 				goto __err;
 			continue;
 		}
-		chip->ac97[i] = x97;
 	}
 	/* tune up the primary codec */
 	snd_ac97_tune_hardware(chip->ac97[0], ac97_quirks, ac97_quirk);
@@ -2179,26 +2196,19 @@
 	/* --- */
 	synchronize_irq(chip->irq);
       __hw_end:
+	if (chip->irq >= 0)
+		free_irq(chip->irq, (void *)chip);
 	if (chip->bdbars.area) {
 		if (chip->fix_nocache)
 			fill_nocache(chip->bdbars.area, chip->bdbars.bytes, 0);
-		snd_dma_free_pages(&chip->dma_dev, &chip->bdbars);
+		snd_dma_free_pages(&chip->bdbars);
 	}
 	if (chip->remap_addr)
 		iounmap((void *) chip->remap_addr);
 	if (chip->remap_bmaddr)
 		iounmap((void *) chip->remap_bmaddr);
-	if (chip->res) {
-		release_resource(chip->res);
-		kfree_nocheck(chip->res);
-	}
-	if (chip->res_bm) {
-		release_resource(chip->res_bm);
-		kfree_nocheck(chip->res_bm);
-	}
-	if (chip->irq >= 0)
-		free_irq(chip->irq, (void *)chip);
-	snd_magic_kfree(chip);
+	pci_release_regions(chip->pci);
+	kfree(chip);
 	return 0;
 }
 
@@ -2208,7 +2218,7 @@
  */
 static int intel8x0_suspend(snd_card_t *card, unsigned int state)
 {
-	intel8x0_t *chip = snd_magic_cast(intel8x0_t, card->pm_private_data, return -EINVAL);
+	intel8x0_t *chip = card->pm_private_data;
 	int i;
 
 	for (i = 0; i < chip->pcm_devs; i++)
@@ -2216,17 +2226,15 @@
 	for (i = 0; i < 3; i++)
 		if (chip->ac97[i])
 			snd_ac97_suspend(chip->ac97[i]);
-	pci_save_state(chip->pci, chip->pci_state);
 	snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
 	return 0;
 }
 
 static int intel8x0_resume(snd_card_t *card, unsigned int state)
 {
-	intel8x0_t *chip = snd_magic_cast(intel8x0_t, card->pm_private_data, return -EINVAL);
+	intel8x0_t *chip = card->pm_private_data;
 	int i;
 
-	pci_restore_state(chip->pci, chip->pci_state);
 	pci_enable_device(chip->pci);
 	pci_set_master(chip->pci);
 	snd_intel8x0_chip_init(chip, 0);
@@ -2264,7 +2272,6 @@
 	ichdev_t *ichdev;
 	unsigned long port;
 	unsigned long pos, t;
-	unsigned long flags;
 	struct timeval start_time, stop_time;
 
 	if (chip->ac97_bus->clock != 48000)
@@ -2287,7 +2294,7 @@
 	}
 	snd_intel8x0_setup_periods(chip, ichdev);
 	port = ichdev->reg_offset;
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	/* trigger */
 	if (chip->device_type != DEVICE_ALI)
 		iputbyte(chip, port + ICH_REG_OFF_CR, ICH_IOCE | ICH_STARTBM);
@@ -2296,7 +2303,7 @@
 		iputdword(chip, ICHREG(ALI_DMACR), 1 << ichdev->ali_slot);
 	}
 	do_gettimeofday(&start_time);
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 #if 0
 	set_current_state(TASK_UNINTERRUPTIBLE);
 	schedule_timeout(HZ / 20);
@@ -2304,7 +2311,7 @@
 	/* FIXME: schedule() can take too long time and overlap the boundary.. */
 	mdelay(50);
 #endif
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	/* check the position */
 	pos = ichdev->fragsize1;
 	pos -= igetword(chip, ichdev->reg_offset + ichdev->roff_picb) << ichdev->pos_shift;
@@ -2322,7 +2329,7 @@
 			;
 	}
 	iputbyte(chip, port + ICH_REG_OFF_CR, ICH_RESETREGS);
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 
 	t = stop_time.tv_sec - start_time.tv_sec;
 	t *= 1000000;
@@ -2346,7 +2353,7 @@
 static void snd_intel8x0_proc_read(snd_info_entry_t * entry,
 				   snd_info_buffer_t * buffer)
 {
-	intel8x0_t *chip = snd_magic_cast(intel8x0_t, entry->private_data, return);
+	intel8x0_t *chip = entry->private_data;
 	unsigned int tmp;
 
 	snd_iprintf(buffer, "Intel8x0\n\n");
@@ -2379,7 +2386,7 @@
 
 static int snd_intel8x0_dev_free(snd_device_t *device)
 {
-	intel8x0_t *chip = snd_magic_cast(intel8x0_t, device->device_data, return -ENXIO);
+	intel8x0_t *chip = device->device_data;
 	return snd_intel8x0_free(chip);
 }
 
@@ -2438,7 +2445,7 @@
 	if ((err = pci_enable_device(pci)) < 0)
 		return err;
 
-	chip = snd_magic_kcalloc(intel8x0_t, 0, GFP_KERNEL);
+	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
 	if (chip == NULL)
 		return -ENOMEM;
 	spin_lock_init(&chip->reg_lock);
@@ -2447,32 +2454,33 @@
 	chip->card = card;
 	chip->pci = pci;
 	chip->irq = -1;
-	snd_intel8x0_proc_init(chip);
-	sprintf(chip->ac97_name, "%s - AC'97", card->shortname);
-	sprintf(chip->ctrl_name, "%s - Controller", card->shortname);
+
 	if (pci->vendor == PCI_VENDOR_ID_INTEL &&
 	    pci->device == PCI_DEVICE_ID_INTEL_440MX)
 		chip->fix_nocache = 1; /* enable workaround */
+
+	/* some Nforce[2] and ICH boards have problems with IRQ handling.
+	 * Needs to return IRQ_HANDLED for unknown irqs.
+	 */
+	if (device_type == DEVICE_NFORCE)
+		chip->buggy_irq = 1;
+
+	if ((err = pci_request_regions(pci, card->shortname)) < 0) {
+		kfree(chip);
+		return err;
+	}
+
 	if (device_type == DEVICE_ALI) {
 		/* ALI5455 has no ac97 region */
 		chip->bmaddr = pci_resource_start(pci, 0);
-		if ((chip->res_bm = request_region(chip->bmaddr, 256, chip->ctrl_name)) == NULL) {
-			snd_printk("unable to grab ports 0x%lx-0x%lx\n", chip->bmaddr, chip->bmaddr + 64 - 1);
-			snd_intel8x0_free(chip);
-			return -EBUSY;
-		}
 		goto port_inited;
 	}
 
 	if (pci_resource_flags(pci, 2) & IORESOURCE_MEM) {	/* ICH4 and Nforce */
 		chip->mmio = 1;
 		chip->addr = pci_resource_start(pci, 2);
-		if ((chip->res = request_mem_region(chip->addr, 512, chip->ac97_name)) == NULL) {
-			snd_printk("unable to grab I/O memory 0x%lx-0x%lx\n", chip->addr, chip->addr + 512 - 1);
-			snd_intel8x0_free(chip);
-			return -EBUSY;
-		}
-		chip->remap_addr = (unsigned long) ioremap_nocache(chip->addr, 512);
+		chip->remap_addr = (unsigned long) ioremap_nocache(chip->addr,
+								   pci_resource_len(pci, 2));
 		if (chip->remap_addr == 0) {
 			snd_printk("AC'97 space ioremap problem\n");
 			snd_intel8x0_free(chip);
@@ -2480,21 +2488,12 @@
 		}
 	} else {
 		chip->addr = pci_resource_start(pci, 0);
-		if ((chip->res = request_region(chip->addr, 256, chip->ac97_name)) == NULL) {
-			snd_printk("unable to grab ports 0x%lx-0x%lx\n", chip->addr, chip->addr + 256 - 1);
-			snd_intel8x0_free(chip);
-			return -EBUSY;
-		}
 	}
 	if (pci_resource_flags(pci, 3) & IORESOURCE_MEM) {	/* ICH4 */
 		chip->bm_mmio = 1;
 		chip->bmaddr = pci_resource_start(pci, 3);
-		if ((chip->res_bm = request_mem_region(chip->bmaddr, 256, chip->ctrl_name)) == NULL) {
-			snd_printk("unable to grab I/O memory 0x%lx-0x%lx\n", chip->bmaddr, chip->bmaddr + 512 - 1);
-			snd_intel8x0_free(chip);
-			return -EBUSY;
-		}
-		chip->remap_bmaddr = (unsigned long) ioremap_nocache(chip->bmaddr, 256);
+		chip->remap_bmaddr = (unsigned long) ioremap_nocache(chip->bmaddr,
+								     pci_resource_len(pci, 3));
 		if (chip->remap_bmaddr == 0) {
 			snd_printk("Controller space ioremap problem\n");
 			snd_intel8x0_free(chip);
@@ -2502,11 +2501,6 @@
 		}
 	} else {
 		chip->bmaddr = pci_resource_start(pci, 1);
-		if ((chip->res_bm = request_region(chip->bmaddr, 64, chip->ctrl_name)) == NULL) {
-			snd_printk("unable to grab ports 0x%lx-0x%lx\n", chip->bmaddr, chip->bmaddr + 64 - 1);
-			snd_intel8x0_free(chip);
-			return -EBUSY;
-		}
 	}
 
  port_inited:
@@ -2552,13 +2546,11 @@
 		ichdev->pos_shift = (device_type == DEVICE_SIS) ? 0 : 1;
 	}
 
-	memset(&chip->dma_dev, 0, sizeof(chip->dma_dev));
-	chip->dma_dev.type = SNDRV_DMA_TYPE_DEV;
-	chip->dma_dev.dev = snd_dma_pci_data(pci);
-
 	/* allocate buffer descriptor lists */
 	/* the start of each lists must be aligned to 8 bytes */
-	if (snd_dma_alloc_pages(&chip->dma_dev, chip->bdbars_count * sizeof(u32) * ICH_MAX_FRAGS * 2, &chip->bdbars) < 0) {
+	if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci),
+				chip->bdbars_count * sizeof(u32) * ICH_MAX_FRAGS * 2,
+				&chip->bdbars) < 0) {
 		snd_intel8x0_free(chip);
 		snd_printk(KERN_ERR "intel8x0: cannot allocate buffer descriptors\n");
 		return -ENOMEM;
@@ -2614,6 +2606,9 @@
 	{ PCI_DEVICE_ID_NVIDIA_MCP2_AUDIO, "NVidia nForce2" },
 	{ PCI_DEVICE_ID_NVIDIA_MCP3_AUDIO, "NVidia nForce3" },
 	{ PCI_DEVICE_ID_NVIDIA_CK8S_AUDIO, "NVidia CK8S" },
+	{ PCI_DEVICE_ID_NVIDIA_CK804_AUDIO, "NVidia CK804" },
+	{ PCI_DEVICE_ID_NVIDIA_CK8_AUDIO, "NVidia CK8" },
+	{ 0x003a, "NVidia MCP04" },
 	{ 0x746d, "AMD AMD8111" },
 	{ 0x7445, "AMD AMD768" },
 	{ 0x5455, "ALi M5455" },
@@ -2661,6 +2656,8 @@
 		snd_card_free(card);
 		return err;
 	}
+	if (buggy_irq[dev])
+		chip->buggy_irq = 1;
 
 	if ((err = snd_intel8x0_mixer(chip, ac97_clock[dev], ac97_quirk[dev])) < 0) {
 		snd_card_free(card);
@@ -2680,6 +2677,8 @@
 		}
 	} 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);
diff -Nru a/sound/pci/intel8x0m.c b/sound/pci/intel8x0m.c
--- a/sound/pci/intel8x0m.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/intel8x0m.c	2004-08-04 17:48:49 -07:00
@@ -42,8 +42,7 @@
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("Intel 82801AA,82901AB,i810,i820,i830,i840,i845,MX440 modem");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{Intel,82801AA-ICH},"
+MODULE_SUPPORTED_DEVICE("{{Intel,82801AA-ICH},"
 		"{Intel,82901AB-ICH0},"
 		"{Intel,82801BA-ICH2},"
 		"{Intel,82801CA-ICH3},"
@@ -60,16 +59,12 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for Intel i8x0 modemcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for Intel i8x0 modemcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable Intel i8x0 modemcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(ac97_clock, int, boot_devs, 0444);
 MODULE_PARM_DESC(ac97_clock, "AC'97 codec clock (0 = auto-detect).");
-MODULE_PARM_SYNTAX(ac97_clock, SNDRV_ENABLED ",default:0");
 
 /*
  *  Direct registers
@@ -228,23 +223,18 @@
 } ichdev_t;
 
 typedef struct _snd_intel8x0m intel8x0_t;
-#define chip_t intel8x0_t
 
 struct _snd_intel8x0m {
 	unsigned int device_type;
-	char ac97_name[64];
-	char ctrl_name[64];
 
 	int irq;
 
 	unsigned int mmio;
 	unsigned long addr;
 	unsigned long remap_addr;
-	struct resource *res;
 	unsigned int bm_mmio;
 	unsigned long bmaddr;
 	unsigned long remap_bmaddr;
-	struct resource *res_bm;
 
 	struct pci_dev *pci;
 	snd_card_t *card;
@@ -261,7 +251,6 @@
 	spinlock_t reg_lock;
 	spinlock_t ac97_lock;
 	
-	struct snd_dma_device dma_dev;
 	struct snd_dma_buffer bdbars;
 	u32 bdbars_count;
 	u32 int_sta_reg;		/* interrupt status register */
@@ -281,9 +270,12 @@
 #if 0
 	/* TODO: support needed */
 	{ 0x1039, 0x7013, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_SIS },	/* SI7013 */
-	{ 0x10de, 0x01b1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_NFORCE },	/* NFORCE */
-	{ 0x10de, 0x006a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_NFORCE },	/* NFORCE2 */
-	{ 0x10de, 0x00da, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_NFORCE },	/* NFORCE3 */
+#endif
+	{ 0x10de, 0x01c1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_NFORCE }, /* NFORCE */
+	{ 0x10de, 0x0069, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_NFORCE }, /* NFORCE2 */
+	{ 0x10de, 0x0089, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_NFORCE }, /* NFORCE2s */
+	{ 0x10de, 0x00d9, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_NFORCE }, /* NFORCE3 */
+#if 0
 	{ 0x1022, 0x746d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL },	/* AMD8111 */
 	{ 0x10b9, 0x5455, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_ALI },   /* Ali5455 */
 #endif
@@ -408,7 +400,7 @@
 				     unsigned short reg,
 				     unsigned short val)
 {
-	intel8x0_t *chip = snd_magic_cast(intel8x0_t, ac97->private_data, return);
+	intel8x0_t *chip = ac97->private_data;
 	
 	spin_lock(&chip->ac97_lock);
 	if (snd_intel8x0m_codec_semaphore(chip, ac97->num) < 0) {
@@ -422,7 +414,7 @@
 static unsigned short snd_intel8x0_codec_read(ac97_t *ac97,
 					      unsigned short reg)
 {
-	intel8x0_t *chip = snd_magic_cast(intel8x0_t, ac97->private_data, return ~0);
+	intel8x0_t *chip = ac97->private_data;
 	unsigned short res;
 	unsigned int tmp;
 
@@ -542,7 +534,7 @@
 
 static irqreturn_t snd_intel8x0_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	intel8x0_t *chip = snd_magic_cast(intel8x0_t, dev_id, return IRQ_NONE);
+	intel8x0_t *chip = dev_id;
 	ichdev_t *ichdev;
 	unsigned int status;
 	unsigned int i;
@@ -872,32 +864,30 @@
 
 static void snd_intel8x0_mixer_free_ac97_bus(ac97_bus_t *bus)
 {
-	intel8x0_t *chip = snd_magic_cast(intel8x0_t, bus->private_data, return);
+	intel8x0_t *chip = bus->private_data;
 	chip->ac97_bus = NULL;
 }
 
 static void snd_intel8x0_mixer_free_ac97(ac97_t *ac97)
 {
-	intel8x0_t *chip = snd_magic_cast(intel8x0_t, ac97->private_data, return);
+	intel8x0_t *chip = ac97->private_data;
 	chip->ac97 = NULL;
 }
 
 
 static int __devinit snd_intel8x0_mixer(intel8x0_t *chip, int ac97_clock)
 {
-	ac97_bus_t bus, *pbus;
-	ac97_t ac97, *x97;
+	ac97_bus_t *pbus;
+	ac97_template_t ac97;
+	ac97_t *x97;
 	int err;
 	unsigned int glob_sta = 0;
+	static ac97_bus_ops_t ops = {
+		.write = snd_intel8x0_codec_write,
+		.read = snd_intel8x0_codec_read,
+	};
 
 	chip->in_ac97_init = 1;
-	memset(&bus, 0, sizeof(bus));
-	bus.private_data = chip;
-	bus.private_free = snd_intel8x0_mixer_free_ac97_bus;
-	if (ac97_clock >= 8000 && ac97_clock <= 48000)
-		bus.clock = ac97_clock;
-	else
-		bus.clock = 48000;
 	
 	memset(&ac97, 0, sizeof(ac97));
 	ac97.private_data = chip;
@@ -905,13 +895,15 @@
 	ac97.scaps = AC97_SCAP_SKIP_AUDIO;
 
 	glob_sta = igetdword(chip, ICHREG(GLOB_STA));
-	bus.write = snd_intel8x0_codec_write;
-	bus.read = snd_intel8x0_codec_read;
-	bus.vra = 1;
 
-	if ((err = snd_ac97_bus(chip->card, &bus, &pbus)) < 0)
+	if ((err = snd_ac97_bus(chip->card, 0, &ops, chip, &pbus)) < 0)
 		goto __err;
+	pbus->private_free = snd_intel8x0_mixer_free_ac97_bus;
+	pbus->shared_type = AC97_SHARED_TYPE_ICH;	/* shared with audio driver */
+	if (ac97_clock >= 8000 && ac97_clock <= 48000)
+		pbus->clock = ac97_clock;
 	chip->ac97_bus = pbus;
+
 	ac97.pci = chip->pci;
 	ac97.num = glob_sta & ICH_SCR ? 1 : 0;
 	if ((err = snd_ac97_mixer(pbus, &ac97, &x97)) < 0) {
@@ -1056,22 +1048,15 @@
 	synchronize_irq(chip->irq);
       __hw_end:
 	if (chip->bdbars.area)
-		snd_dma_free_pages(&chip->dma_dev, &chip->bdbars);
+		snd_dma_free_pages(&chip->bdbars);
 	if (chip->remap_addr)
 		iounmap((void *) chip->remap_addr);
 	if (chip->remap_bmaddr)
 		iounmap((void *) chip->remap_bmaddr);
-	if (chip->res) {
-		release_resource(chip->res);
-		kfree_nocheck(chip->res);
-	}
-	if (chip->res_bm) {
-		release_resource(chip->res_bm);
-		kfree_nocheck(chip->res_bm);
-	}
 	if (chip->irq >= 0)
 		free_irq(chip->irq, (void *)chip);
-	snd_magic_kfree(chip);
+	pci_release_regions(chip->pci);
+	kfree(chip);
 	return 0;
 }
 
@@ -1081,7 +1066,7 @@
  */
 static int intel8x0m_suspend(snd_card_t *card, unsigned int state)
 {
-	intel8x0_t *chip = snd_magic_cast(intel8x0_t, card->pm_private_data, return -EINVAL);
+	intel8x0_t *chip = card->pm_private_data;
 	int i;
 
 	for (i = 0; i < chip->pcm_devs; i++)
@@ -1094,7 +1079,7 @@
 
 static int intel8x0m_resume(snd_card_t *card, unsigned int state)
 {
-	intel8x0_t *chip = snd_magic_cast(intel8x0_t, card->pm_private_data, return -EINVAL);
+	intel8x0_t *chip = card->pm_private_data;
 	pci_enable_device(chip->pci);
 	pci_set_master(chip->pci);
 	snd_intel8x0_chip_init(chip, 0);
@@ -1109,7 +1094,7 @@
 static void snd_intel8x0m_proc_read(snd_info_entry_t * entry,
 				   snd_info_buffer_t * buffer)
 {
-	intel8x0_t *chip = snd_magic_cast(intel8x0_t, entry->private_data, return);
+	intel8x0_t *chip = entry->private_data;
 	unsigned int tmp;
 
 	snd_iprintf(buffer, "Intel8x0m\n\n");
@@ -1135,7 +1120,7 @@
 
 static int snd_intel8x0_dev_free(snd_device_t *device)
 {
-	intel8x0_t *chip = snd_magic_cast(intel8x0_t, device->device_data, return -ENXIO);
+	intel8x0_t *chip = device->device_data;
 	return snd_intel8x0_free(chip);
 }
 
@@ -1168,7 +1153,7 @@
 	if ((err = pci_enable_device(pci)) < 0)
 		return err;
 
-	chip = snd_magic_kcalloc(intel8x0_t, 0, GFP_KERNEL);
+	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
 	if (chip == NULL)
 		return -ENOMEM;
 	spin_lock_init(&chip->reg_lock);
@@ -1177,29 +1162,23 @@
 	chip->card = card;
 	chip->pci = pci;
 	chip->irq = -1;
-	snd_intel8x0m_proc_init(chip);
-	sprintf(chip->ac97_name, "%s - AC'97", card->shortname);
-	sprintf(chip->ctrl_name, "%s - Controller", card->shortname);
+
+	if ((err = pci_request_regions(pci, card->shortname)) < 0) {
+		kfree(chip);
+		return err;
+	}
+
 	if (device_type == DEVICE_ALI) {
 		/* ALI5455 has no ac97 region */
 		chip->bmaddr = pci_resource_start(pci, 0);
-		if ((chip->res_bm = request_region(chip->bmaddr, 256, chip->ctrl_name)) == NULL) {
-			snd_printk("unable to grab ports 0x%lx-0x%lx\n", chip->bmaddr, chip->bmaddr + 256 - 1);
-			snd_intel8x0_free(chip);
-			return -EBUSY;
-		}
 		goto port_inited;
 	}
 
 	if (pci_resource_flags(pci, 2) & IORESOURCE_MEM) {	/* ICH4 and Nforce */
 		chip->mmio = 1;
 		chip->addr = pci_resource_start(pci, 2);
-		if ((chip->res = request_mem_region(chip->addr, 512, chip->ac97_name)) == NULL) {
-			snd_printk("unable to grab I/O memory 0x%lx-0x%lx\n", chip->addr, chip->addr + 512 - 1);
-			snd_intel8x0_free(chip);
-			return -EBUSY;
-		}
-		chip->remap_addr = (unsigned long) ioremap_nocache(chip->addr, 512);
+		chip->remap_addr = (unsigned long) ioremap_nocache(chip->addr,
+								   pci_resource_len(pci, 2));
 		if (chip->remap_addr == 0) {
 			snd_printk("AC'97 space ioremap problem\n");
 			snd_intel8x0_free(chip);
@@ -1207,21 +1186,12 @@
 		}
 	} else {
 		chip->addr = pci_resource_start(pci, 0);
-		if ((chip->res = request_region(chip->addr, 256, chip->ac97_name)) == NULL) {
-			snd_printk("unable to grab ports 0x%lx-0x%lx\n", chip->addr, chip->addr + 256 - 1);
-			snd_intel8x0_free(chip);
-			return -EBUSY;
-		}
 	}
 	if (pci_resource_flags(pci, 3) & IORESOURCE_MEM) {	/* ICH4 */
 		chip->bm_mmio = 1;
 		chip->bmaddr = pci_resource_start(pci, 3);
-		if ((chip->res_bm = request_mem_region(chip->bmaddr, 256, chip->ctrl_name)) == NULL) {
-			snd_printk("unable to grab I/O memory 0x%lx-0x%lx\n", chip->bmaddr, chip->bmaddr + 512 - 1);
-			snd_intel8x0_free(chip);
-			return -EBUSY;
-		}
-		chip->remap_bmaddr = (unsigned long) ioremap_nocache(chip->bmaddr, 256);
+		chip->remap_bmaddr = (unsigned long) ioremap_nocache(chip->bmaddr,
+								     pci_resource_len(pci, 3));
 		if (chip->remap_bmaddr == 0) {
 			snd_printk("Controller space ioremap problem\n");
 			snd_intel8x0_free(chip);
@@ -1229,11 +1199,6 @@
 		}
 	} else {
 		chip->bmaddr = pci_resource_start(pci, 1);
-		if ((chip->res_bm = request_region(chip->bmaddr, 128, chip->ctrl_name)) == NULL) {
-			snd_printk("unable to grab ports 0x%lx-0x%lx\n", chip->bmaddr, chip->bmaddr + 128 - 1);
-			snd_intel8x0_free(chip);
-			return -EBUSY;
-		}
 	}
 
  port_inited:
@@ -1271,10 +1236,9 @@
 
 	/* allocate buffer descriptor lists */
 	/* the start of each lists must be aligned to 8 bytes */
-	memset(&chip->dma_dev, 0, sizeof(chip->dma_dev));
-	chip->dma_dev.type = SNDRV_DMA_TYPE_DEV;
-	chip->dma_dev.dev = snd_dma_pci_data(pci);
-	if (snd_dma_alloc_pages(&chip->dma_dev, chip->bdbars_count * sizeof(u32) * ICH_MAX_FRAGS * 2, &chip->bdbars) < 0) {
+	if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci),
+				chip->bdbars_count * sizeof(u32) * ICH_MAX_FRAGS * 2,
+				&chip->bdbars) < 0) {
 		snd_intel8x0_free(chip);
 		return -ENOMEM;
 	}
@@ -1353,10 +1317,10 @@
 
 	switch (pci_id->driver_data) {
 	case DEVICE_NFORCE:
-		strcpy(card->driver, "NFORCE");
+		strcpy(card->driver, "NFORCE-MODEM");
 		break;
 	default:
-		strcpy(card->driver, "ICH");
+		strcpy(card->driver, "ICH-MODEM");
 		break;
 	}
 
@@ -1383,6 +1347,8 @@
 		return err;
 	}
 	
+	snd_intel8x0m_proc_init(chip);
+
 	sprintf(card->longname, "%s at 0x%lx, irq %i",
 		card->shortname, chip->addr, chip->irq);
 
diff -Nru a/sound/pci/korg1212/korg1212.c b/sound/pci/korg1212/korg1212.c
--- a/sound/pci/korg1212/korg1212.c	2004-08-04 17:48:48 -07:00
+++ b/sound/pci/korg1212/korg1212.c	2004-08-04 17:48:48 -07:00
@@ -343,12 +343,6 @@
         unsigned long inIRQ;
         unsigned long iobase;
 
-	struct resource *res_iomem;
-	struct resource *res_ioport;
-	struct resource *res_iomem2;
-
-	struct snd_dma_device dma_dev;
-
 	struct snd_dma_buffer dma_dsp;
         struct snd_dma_buffer dma_play;
         struct snd_dma_buffer dma_rec;
@@ -411,8 +405,7 @@
 
 MODULE_DESCRIPTION("korg1212");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{KORG,korg1212}}");
+MODULE_SUPPORTED_DEVICE("{{KORG,korg1212}}");
 
 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;     /* Index 0-MAX */
 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;	   /* ID for this card */
@@ -421,13 +414,10 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for Korg 1212 soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for Korg 1212 soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable Korg 1212 soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 MODULE_AUTHOR("Haroldo Gamal <gamal@alternex.com.br>");
 
 static struct pci_device_id snd_korg1212_ids[] = {
@@ -637,7 +627,7 @@
 /* timer callback for checking the ack of stop request */
 static void snd_korg1212_timer_func(unsigned long data)
 {
-        korg1212_t *korg1212 = snd_magic_cast(korg1212_t, (void*)data, return);
+        korg1212_t *korg1212 = (korg1212_t *) data;
 	
 	spin_lock(&korg1212->lock);
 	if (readl(&korg1212->sharedBufferPtr->cardCommand) == 0) {
@@ -1143,7 +1133,7 @@
 static irqreturn_t snd_korg1212_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
         u32 doorbellValue;
-        korg1212_t *korg1212 = snd_magic_cast(korg1212_t, dev_id, return IRQ_NONE);
+        korg1212_t *korg1212 = dev_id;
 
 	if(irq != korg1212->irq)
 		return IRQ_NONE;
@@ -1407,7 +1397,7 @@
 static int snd_korg1212_playback_open(snd_pcm_substream_t *substream)
 {
         unsigned long flags;
-        korg1212_t *korg1212 = _snd_pcm_substream_chip(substream);
+        korg1212_t *korg1212 = snd_pcm_substream_chip(substream);
         snd_pcm_runtime_t *runtime = substream->runtime;
 
 #if K1212_DEBUG_LEVEL > 0
@@ -1419,8 +1409,7 @@
 	snd_korg1212_OpenCard(korg1212);
 
         runtime->hw = snd_korg1212_playback_info;
-	runtime->dma_area = (char *) korg1212->playDataBufsPtr;
-	runtime->dma_bytes = K1212_BUF_SIZE;
+	snd_pcm_set_runtime_buffer(substream, &korg1212->dma_play);
 
         spin_lock_irqsave(&korg1212->lock, flags);
 
@@ -1438,7 +1427,7 @@
 static int snd_korg1212_capture_open(snd_pcm_substream_t *substream)
 {
         unsigned long flags;
-        korg1212_t *korg1212 = _snd_pcm_substream_chip(substream);
+        korg1212_t *korg1212 = snd_pcm_substream_chip(substream);
         snd_pcm_runtime_t *runtime = substream->runtime;
 
 #if K1212_DEBUG_LEVEL > 0
@@ -1450,8 +1439,7 @@
 	snd_korg1212_OpenCard(korg1212);
 
         runtime->hw = snd_korg1212_capture_info;
-	runtime->dma_area = (char *) korg1212->recordDataBufsPtr;
-	runtime->dma_bytes = K1212_BUF_SIZE;
+	snd_pcm_set_runtime_buffer(substream, &korg1212->dma_rec);
 
         spin_lock_irqsave(&korg1212->lock, flags);
 
@@ -1468,7 +1456,7 @@
 static int snd_korg1212_playback_close(snd_pcm_substream_t *substream)
 {
         unsigned long flags;
-        korg1212_t *korg1212 = _snd_pcm_substream_chip(substream);
+        korg1212_t *korg1212 = snd_pcm_substream_chip(substream);
 
 #if K1212_DEBUG_LEVEL > 0
 		K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_playback_close [%s]\n", stateName[korg1212->cardState]);
@@ -1490,7 +1478,7 @@
 static int snd_korg1212_capture_close(snd_pcm_substream_t *substream)
 {
         unsigned long flags;
-        korg1212_t *korg1212 = _snd_pcm_substream_chip(substream);
+        korg1212_t *korg1212 = snd_pcm_substream_chip(substream);
 
 #if K1212_DEBUG_LEVEL > 0
 		K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_capture_close [%s]\n", stateName[korg1212->cardState]);
@@ -1532,7 +1520,7 @@
                              snd_pcm_hw_params_t *params)
 {
         unsigned long flags;
-        korg1212_t *korg1212 = _snd_pcm_substream_chip(substream);
+        korg1212_t *korg1212 = snd_pcm_substream_chip(substream);
         int err;
 
 #if K1212_DEBUG_LEVEL > 0
@@ -1560,21 +1548,21 @@
 
 static int snd_korg1212_prepare(snd_pcm_substream_t *substream)
 {
-        korg1212_t *korg1212 = _snd_pcm_substream_chip(substream);
+        korg1212_t *korg1212 = snd_pcm_substream_chip(substream);
 	int rc;
 
 #if K1212_DEBUG_LEVEL > 0
 		K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_prepare [%s]\n", stateName[korg1212->cardState]);
 #endif
 
-        spin_lock(&korg1212->lock);
+	spin_lock_irq(&korg1212->lock);
 
 	/* FIXME: we should wait for ack! */
 	if (korg1212->stop_pending_cnt > 0) {
 #if K1212_DEBUG_LEVEL > 0
 		K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_prepare - Stop is pending... [%s]\n", stateName[korg1212->cardState]);
 #endif
-        	spin_unlock(&korg1212->lock);
+        	spin_unlock_irq(&korg1212->lock);
 		return -EAGAIN;
 		/*
 		writel(0, &korg1212->sharedBufferPtr->cardCommand);
@@ -1587,7 +1575,7 @@
 
         korg1212->currentBuffer = 0;
 
-        spin_unlock(&korg1212->lock);
+        spin_unlock_irq(&korg1212->lock);
 
 	return rc ? -EINVAL : 0;
 }
@@ -1595,7 +1583,7 @@
 static int snd_korg1212_trigger(snd_pcm_substream_t *substream,
                            int cmd)
 {
-        korg1212_t *korg1212 = _snd_pcm_substream_chip(substream);
+        korg1212_t *korg1212 = snd_pcm_substream_chip(substream);
 	int rc;
 
 #if K1212_DEBUG_LEVEL > 0
@@ -1640,7 +1628,7 @@
 
 static snd_pcm_uframes_t snd_korg1212_playback_pointer(snd_pcm_substream_t *substream)
 {
-        korg1212_t *korg1212 = _snd_pcm_substream_chip(substream);
+        korg1212_t *korg1212 = snd_pcm_substream_chip(substream);
         snd_pcm_uframes_t pos;
 
 	pos = korg1212->currentBuffer * kPlayBufferFrames;
@@ -1655,7 +1643,7 @@
 
 static snd_pcm_uframes_t snd_korg1212_capture_pointer(snd_pcm_substream_t *substream)
 {
-        korg1212_t *korg1212 = _snd_pcm_substream_chip(substream);
+        korg1212_t *korg1212 = snd_pcm_substream_chip(substream);
         snd_pcm_uframes_t pos;
 
 	pos = korg1212->currentBuffer * kPlayBufferFrames;
@@ -1674,7 +1662,7 @@
                         void __user *src,
                         snd_pcm_uframes_t count)
 {
-        korg1212_t *korg1212 = _snd_pcm_substream_chip(substream);
+        korg1212_t *korg1212 = snd_pcm_substream_chip(substream);
 
 #if K1212_DEBUG_LEVEL > 2
 		K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_playback_copy [%s] %ld %ld\n", stateName[korg1212->cardState], pos, count);
@@ -1689,7 +1677,7 @@
                            snd_pcm_uframes_t pos,
                            snd_pcm_uframes_t count)
 {
-        korg1212_t *korg1212 = _snd_pcm_substream_chip(substream);
+        korg1212_t *korg1212 = snd_pcm_substream_chip(substream);
 
 #if K1212_DEBUG_LEVEL > 0
 		K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_playback_silence [%s]\n", stateName[korg1212->cardState]);
@@ -1704,7 +1692,7 @@
                         void __user *dst,
                         snd_pcm_uframes_t count)
 {
-        korg1212_t *korg1212 = _snd_pcm_substream_chip(substream);
+        korg1212_t *korg1212 = snd_pcm_substream_chip(substream);
 
 #if K1212_DEBUG_LEVEL > 2
 		K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_capture_copy [%s] %ld %ld\n", stateName[korg1212->cardState], pos, count);
@@ -1749,30 +1737,28 @@
 
 static int snd_korg1212_control_phase_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *u)
 {
-	korg1212_t *korg1212 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	korg1212_t *korg1212 = snd_kcontrol_chip(kcontrol);
 	int i = kcontrol->private_value;
 
-	spin_lock_irqsave(&korg1212->lock, flags);
+	spin_lock_irq(&korg1212->lock);
 
         u->value.integer.value[0] = korg1212->volumePhase[i];
 
 	if (i >= 8)
         	u->value.integer.value[1] = korg1212->volumePhase[i+1];
 
-        spin_unlock_irqrestore(&korg1212->lock, flags);
+	spin_unlock_irq(&korg1212->lock);
 
         return 0;
 }
 
 static int snd_korg1212_control_phase_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *u)
 {
-	korg1212_t *korg1212 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	korg1212_t *korg1212 = snd_kcontrol_chip(kcontrol);
         int change = 0;
         int i, val;
 
-	spin_lock_irqsave(&korg1212->lock, flags);
+	spin_lock_irq(&korg1212->lock);
 
 	i = kcontrol->private_value;
 
@@ -1798,7 +1784,7 @@
 		}
 	}
 
-	spin_unlock_irqrestore(&korg1212->lock, flags);
+	spin_unlock_irq(&korg1212->lock);
 
         return change;
 }
@@ -1814,11 +1800,10 @@
 
 static int snd_korg1212_control_volume_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *u)
 {
-	korg1212_t *korg1212 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	korg1212_t *korg1212 = snd_kcontrol_chip(kcontrol);
         int i;
 
-	spin_lock_irqsave(&korg1212->lock, flags);
+	spin_lock_irq(&korg1212->lock);
 
 	i = kcontrol->private_value;
         u->value.integer.value[0] = abs(korg1212->sharedBufferPtr->volumeData[i]);
@@ -1826,20 +1811,19 @@
 	if (i >= 8) 
                 u->value.integer.value[1] = abs(korg1212->sharedBufferPtr->volumeData[i+1]);
 
-        spin_unlock_irqrestore(&korg1212->lock, flags);
+        spin_unlock_irq(&korg1212->lock);
 
         return 0;
 }
 
 static int snd_korg1212_control_volume_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *u)
 {
-	korg1212_t *korg1212 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	korg1212_t *korg1212 = snd_kcontrol_chip(kcontrol);
         int change = 0;
         int i;
 	int val;
 
-	spin_lock_irqsave(&korg1212->lock, flags);
+	spin_lock_irq(&korg1212->lock);
 
 	i = kcontrol->private_value;
 
@@ -1859,7 +1843,7 @@
 		}
 	}
 
-	spin_unlock_irqrestore(&korg1212->lock, flags);
+	spin_unlock_irq(&korg1212->lock);
 
         return change;
 }
@@ -1878,11 +1862,10 @@
 
 static int snd_korg1212_control_route_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *u)
 {
-	korg1212_t *korg1212 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	korg1212_t *korg1212 = snd_kcontrol_chip(kcontrol);
         int i;
 
-	spin_lock_irqsave(&korg1212->lock, flags);
+	spin_lock_irq(&korg1212->lock);
 
 	i = kcontrol->private_value;
 	u->value.enumerated.item[0] = korg1212->sharedBufferPtr->routeData[i];
@@ -1890,18 +1873,17 @@
 	if (i >= 8) 
 		u->value.enumerated.item[1] = korg1212->sharedBufferPtr->routeData[i+1];
 
-        spin_unlock_irqrestore(&korg1212->lock, flags);
+        spin_unlock_irq(&korg1212->lock);
 
         return 0;
 }
 
 static int snd_korg1212_control_route_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *u)
 {
-	korg1212_t *korg1212 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	korg1212_t *korg1212 = snd_kcontrol_chip(kcontrol);
         int change = 0, i;
 
-	spin_lock_irqsave(&korg1212->lock, flags);
+	spin_lock_irq(&korg1212->lock);
 
 	i = kcontrol->private_value;
 
@@ -1917,7 +1899,7 @@
 		}
 	}
 
-	spin_unlock_irqrestore(&korg1212->lock, flags);
+	spin_unlock_irq(&korg1212->lock);
 
         return change;
 }
@@ -1933,26 +1915,24 @@
 
 static int snd_korg1212_control_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *u)
 {
-	korg1212_t *korg1212 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	korg1212_t *korg1212 = snd_kcontrol_chip(kcontrol);
 
-	spin_lock_irqsave(&korg1212->lock, flags);
+	spin_lock_irq(&korg1212->lock);
 
         u->value.integer.value[0] = korg1212->leftADCInSens;
         u->value.integer.value[1] = korg1212->rightADCInSens;
 
-        spin_unlock_irqrestore(&korg1212->lock, flags);
+	spin_unlock_irq(&korg1212->lock);
 
         return 0;
 }
 
 static int snd_korg1212_control_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *u)
 {
-	korg1212_t *korg1212 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	korg1212_t *korg1212 = snd_kcontrol_chip(kcontrol);
         int change = 0;
 
-	spin_lock_irqsave(&korg1212->lock, flags);
+	spin_lock_irq(&korg1212->lock);
 
         if (u->value.integer.value[0] != korg1212->leftADCInSens) {
                 korg1212->leftADCInSens = u->value.integer.value[0];
@@ -1963,7 +1943,7 @@
                 change = 1;
         }
 
-	spin_unlock_irqrestore(&korg1212->lock, flags);
+	spin_unlock_irq(&korg1212->lock);
 
         if (change)
                 snd_korg1212_WriteADCSensitivity(korg1212);
@@ -1985,29 +1965,27 @@
 
 static int snd_korg1212_control_sync_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	korg1212_t *korg1212 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	korg1212_t *korg1212 = snd_kcontrol_chip(kcontrol);
 
-	spin_lock_irqsave(&korg1212->lock, flags);
+	spin_lock_irq(&korg1212->lock);
 
 	ucontrol->value.enumerated.item[0] = korg1212->clkSource;
 
-	spin_unlock_irqrestore(&korg1212->lock, flags);
+	spin_unlock_irq(&korg1212->lock);
 	return 0;
 }
 
 static int snd_korg1212_control_sync_put(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	korg1212_t *korg1212 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	korg1212_t *korg1212 = snd_kcontrol_chip(kcontrol);
 	unsigned int val;
 	int change;
 
 	val = ucontrol->value.enumerated.item[0] % 3;
-	spin_lock_irqsave(&korg1212->lock, flags);
+	spin_lock_irq(&korg1212->lock);
 	change = val != korg1212->clkSource;
         snd_korg1212_SetClockSource(korg1212, val);
-	spin_unlock_irqrestore(&korg1212->lock, flags);
+	spin_unlock_irq(&korg1212->lock);
 	return change;
 }
 
@@ -2063,8 +2041,6 @@
         }
 };
 
-#define K1212_CONTROL_ELEMENTS (sizeof(snd_korg1212_controls) / sizeof(snd_korg1212_controls[0]))
-
 /*
  * proc interface
  */
@@ -2120,29 +2096,13 @@
                 korg1212->iobase = 0;
         }
         
-        if (korg1212->res_iomem != NULL) {
-                release_resource(korg1212->res_iomem);
-                kfree_nocheck(korg1212->res_iomem);
-                korg1212->res_iomem = NULL;
-        }
-        
-        if (korg1212->res_ioport != NULL) {
-                release_resource(korg1212->res_ioport);
-                kfree_nocheck(korg1212->res_ioport);
-                korg1212->res_ioport = NULL;
-        }
-        
-        if (korg1212->res_iomem2 != NULL) {
-                release_resource(korg1212->res_iomem2);
-                kfree_nocheck(korg1212->res_iomem2);
-                korg1212->res_iomem2 = NULL;
-        }
+	pci_release_regions(korg1212->pci);
 
         // ----------------------------------------------------
         // free up memory resources used for the DSP download.
         // ----------------------------------------------------
         if (korg1212->dma_dsp.area) {
-        	snd_dma_free_pages(&korg1212->dma_dev, &korg1212->dma_dsp);
+        	snd_dma_free_pages(&korg1212->dma_dsp);
         	korg1212->dma_dsp.area = NULL;
         }
 
@@ -2152,12 +2112,12 @@
         // free up memory resources used for the Play/Rec Buffers
         // ------------------------------------------------------
 	if (korg1212->dma_play.area) {
-		snd_dma_free_pages(&korg1212->dma_dev, &korg1212->dma_play);
+		snd_dma_free_pages(&korg1212->dma_play);
 		korg1212->dma_play.area = NULL;
         }
 
 	if (korg1212->dma_rec.area) {
-		snd_dma_free_pages(&korg1212->dma_dev, &korg1212->dma_rec);
+		snd_dma_free_pages(&korg1212->dma_rec);
 		korg1212->dma_rec.area = NULL;
         }
 
@@ -2167,17 +2127,17 @@
         // free up memory resources used for the Shared Buffers
         // ----------------------------------------------------
 	if (korg1212->dma_shared.area) {
-		snd_dma_free_pages(&korg1212->dma_dev, &korg1212->dma_shared);
+		snd_dma_free_pages(&korg1212->dma_shared);
 		korg1212->dma_shared.area = NULL;
         }
         
-        snd_magic_kfree(korg1212);
+        kfree(korg1212);
         return 0;
 }
 
 static int snd_korg1212_dev_free(snd_device_t *device)
 {
-        korg1212_t *korg1212 = snd_magic_cast(korg1212_t, device->device_data, return -ENXIO);
+        korg1212_t *korg1212 = device->device_data;
 #if K1212_DEBUG_LEVEL > 0
         K1212_DEBUG_PRINTK("K1212_DEBUG: Freeing device\n");
 #endif
@@ -2201,7 +2161,7 @@
         if ((err = pci_enable_device(pci)) < 0)
                 return err;
 
-        korg1212 = snd_magic_kcalloc(korg1212_t, 0, GFP_KERNEL);
+        korg1212 = kcalloc(1, sizeof(*korg1212), GFP_KERNEL);
         if (korg1212 == NULL)
                 return -ENOMEM;
 
@@ -2232,6 +2192,11 @@
         for (i=0; i<kAudioChannels; i++)
                 korg1212->volumePhase[i] = 0;
 
+	if ((err = pci_request_regions(pci, "korg1212")) < 0) {
+		kfree(korg1212);
+		return err;
+	}
+
         korg1212->iomem = pci_resource_start(korg1212->pci, 0);
         korg1212->ioport = pci_resource_start(korg1212->pci, 1);
         korg1212->iomem2 = pci_resource_start(korg1212->pci, 2);
@@ -2252,27 +2217,6 @@
 		   stateName[korg1212->cardState]);
 #endif
 
-        korg1212->res_iomem = request_mem_region(korg1212->iomem, iomem_size, "korg1212");
-        if (korg1212->res_iomem == NULL) {
-		snd_printk(KERN_ERR "unable to grab region 0x%lx-0x%lx\n",
-                           korg1212->iomem, korg1212->iomem + iomem_size - 1);
-                return -EBUSY;
-        }
-
-        korg1212->res_ioport = request_region(korg1212->ioport, ioport_size, "korg1212");
-        if (korg1212->res_ioport == NULL) {
-		snd_printk(KERN_ERR "unable to grab region 0x%lx-0x%lx\n",
-                           korg1212->ioport, korg1212->ioport + ioport_size - 1);
-                return -EBUSY;
-        }
-
-        korg1212->res_iomem2 = request_mem_region(korg1212->iomem2, iomem2_size, "korg1212");
-        if (korg1212->res_iomem2 == NULL) {
-		snd_printk(KERN_ERR "unable to grab region 0x%lx-0x%lx\n",
-                           korg1212->iomem2, korg1212->iomem2 + iomem2_size - 1);
-                return -EBUSY;
-        }
-
         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);
@@ -2329,11 +2273,8 @@
 		   stateName[korg1212->cardState]);
 #endif
 
-	memset(&korg1212->dma_dev, 0, sizeof(korg1212->dma_dev));
-	korg1212->dma_dev.type = SNDRV_DMA_TYPE_DEV;
-	korg1212->dma_dev.dev = snd_dma_pci_data(korg1212->pci);
-
-	if (snd_dma_alloc_pages(&korg1212->dma_dev, sizeof(KorgSharedBuffer), &korg1212->dma_shared) < 0) {
+	if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci),
+				sizeof(KorgSharedBuffer), &korg1212->dma_shared) < 0) {
 		snd_printk(KERN_ERR "can not allocate shared buffer memory (%Zd bytes)\n", sizeof(KorgSharedBuffer));
                 return -ENOMEM;
         }
@@ -2348,7 +2289,8 @@
 
         korg1212->DataBufsSize = sizeof(KorgAudioBuffer) * kNumBuffers;
 
-	if (snd_dma_alloc_pages(&korg1212->dma_dev, korg1212->DataBufsSize, &korg1212->dma_play) < 0) {
+	if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci),
+				korg1212->DataBufsSize, &korg1212->dma_play) < 0) {
 		snd_printk(KERN_ERR "can not allocate play data buffer memory (%d bytes)\n", korg1212->DataBufsSize);
                 return -ENOMEM;
         }
@@ -2360,7 +2302,8 @@
 		korg1212->playDataBufsPtr, korg1212->PlayDataPhy, korg1212->DataBufsSize);
 #endif
 
-	if (snd_dma_alloc_pages(&korg1212->dma_dev, korg1212->DataBufsSize, &korg1212->dma_rec) < 0) {
+	if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci),
+				korg1212->DataBufsSize, &korg1212->dma_rec) < 0) {
 		snd_printk(KERN_ERR "can not allocate record data buffer memory (%d bytes)\n", korg1212->DataBufsSize);
                 return -ENOMEM;
         }
@@ -2390,7 +2333,8 @@
         korg1212->AdatTimeCodePhy = korg1212->sharedBufferPhy +
 		offsetof(KorgSharedBuffer, AdatTimeCode);
 
-	if (snd_dma_alloc_pages(&korg1212->dma_dev, korg1212->dspCodeSize, &korg1212->dma_dsp) < 0) {
+	if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci),
+				korg1212->dspCodeSize, &korg1212->dma_dsp) < 0) {
 		snd_printk(KERN_ERR "can not allocate dsp code memory (%d bytes)\n", korg1212->dspCodeSize);
                 return -ENOMEM;
         }
@@ -2443,7 +2387,7 @@
 	//snd_pcm_lib_preallocate_pages_for_all(korg1212->pcm,
 	//			K1212_MAX_BUF_SIZE, K1212_MAX_BUF_SIZE, GFP_KERNEL);
 
-        for (i = 0; i < K1212_CONTROL_ELEMENTS; i++) {
+        for (i = 0; i < ARRAY_SIZE(snd_korg1212_controls); i++) {
                 err = snd_ctl_add(korg1212->card, snd_ctl_new1(&snd_korg1212_controls[i], korg1212));
                 if (err < 0)
                         return err;
diff -Nru a/sound/pci/maestro3.c b/sound/pci/maestro3.c
--- a/sound/pci/maestro3.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/maestro3.c	2004-08-04 17:48:49 -07:00
@@ -51,8 +51,7 @@
 MODULE_AUTHOR("Zach Brown <zab@zabbo.net>, Takashi Iwai <tiwai@suse.de>");
 MODULE_DESCRIPTION("ESS Maestro3 PCI");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{ESS,Maestro3 PCI},"
+MODULE_SUPPORTED_DEVICE("{{ESS,Maestro3 PCI},"
 		"{ESS,ES1988},"
 		"{ESS,Allegro PCI},"
 		"{ESS,Allegro-1 PCI},"
@@ -67,19 +66,14 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable this soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(external_amp, bool, boot_devs, 0444);
 MODULE_PARM_DESC(external_amp, "Enable external amp for " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(external_amp, SNDRV_ENABLED "," SNDRV_BOOLEAN_TRUE_DESC);
 module_param_array(amp_gpio, int, boot_devs, 0444);
 MODULE_PARM_DESC(amp_gpio, "GPIO pin number for external amp. (default = -1)");
-MODULE_PARM_SYNTAX(amp_gpio, SNDRV_ENABLED);
 
 #define MAX_PLAYBACKS	2
 #define MAX_CAPTURES	1
@@ -776,8 +770,6 @@
 
 typedef struct snd_m3_dma m3_dma_t;
 typedef struct snd_m3 m3_t;
-#define chip_t m3_t
-
 
 /* quirk lists */
 struct m3_quirk {
@@ -827,7 +819,6 @@
 	snd_card_t *card;
 
 	unsigned long iobase;
-	struct resource *iobase_res;
 
 	int irq;
 	int allegro_flag : 1;
@@ -1165,12 +1156,11 @@
 {
 	m3_t *chip = snd_pcm_substream_chip(subs);
 	m3_dma_t *s = (m3_dma_t*)subs->runtime->private_data;
-	unsigned long flags;
 	int err = -EINVAL;
 
 	snd_assert(s != NULL, return -ENXIO);
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock(&chip->reg_lock);
 	switch (cmd) {
 	case SNDRV_PCM_TRIGGER_START:
 	case SNDRV_PCM_TRIGGER_RESUME:
@@ -1191,7 +1181,7 @@
 		}
 		break;
 	}
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock(&chip->reg_lock);
 	return err;
 }
 
@@ -1477,7 +1467,6 @@
 	m3_t *chip = snd_pcm_substream_chip(subs);
 	snd_pcm_runtime_t *runtime = subs->runtime;
 	m3_dma_t *s = (m3_dma_t*)runtime->private_data;
-	unsigned long flags;
 
 	snd_assert(s != NULL, return -ENXIO);
 
@@ -1488,7 +1477,7 @@
 	    runtime->rate < 8000)
 		return -EINVAL;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 
 	snd_m3_pcm_setup1(chip, s, subs);
 
@@ -1499,7 +1488,7 @@
 
 	snd_m3_pcm_setup2(chip, s, runtime);
 
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 
 	return 0;
 }
@@ -1573,7 +1562,7 @@
 static irqreturn_t
 snd_m3_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	m3_t *chip = snd_magic_cast(m3_t, dev_id, );
+	m3_t *chip = dev_id;
 	u8 status;
 	int i;
 
@@ -1670,20 +1659,19 @@
 {
 	int i;
 	m3_dma_t *s;
-	unsigned long flags;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	for (i = 0; i < chip->num_substreams; i++) {
 		s = &chip->substreams[i];
 		if (! s->opened)
 			goto __found;
 	}
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	return -ENOMEM;
 __found:
 	s->opened = 1;
 	s->running = 0;
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 
 	subs->runtime->private_data = s;
 	s->substream = subs;
@@ -1703,12 +1691,11 @@
 snd_m3_substream_close(m3_t *chip, snd_pcm_substream_t *subs)
 {
 	m3_dma_t *s = (m3_dma_t*) subs->runtime->private_data;
-	unsigned long flags;
 
 	if (s == NULL)
 		return; /* not opened properly */
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	if (s->substream && s->running)
 		snd_m3_pcm_stop(chip, s, s->substream); /* does this happen? */
 	if (s->in_lists) {
@@ -1719,7 +1706,7 @@
 	}
 	s->running = 0;
 	s->opened = 0;
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 }
 
 static int
@@ -1848,7 +1835,7 @@
 static unsigned short
 snd_m3_ac97_read(ac97_t *ac97, unsigned short reg)
 {
-	m3_t *chip = snd_magic_cast(m3_t, ac97->private_data, return -ENXIO);
+	m3_t *chip = ac97->private_data;
 	unsigned short ret = 0;
 	unsigned long flags;
 
@@ -1867,7 +1854,7 @@
 static void
 snd_m3_ac97_write(ac97_t *ac97, unsigned short reg, unsigned short val)
 {
-	m3_t *chip = snd_magic_cast(m3_t, ac97->private_data, return);
+	m3_t *chip = ac97->private_data;
 	unsigned long flags;
 
 	spin_lock_irqsave(&chip->reg_lock, flags);
@@ -1983,14 +1970,15 @@
 
 static int __devinit snd_m3_mixer(m3_t *chip)
 {
-	ac97_bus_t bus, *pbus;
-	ac97_t ac97;
+	ac97_bus_t *pbus;
+	ac97_template_t ac97;
 	int err;
+	static ac97_bus_ops_t ops = {
+		.write = snd_m3_ac97_write,
+		.read = snd_m3_ac97_read,
+	};
 
-	memset(&bus, 0, sizeof(bus));
-	bus.write = snd_m3_ac97_write;
-	bus.read = snd_m3_ac97_read;
-	if ((err = snd_ac97_bus(chip->card, &bus, &pbus)) < 0)
+	if ((err = snd_ac97_bus(chip->card, 0, &ops, NULL, &pbus)) < 0)
 		return err;
 	
 	memset(&ac97, 0, sizeof(ac97));
@@ -2167,7 +2155,7 @@
 			  KDATA_DMA_XFER0);
 
 	/* write kernel into code memory.. */
-	for (i = 0 ; i < sizeof(assp_kernel_image) / 2; i++) {
+	for (i = 0 ; i < ARRAY_SIZE(assp_kernel_image); i++) {
 		snd_m3_assp_write(chip, MEMTYPE_INTERNAL_CODE, 
 				  REV_B_CODE_MEMORY_BEGIN + i, 
 				  assp_kernel_image[i]);
@@ -2179,7 +2167,7 @@
 	 * drop it there.  It seems that the minisrc doesn't
 	 * need vectors, so we won't bother with them..
 	 */
-	for (i = 0; i < sizeof(assp_minisrc_image) / 2; i++) {
+	for (i = 0; i < ARRAY_SIZE(assp_minisrc_image); i++) {
 		snd_m3_assp_write(chip, MEMTYPE_INTERNAL_CODE, 
 				  0x400 + i, 
 				  assp_minisrc_image[i]);
@@ -2368,22 +2356,21 @@
 
 static int snd_m3_free(m3_t *chip)
 {
-	unsigned long flags;
 	m3_dma_t *s;
 	int i;
 
 	if (chip->substreams) {
-		spin_lock_irqsave(&chip->reg_lock, flags);
+		spin_lock_irq(&chip->reg_lock);
 		for (i = 0; i < chip->num_substreams; i++) {
 			s = &chip->substreams[i];
 			/* check surviving pcms; this should not happen though.. */
 			if (s->substream && s->running)
 				snd_m3_pcm_stop(chip, s, s->substream);
 		}
-		spin_unlock_irqrestore(&chip->reg_lock, flags);
+		spin_unlock_irq(&chip->reg_lock);
 		kfree(chip->substreams);
 	}
-	if (chip->iobase_res) {
+	if (chip->iobase) {
 		snd_m3_outw(chip, HOST_INT_CTRL, 0); /* disable ints */
 	}
 
@@ -2392,17 +2379,15 @@
 		vfree(chip->suspend_mem);
 #endif
 
-	if (chip->irq >= 0)
+	if (chip->irq >= 0) {
 		synchronize_irq(chip->irq);
-
-	if (chip->iobase_res) {
-		release_resource(chip->iobase_res);
-		kfree_nocheck(chip->iobase_res);
-	}
-	if (chip->irq >= 0)
 		free_irq(chip->irq, (void *)chip);
+	}
+
+	if (chip->iobase)
+		pci_release_regions(chip->pci);
 
-	snd_magic_kfree(chip);
+	kfree(chip);
 	return 0;
 }
 
@@ -2413,7 +2398,7 @@
 #ifdef CONFIG_PM
 static int m3_suspend(snd_card_t *card, unsigned int state)
 {
-	m3_t *chip = snd_magic_cast(m3_t, card->pm_private_data, return -EINVAL);
+	m3_t *chip = card->pm_private_data;
 	int i, index;
 
 	if (chip->suspend_mem == NULL)
@@ -2444,7 +2429,7 @@
 
 static int m3_resume(snd_card_t *card, unsigned int state)
 {
-	m3_t *chip = snd_magic_cast(m3_t, card->pm_private_data, return -EINVAL);
+	m3_t *chip = card->pm_private_data;
 	int i, index;
 
 	if (chip->suspend_mem == NULL)
@@ -2489,7 +2474,7 @@
 
 static int snd_m3_dev_free(snd_device_t *device)
 {
-	m3_t *chip = snd_magic_cast(m3_t, device->device_data, return -ENXIO);
+	m3_t *chip = device->device_data;
 	return snd_m3_free(chip);
 }
 
@@ -2519,7 +2504,7 @@
 		return -ENXIO;
 	}
 
-	chip = snd_magic_kcalloc(m3_t, 0, GFP_KERNEL);
+	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
 	if (chip == NULL)
 		return -ENOMEM;
 
@@ -2562,18 +2547,16 @@
 	chip->num_substreams = NR_DSPS;
 	chip->substreams = kmalloc(sizeof(m3_dma_t) * chip->num_substreams, GFP_KERNEL);
 	if (chip->substreams == NULL) {
-		snd_magic_kfree(chip);
+		kfree(chip);
 		return -ENOMEM;
 	}
 	memset(chip->substreams, 0, sizeof(m3_dma_t) * chip->num_substreams);
 
-	chip->iobase = pci_resource_start(pci, 0);
-	if ((chip->iobase_res = request_region(chip->iobase, 256,
-					       card->driver)) == NULL) {
-		snd_printk("unable to grab i/o ports %ld\n", chip->iobase);
+	if ((err = pci_request_regions(pci, card->driver)) < 0) {
 		snd_m3_free(chip);
-		return -EBUSY;
+		return err;
 	}
+	chip->iobase = pci_resource_start(pci, 0);
 	
 	/* just to be sure */
 	pci_set_master(pci);
diff -Nru a/sound/pci/mixart/mixart.c b/sound/pci/mixart/mixart.c
--- a/sound/pci/mixart/mixart.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/mixart/mixart.c	2004-08-04 17:48:49 -07:00
@@ -42,25 +42,19 @@
 MODULE_AUTHOR("Digigram <alsa@digigram.com>");
 MODULE_DESCRIPTION("Digigram " CARD_NAME);
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{Digigram," CARD_NAME "}}");
+MODULE_SUPPORTED_DEVICE("{{Digigram," CARD_NAME "}}");
 
 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 boot_devs;
 
-#define chip_t mixart_t
-
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for Digigram " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for Digigram " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable Digigram " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 
 /*
  */
@@ -247,21 +241,27 @@
 	/* pipe is not yet defined */
 	if( pipe->status == PIPE_UNDEFINED ) {
 		int err, i;
-		mixart_streaming_group_t streaming_group_resp;
-		mixart_streaming_group_req_t streaming_group_req;
+		struct {
+			mixart_streaming_group_req_t sgroup_req;
+			mixart_streaming_group_t sgroup_resp;
+		} *buf;
 
 		snd_printdd("add_ref_pipe audio chip(%d) pcm(%d)\n", chip->chip_idx, pcm_number);
 
+		buf = kmalloc(sizeof(*buf), GFP_KERNEL);
+		if (!buf)
+			return NULL;
+
 		request.uid = (mixart_uid_t){0,0};      /* should be StreamManagerUID, but zero is OK if there is only one ! */
-		request.data = &streaming_group_req;
-		request.size = sizeof(streaming_group_req);
+		request.data = &buf->sgroup_req;
+		request.size = sizeof(buf->sgroup_req);
 
-		memset(&streaming_group_req, 0, sizeof(streaming_group_req));
+		memset(&buf->sgroup_req, 0, sizeof(buf->sgroup_req));
 
-		streaming_group_req.stream_count = stream_count;
-		streaming_group_req.channel_count = 2;
-		streaming_group_req.latency = 256;
-		streaming_group_req.connector = pipe->uid_left_connector;  /* the left connector */
+		buf->sgroup_req.stream_count = stream_count;
+		buf->sgroup_req.channel_count = 2;
+		buf->sgroup_req.latency = 256;
+		buf->sgroup_req.connector = pipe->uid_left_connector;  /* the left connector */
 
 		for (i=0; i<stream_count; i++) {
 			int j;
@@ -269,15 +269,15 @@
 			struct mixart_bufferinfo *bufferinfo;
 			
 			/* we don't yet know the format, so config 16 bit pcm audio for instance */
-			streaming_group_req.stream_info[i].size_max_byte_frame = 1024;
-			streaming_group_req.stream_info[i].size_max_sample_frame = 256;
-			streaming_group_req.stream_info[i].nb_bytes_max_per_sample = MIXART_FLOAT_P__4_0_TO_HEX; /* is 4.0f */
+			buf->sgroup_req.stream_info[i].size_max_byte_frame = 1024;
+			buf->sgroup_req.stream_info[i].size_max_sample_frame = 256;
+			buf->sgroup_req.stream_info[i].nb_bytes_max_per_sample = MIXART_FLOAT_P__4_0_TO_HEX; /* is 4.0f */
 
 			/* find the right bufferinfo_array */
 			j = (chip->chip_idx * MIXART_MAX_STREAM_PER_CARD) + (pcm_number * (MIXART_PLAYBACK_STREAMS + MIXART_CAPTURE_STREAMS)) + i;
 			if(capture) j += MIXART_PLAYBACK_STREAMS; /* in the array capture is behind playback */
 
-			streaming_group_req.flow_entry[i] = j;
+			buf->sgroup_req.flow_entry[i] = j;
 
 			flowinfo = (struct mixart_flowinfo *)chip->mgr->flowinfo.area;
 			flowinfo[j].bufferinfo_array_phy_address = (u32)chip->mgr->bufferinfo.addr + (j * sizeof(mixart_bufferinfo_t));
@@ -294,17 +294,19 @@
 			}
 		}
 
-		err = snd_mixart_send_msg(chip->mgr, &request, sizeof(streaming_group_resp), &streaming_group_resp);
-		if((err < 0) || (streaming_group_resp.status != 0)) {
-			snd_printk(KERN_ERR "error MSG_STREAM_ADD_**PUT_GROUP err=%x stat=%x !\n", err, streaming_group_resp.status);
+		err = snd_mixart_send_msg(chip->mgr, &request, sizeof(buf->sgroup_resp), &buf->sgroup_resp);
+		if((err < 0) || (buf->sgroup_resp.status != 0)) {
+			snd_printk(KERN_ERR "error MSG_STREAM_ADD_**PUT_GROUP err=%x stat=%x !\n", err, buf->sgroup_resp.status);
+			kfree(buf);
 			return NULL;
 		}
 
-		pipe->group_uid = streaming_group_resp.group;     /* id of the pipe, as returned by embedded */
-		pipe->stream_count = streaming_group_resp.stream_count;
-		/* pipe->stream_uid[i] = streaming_group_resp.stream[i].stream_uid; */
+		pipe->group_uid = buf->sgroup_resp.group;     /* id of the pipe, as returned by embedded */
+		pipe->stream_count = buf->sgroup_resp.stream_count;
+		/* pipe->stream_uid[i] = buf->sgroup_resp.stream[i].stream_uid; */
 
 		pipe->status = PIPE_STOPPED;
+		kfree(buf);
 	}
 
 	if(monitoring)	pipe->monitoring = 1;
@@ -458,8 +460,6 @@
 
 /*
  *  prepare callback for all pcms
- *
- *  NOTE: this callback is non-atomic (pcm->info_flags |= SNDRV_PCM_INFO_NONATOMIC_OPS)
  */
 static int snd_mixart_prepare(snd_pcm_substream_t *subs)
 {
@@ -901,6 +901,7 @@
 
 static void preallocate_buffers(mixart_t *chip, snd_pcm_t *pcm)
 {
+#if 0
 	snd_pcm_substream_t *subs;
 	int stream;
 
@@ -912,6 +913,7 @@
 				subs->stream << 8 | (subs->number + 1) |
 				(chip->chip_idx + 1) << 24;
 	}
+#endif
 	snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
 					      snd_dma_pci_data(chip->mgr->pci), 32*1024, 32*1024);
 }
@@ -937,7 +939,7 @@
 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_mixart_playback_ops);
 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_mixart_capture_ops);
 
-	pcm->info_flags = SNDRV_PCM_INFO_NONATOMIC_OPS;
+	pcm->info_flags = 0;
 	strcpy(pcm->name, name);
 
 	preallocate_buffers(chip, pcm);
@@ -968,7 +970,7 @@
 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_mixart_playback_ops);
 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_mixart_capture_ops);
 
-	pcm->info_flags = SNDRV_PCM_INFO_NONATOMIC_OPS;
+	pcm->info_flags = 0;
 	strcpy(pcm->name, name);
 
 	preallocate_buffers(chip, pcm);
@@ -979,13 +981,13 @@
 
 static int snd_mixart_chip_free(mixart_t *chip)
 {
-	snd_magic_kfree(chip);
+	kfree(chip);
 	return 0;
 }
 
 static int snd_mixart_chip_dev_free(snd_device_t *device)
 {
-	mixart_t *chip = snd_magic_cast(mixart_t, device->device_data, return -ENXIO);
+	mixart_t *chip = device->device_data;
 	return snd_mixart_chip_free(chip);
 }
 
@@ -1000,7 +1002,7 @@
 		.dev_free = snd_mixart_chip_dev_free,
 	};
 
-	mgr->chip[idx] = chip = snd_magic_kcalloc(mixart_t, 0, GFP_KERNEL);
+	mgr->chip[idx] = chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
 	if (! chip) {
 		snd_printk(KERN_ERR "cannot allocate chip\n");
 		return -ENOMEM;
@@ -1074,24 +1076,21 @@
 	for (i = 0; i < 2; i++) {
 		if (mgr->mem[i].virt)
 			iounmap((void *)mgr->mem[i].virt);
-		if (mgr->mem[i].res) {
-			release_resource(mgr->mem[i].res);
-			kfree_nocheck(mgr->mem[i].res);
-		}
 	}
+	pci_release_regions(mgr->pci);
 
 	/* free flowarray */
 	if(mgr->flowinfo.area) {
-		snd_dma_free_pages(&mgr->dma_dev, &mgr->flowinfo);
+		snd_dma_free_pages(&mgr->flowinfo);
 		mgr->flowinfo.area = NULL;
 	}
 	/* free bufferarray */
 	if(mgr->bufferinfo.area) {
-		snd_dma_free_pages(&mgr->dma_dev, &mgr->bufferinfo);
+		snd_dma_free_pages(&mgr->bufferinfo);
 		mgr->bufferinfo.area = NULL;
 	}
 
-	snd_magic_kfree(mgr);
+	kfree(mgr);
 	return 0;
 }
 
@@ -1156,7 +1155,7 @@
 static long snd_mixart_BA0_read(snd_info_entry_t *entry, void *file_private_data,
 				struct file *file, char __user *buf, long count)
 {
-	mixart_mgr_t *mgr = snd_magic_cast(mixart_mgr_t, entry->private_data, return -ENXIO);
+	mixart_mgr_t *mgr = entry->private_data;
 
 	count = count & ~3; /* make sure the read size is a multiple of 4 bytes */
 	if(count <= 0)
@@ -1175,7 +1174,7 @@
 static long snd_mixart_BA1_read(snd_info_entry_t *entry, void *file_private_data,
 				struct file *file, char __user *buf, long count)
 {
-	mixart_mgr_t *mgr = snd_magic_cast(mixart_mgr_t, entry->private_data, return -ENXIO);
+	mixart_mgr_t *mgr = entry->private_data;
 
 	count = count & ~3; /* make sure the read size is a multiple of 4 bytes */
 	if(count <= 0)
@@ -1202,7 +1201,7 @@
 static void snd_mixart_proc_read(snd_info_entry_t *entry, 
                                  snd_info_buffer_t * buffer)
 {
-	mixart_t *chip = snd_magic_cast(mixart_t, entry->private_data, return);        
+	mixart_t *chip = entry->private_data;        
 	u32 ref; 
 
 	snd_iprintf(buffer, "Digigram miXart (alsa card %d)\n\n", chip->chip_idx);
@@ -1297,7 +1296,7 @@
 
 	/*
 	 */
-	mgr = snd_magic_kcalloc(mixart_mgr_t, 0, GFP_KERNEL);
+	mgr = kcalloc(1, sizeof(*mgr), GFP_KERNEL);
 	if (! mgr)
 		return -ENOMEM;
 
@@ -1305,19 +1304,14 @@
 	mgr->irq = -1;
 
 	/* resource assignment */
+	if ((err = pci_request_regions(pci, CARD_NAME)) < 0) {
+		kfree(mgr);
+		return err;
+	}
 	for (i = 0; i < 2; i++) {
-		static int memory_sizes[2] = {
-			MIXART_BA0_SIZE, /* 16M */	  
-			MIXART_BA1_SIZE  /* 4 k */
-		};
 		mgr->mem[i].phys = pci_resource_start(pci, i);
-		mgr->mem[i].res = request_mem_region(mgr->mem[i].phys, memory_sizes[i], CARD_NAME);
-		if (! mgr->mem[i].res) {
-			snd_printk(KERN_ERR "unable to grab memory 0x%lx\n", mgr->mem[i].phys);
-			snd_mixart_free(mgr);
-			return -EBUSY;
-		}
-		mgr->mem[i].virt = (unsigned long)ioremap_nocache(mgr->mem[i].phys, memory_sizes[i]);
+		mgr->mem[i].virt = (unsigned long)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)) {
@@ -1331,13 +1325,13 @@
 	sprintf(mgr->longname, "%s at 0x%lx & 0x%lx, irq %i", mgr->shortname, mgr->mem[0].phys, mgr->mem[1].phys, mgr->irq);
 
 	/* ISR spinlock  */
-	mgr->lock = SPIN_LOCK_UNLOCKED;
+	spin_lock_init(&mgr->lock);
 
 	/* init mailbox  */
 	mgr->msg_fifo_readptr = 0;
 	mgr->msg_fifo_writeptr = 0;
 
-	mgr->msg_lock = SPIN_LOCK_UNLOCKED;
+	spin_lock_init(&mgr->msg_lock);
 	init_MUTEX(&mgr->msg_mutex);
 	init_waitqueue_head(&mgr->msg_sleep);
 	atomic_set(&mgr->msg_processed, 0);
@@ -1391,13 +1385,10 @@
 	/* init firmware status (mgr->hwdep->dsp_loaded reset in hwdep_new) */
 	mgr->board_type = MIXART_DAUGHTER_TYPE_NONE;
 
-	memset(&mgr->dma_dev, 0, sizeof(mgr->dma_dev));
-	mgr->dma_dev.type = SNDRV_DMA_TYPE_DEV;
-	mgr->dma_dev.dev = snd_dma_pci_data(mgr->pci);
-
 	/* create array of streaminfo */
 	size = PAGE_ALIGN( (MIXART_MAX_STREAM_PER_CARD * MIXART_MAX_CARDS * sizeof(mixart_flowinfo_t)) );
-	if (snd_dma_alloc_pages(&mgr->dma_dev, size, &mgr->flowinfo) < 0) {
+	if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci),
+				size, &mgr->flowinfo) < 0) {
 		snd_mixart_free(mgr);
 		return -ENOMEM;
 	}
@@ -1406,7 +1397,8 @@
 
 	/* create array of bufferinfo */
 	size = PAGE_ALIGN( (MIXART_MAX_STREAM_PER_CARD * MIXART_MAX_CARDS * sizeof(mixart_bufferinfo_t)) );
-	if (snd_dma_alloc_pages(&mgr->dma_dev, size, &mgr->bufferinfo) < 0) {
+	if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci),
+				size, &mgr->bufferinfo) < 0) {
 		snd_mixart_free(mgr);
 		return -ENOMEM;
 	}
diff -Nru a/sound/pci/mixart/mixart.h b/sound/pci/mixart/mixart.h
--- a/sound/pci/mixart/mixart.h	2004-08-04 17:48:48 -07:00
+++ b/sound/pci/mixart/mixart.h	2004-08-04 17:48:48 -07:00
@@ -115,7 +115,6 @@
 	snd_hwdep_t *hwdep;
 	unsigned int board_type;      /* read from embedded once elf file is loaded, 250 = miXart8, 251 = with AES, 252 = with Cobranet */
 
-	struct snd_dma_device dma_dev;
 	struct snd_dma_buffer flowinfo;
 	struct snd_dma_buffer bufferinfo;
 
diff -Nru a/sound/pci/mixart/mixart_core.c b/sound/pci/mixart/mixart_core.c
--- a/sound/pci/mixart/mixart_core.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/mixart/mixart_core.c	2004-08-04 17:48:49 -07:00
@@ -403,7 +403,7 @@
 
 irqreturn_t snd_mixart_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	mixart_mgr_t *mgr = snd_magic_cast(mixart_mgr_t, dev_id, return IRQ_NONE);
+	mixart_mgr_t *mgr = dev_id;
 	int err;
 	mixart_msg_t resp;
 
diff -Nru a/sound/pci/mixart/mixart_hwdep.c b/sound/pci/mixart/mixart_hwdep.c
--- a/sound/pci/mixart/mixart_hwdep.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/mixart/mixart_hwdep.c	2004-08-04 17:48:49 -07:00
@@ -146,7 +146,7 @@
 
 static int mixart_hwdep_dsp_status(snd_hwdep_t *hw, snd_hwdep_dsp_status_t *info)
 {
-	mixart_mgr_t *mgr = snd_magic_cast(mixart_mgr_t, hw->private_data, return -ENXIO);
+	mixart_mgr_t *mgr = hw->private_data;
 
 	strcpy(info->id, "miXart");
         info->num_dsps = MIXART_HARDW_FILES_MAX_INDEX;
@@ -346,7 +346,7 @@
 
 static int mixart_hwdep_dsp_load(snd_hwdep_t *hw, snd_hwdep_dsp_image_t *dsp)
 {
-	mixart_mgr_t* mgr = snd_magic_cast(mixart_mgr_t, hw->private_data, return -ENXIO);
+	mixart_mgr_t* mgr = hw->private_data;
 	int           err, card_index;
 	u32           status_xilinx, status_elf, status_daught;
 	u32           val;
diff -Nru a/sound/pci/mixart/mixart_mixer.c b/sound/pci/mixart/mixart_mixer.c
--- a/sound/pci/mixart/mixart_mixer.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/mixart/mixart_mixer.c	2004-08-04 17:48:49 -07:00
@@ -31,8 +31,6 @@
 #include <sound/control.h>
 #include "mixart_mixer.h"
 
-#define chip_t mixart_t
-
 static u32 mixart_analog_level[256] = {
 	0xc2c00000,		/* [000] -96.0 dB */
 	0xc2bf0000,		/* [001] -95.5 dB */
diff -Nru a/sound/pci/nm256/nm256.c b/sound/pci/nm256/nm256.c
--- a/sound/pci/nm256/nm256.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/nm256/nm256.c	2004-08-04 17:48:49 -07:00
@@ -45,8 +45,7 @@
 MODULE_AUTHOR("Takashi Iwai <tiwai@suse.de>");
 MODULE_DESCRIPTION("NeoMagic NM256AV/ZX");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{NeoMagic,NM256AV},"
+MODULE_SUPPORTED_DEVICE("{{NeoMagic,NM256AV},"
 		"{NeoMagic,NM256ZX}}");
 
 /*
@@ -66,31 +65,22 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable this soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(playback_bufsize, int, boot_devs, 0444);
 MODULE_PARM_DESC(playback_bufsize, "DAC frame size in kB for " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(playback_bufsize, SNDRV_ENABLED);
 module_param_array(capture_bufsize, int, boot_devs, 0444);
 MODULE_PARM_DESC(capture_bufsize, "ADC frame size in kB for " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(capture_bufsize, SNDRV_ENABLED);
 module_param_array(force_ac97, bool, boot_devs, 0444);
 MODULE_PARM_DESC(force_ac97, "Force to use AC97 codec for " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(force_ac97, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC);
 module_param_array(buffer_top, int, boot_devs, 0444);
 MODULE_PARM_DESC(buffer_top, "Set the top address of audio buffer for " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(buffer_top, SNDRV_ENABLED);
 module_param_array(use_cache, bool, boot_devs, 0444);
 MODULE_PARM_DESC(use_cache, "Enable the cache for coefficient table access.");
-MODULE_PARM_SYNTAX(use_cache, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC);
 module_param_array(vaio_hack, bool, boot_devs, 0444);
 MODULE_PARM_DESC(vaio_hack, "Enable workaround for Sony VAIO notebooks.");
-MODULE_PARM_SYNTAX(vaio_hack, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC);
 
 /*
  * hw definitions
@@ -191,7 +181,6 @@
 
 typedef struct snd_nm256 nm256_t;
 typedef struct snd_nm256_stream nm256_stream_t;
-#define chip_t nm256_t
 
 struct snd_nm256_stream {
 
@@ -414,9 +403,8 @@
 static unsigned int samplerates[8] = {
 	8000, 11025, 16000, 22050, 24000, 32000, 44100, 48000,
 };
-#define NUM_SAMPLERATES (sizeof(samplerates) / sizeof(samplerates[0]))
 static snd_pcm_hw_constraint_list_t constraints_rates = {
-	.count = NUM_SAMPLERATES, 
+	.count = ARRAY_SIZE(samplerates), 
 	.list = samplerates,
 	.mask = 0,
 };
@@ -428,7 +416,7 @@
 snd_nm256_fixed_rate(unsigned int rate)
 {
 	unsigned int i;
-	for (i = 0; i < NUM_SAMPLERATES; i++) {
+	for (i = 0; i < ARRAY_SIZE(samplerates); i++) {
 		if (rate == samplerates[i])
 			return i;
 	}
@@ -542,12 +530,11 @@
 {
 	nm256_t *chip = snd_pcm_substream_chip(substream);
 	nm256_stream_t *s = (nm256_stream_t*)substream->runtime->private_data;
-	unsigned long flags;
 	int err = 0;
 
 	snd_assert(s != NULL, return -ENXIO);
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock(&chip->reg_lock);
 	switch (cmd) {
 	case SNDRV_PCM_TRIGGER_START:
 	case SNDRV_PCM_TRIGGER_RESUME:
@@ -567,7 +554,7 @@
 		err = -EINVAL;
 		break;
 	}
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock(&chip->reg_lock);
 	return err;
 }
 
@@ -576,12 +563,11 @@
 {
 	nm256_t *chip = snd_pcm_substream_chip(substream);
 	nm256_stream_t *s = (nm256_stream_t*)substream->runtime->private_data;
-	unsigned long flags;
 	int err = 0;
 
 	snd_assert(s != NULL, return -ENXIO);
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock(&chip->reg_lock);
 	switch (cmd) {
 	case SNDRV_PCM_TRIGGER_START:
 	case SNDRV_PCM_TRIGGER_RESUME:
@@ -601,7 +587,7 @@
 		err = -EINVAL;
 		break;
 	}
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock(&chip->reg_lock);
 	return err;
 }
 
@@ -614,7 +600,6 @@
 	nm256_t *chip = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
 	nm256_stream_t *s = (nm256_stream_t*)runtime->private_data;
-	unsigned long flags;
 
 	snd_assert(s, return -ENXIO);
 	s->dma_size = frames_to_bytes(runtime, substream->runtime->buffer_size);
@@ -622,10 +607,10 @@
 	s->periods = substream->runtime->periods;
 	s->cur_period = 0;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	s->running = 0;
 	snd_nm256_set_format(chip, s, substream);
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 
 	return 0;
 }
@@ -660,9 +645,9 @@
 	return bytes_to_frames(substream->runtime, curp);
 }
 
+/* Remapped I/O space can be accessible as pointer on i386 */
+/* This might be changed in the future */
 #ifndef __i386__
-/* FIXME: I/O space is not accessible via pointers on all architectures */
-
 /*
  * silence / copy for playback
  */
@@ -757,10 +742,8 @@
  */
 static snd_pcm_hardware_t snd_nm256_playback =
 {
-	.info =
-#ifdef __i386__
-				SNDRV_PCM_INFO_MMAP|SNDRV_PCM_INFO_MMAP_VALID|
-#endif
+	.info =			SNDRV_PCM_INFO_MMAP|SNDRV_PCM_INFO_MMAP_VALID|
+				SNDRV_PCM_INFO_MMAP_IOMEM|
 				SNDRV_PCM_INFO_INTERLEAVED |
 				/*SNDRV_PCM_INFO_PAUSE |*/
 				SNDRV_PCM_INFO_RESUME,
@@ -779,10 +762,8 @@
 
 static snd_pcm_hardware_t snd_nm256_capture =
 {
-	.info =
-#ifdef __i386__
-				SNDRV_PCM_INFO_MMAP|SNDRV_PCM_INFO_MMAP_VALID|
-#endif
+	.info =			SNDRV_PCM_INFO_MMAP|SNDRV_PCM_INFO_MMAP_VALID|
+				SNDRV_PCM_INFO_MMAP_IOMEM|
 				SNDRV_PCM_INFO_INTERLEAVED |
 				/*SNDRV_PCM_INFO_PAUSE |*/
 				SNDRV_PCM_INFO_RESUME,
@@ -932,16 +913,14 @@
 static void
 snd_nm256_init_chip(nm256_t *chip)
 {
-	unsigned long flags;
-
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	/* Reset everything. */
 	snd_nm256_writeb(chip, 0x0, 0x11);
 	snd_nm256_writew(chip, 0x214, 0);
 	/* stop sounds.. */
 	//snd_nm256_playback_stop(chip);
 	//snd_nm256_capture_stop(chip);
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 }
 
 
@@ -981,7 +960,7 @@
 static irqreturn_t
 snd_nm256_interrupt(int irq, void *dev_id, struct pt_regs *dummy)
 {
-	nm256_t *chip = snd_magic_cast(nm256_t, dev_id, return IRQ_NONE);
+	nm256_t *chip = dev_id;
 	u16 status;
 	u8 cbyte;
 
@@ -1048,7 +1027,7 @@
 static irqreturn_t
 snd_nm256_interrupt_zx(int irq, void *dev_id, struct pt_regs *dummy)
 {
-	nm256_t *chip = snd_magic_cast(nm256_t, dev_id, return IRQ_NONE);
+	nm256_t *chip = dev_id;
 	u32 status;
 	u8 cbyte;
 
@@ -1139,7 +1118,7 @@
 static unsigned short
 snd_nm256_ac97_read(ac97_t *ac97, unsigned short reg)
 {
-	nm256_t *chip = snd_magic_cast(nm256_t, ac97->private_data, return -ENXIO);
+	nm256_t *chip = ac97->private_data;
 	int res;
 
 	if (reg >= 128)
@@ -1159,7 +1138,7 @@
 snd_nm256_ac97_write(ac97_t *ac97,
 		     unsigned short reg, unsigned short val)
 {
-	nm256_t *chip = snd_magic_cast(nm256_t, ac97->private_data, return);
+	nm256_t *chip = ac97->private_data;
 	int tries = 2;
 	u32 base;
 
@@ -1181,10 +1160,9 @@
 static void
 snd_nm256_ac97_reset(ac97_t *ac97)
 {
-	nm256_t *chip = snd_magic_cast(nm256_t, ac97->private_data, return);
-	unsigned long flags;
+	nm256_t *chip = ac97->private_data;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock(&chip->reg_lock);
 	/* Reset the mixer.  'Tis magic!  */
 	snd_nm256_writeb(chip, 0x6c0, 1);
 	if (chip->latitude_workaround) {
@@ -1193,20 +1171,25 @@
 	}
 	snd_nm256_writeb(chip, 0x6cc, 0x80);
 	snd_nm256_writeb(chip, 0x6cc, 0x0);
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock(&chip->reg_lock);
 }
 
 /* create an ac97 mixer interface */
 static int __devinit
 snd_nm256_mixer(nm256_t *chip)
 {
-	ac97_bus_t bus, *pbus;
-	ac97_t ac97;
+	ac97_bus_t *pbus;
+	ac97_template_t ac97;
 	int i, err;
+	static ac97_bus_ops_t ops = {
+		.reset = snd_nm256_ac97_reset,
+		.write = snd_nm256_ac97_write,
+		.read = snd_nm256_ac97_read,
+	};
 	/* looks like nm256 hangs up when unexpected registers are touched... */
 	static int mixer_regs[] = {
 		AC97_MASTER, AC97_HEADPHONE, AC97_MASTER_MONO,
-		AC97_PC_BEEP, AC97_PHONE, AC97_MIC, AC97_LINE,
+		AC97_PC_BEEP, AC97_PHONE, AC97_MIC, AC97_LINE, AC97_CD,
 		AC97_VIDEO, AC97_AUX, AC97_PCM, AC97_REC_SEL,
 		AC97_REC_GAIN, AC97_GENERAL_PURPOSE, AC97_3D_CONTROL,
 		AC97_EXTENDED_ID,
@@ -1214,11 +1197,7 @@
 		-1
 	};
 
-	memset(&bus, 0, sizeof(bus));
-	bus.reset = snd_nm256_ac97_reset;
-	bus.write = snd_nm256_ac97_write;
-	bus.read = snd_nm256_ac97_read;
-	if ((err = snd_ac97_bus(chip->card, &bus, &pbus)) < 0)
+	if ((err = snd_ac97_bus(chip->card, 0, &ops, NULL, &pbus)) < 0)
 		return err;
 
 	memset(&ac97, 0, sizeof(ac97));
@@ -1290,7 +1269,7 @@
  */
 static int nm256_suspend(snd_card_t *card, unsigned int state)
 {
-	nm256_t *chip = snd_magic_cast(nm256_t, card->pm_private_data, return -EINVAL);
+	nm256_t *chip = card->pm_private_data;
 
 	snd_pcm_suspend_all(chip->pcm);
 	snd_ac97_suspend(chip->ac97);
@@ -1301,7 +1280,7 @@
 
 static int nm256_resume(snd_card_t *card, unsigned int state)
 {
-	nm256_t *chip = snd_magic_cast(nm256_t, card->pm_private_data, return -EINVAL);
+	nm256_t *chip = card->pm_private_data;
 
 	/* Perform a full reset on the hardware */
 	pci_enable_device(chip->pci);
@@ -1340,13 +1319,13 @@
 	if (chip->irq >= 0)
 		free_irq(chip->irq, (void*)chip);
 
-	snd_magic_kfree(chip);
+	kfree(chip);
 	return 0;
 }
 
 static int snd_nm256_dev_free(snd_device_t *device)
 {
-	nm256_t *chip = snd_magic_cast(nm256_t, device->device_data, return -ENXIO);
+	nm256_t *chip = device->device_data;
 	return snd_nm256_free(chip);
 }
 
@@ -1368,7 +1347,7 @@
 
 	*chip_ret = NULL;
 
-	chip = snd_magic_kcalloc(nm256_t, 0, GFP_KERNEL);
+	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
 	if (chip == NULL)
 		return -ENOMEM;
 
diff -Nru a/sound/pci/rme32.c b/sound/pci/rme32.c
--- a/sound/pci/rme32.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/rme32.c	2004-08-04 17:48:49 -07:00
@@ -1,7 +1,8 @@
 /*
  *   ALSA driver for RME Digi32, Digi32/8 and Digi32 PRO audio interfaces
  *
- *	Copyright (c) 2002, 2003 Martin Langer <martin-langer@gmx.de>
+ *      Copyright (c) 2002-2004 Martin Langer <martin-langer@gmx.de>,
+ *                              Pilo Chambert <pilo.c@wanadoo.fr>
  *
  *      Thanks to :        Anders Torger <torger@ludd.luth.se>,
  *                         Henk Hesselink <henk@anda.nl>
@@ -52,6 +53,19 @@
  * patch would be welcome!
  * 
  * ****************************************************************************
+ *
+ * "The story after the long seeking" -- tiwai
+ *
+ * Ok, the situation regarding the full duplex is now improved a bit.
+ * In the fullduplex mode (given by the module parameter), the hardware buffer
+ * is split to halves for read and write directions at the DMA pointer.
+ * That is, the half above the current DMA pointer is used for write, and
+ * the half below is used for read.  To mangle this strange behavior, an
+ * software intermediate buffer is introduced.  This is, of course, not good
+ * from the viewpoint of the data transfer efficiency.  However, this allows
+ * you to use arbitrary buffer sizes, instead of the fixed I/O buffer size.
+ *
+ * ****************************************************************************
  */
 
 
@@ -68,6 +82,7 @@
 #include <sound/control.h>
 #include <sound/pcm.h>
 #include <sound/pcm_params.h>
+#include <sound/pcm-indirect.h>
 #include <sound/asoundef.h>
 #include <sound/initval.h>
 
@@ -76,22 +91,21 @@
 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 fullduplex[SNDRV_CARDS]; // = {[0 ... (SNDRV_CARDS - 1)] = 1};
 static int boot_devs;
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for RME Digi32 soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for RME Digi32 soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable RME Digi32 soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
-MODULE_AUTHOR("Martin Langer <martin-langer@gmx.de>");
+module_param_array(fullduplex, bool, boot_devs, 0444);
+MODULE_PARM_DESC(fullduplex, "Support full-duplex mode.");
+MODULE_AUTHOR("Martin Langer <martin-langer@gmx.de>, Pilo Chambert <pilo.c@wanadoo.fr>");
 MODULE_DESCRIPTION("RME Digi32, Digi32/8, Digi32 PRO");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{RME,Digi32}," "{RME,Digi32/8}," "{RME,Digi32 PRO}}");
+MODULE_SUPPORTED_DEVICE("{{RME,Digi32}," "{RME,Digi32/8}," "{RME,Digi32 PRO}}");
 
 /* Defines for RME Digi32 series */
 #define RME32_SPDIF_NCHANNELS 2
@@ -140,7 +154,7 @@
 #define RME32_WCR_BITPOS_INP_1 7
 
 /* Read control register bits */
-#define RME32_RCR_AUDIO_ADDR_MASK 0x10001
+#define RME32_RCR_AUDIO_ADDR_MASK 0x1ffff
 #define RME32_RCR_LOCK      (1 << 23)   /* 1=locked, 0=not locked */
 #define RME32_RCR_ERF       (1 << 26)   /* 1=Error, 0=no Error */
 #define RME32_RCR_FREQ_0    (1 << 27)   /* CS841x frequency (record) */
@@ -168,6 +182,9 @@
 /* Block sizes in bytes */
 #define RME32_BLOCK_SIZE 8192
 
+/* Software intermediate buffer (max) size */
+#define RME32_MID_BUFFER_SIZE (1024*1024)
+
 /* Hardware revisions */
 #define RME32_32_REVISION 192
 #define RME32_328_REVISION_OLD 100
@@ -194,7 +211,6 @@
 	spinlock_t lock;
 	int irq;
 	unsigned long port;
-	struct resource *res_port;
 	unsigned long iobase;
 
 	u32 wcreg;		/* cached write control register value */
@@ -213,9 +229,11 @@
 	size_t playback_periodsize;	/* in bytes, zero if not used */
 	size_t capture_periodsize;	/* in bytes, zero if not used */
 
-	snd_pcm_uframes_t playback_last_appl_ptr;
-	size_t playback_ptr;
-	size_t capture_ptr;
+	unsigned int fullduplex_mode;
+	int running;
+
+	snd_pcm_indirect_t playback_pcm;
+	snd_pcm_indirect_t capture_pcm;
 
 	snd_card_t *card;
 	snd_pcm_t *spdif_pcm;
@@ -243,33 +261,16 @@
 
 static int snd_rme32_capture_prepare(snd_pcm_substream_t * substream);
 
-static int
-snd_rme32_playback_trigger(snd_pcm_substream_t * substream, int cmd);
-
-static int
-snd_rme32_capture_trigger(snd_pcm_substream_t * substream, int cmd);
-
-static snd_pcm_uframes_t
-snd_rme32_playback_pointer(snd_pcm_substream_t * substream);
-
-static snd_pcm_uframes_t
-snd_rme32_capture_pointer(snd_pcm_substream_t * substream);
+static int snd_rme32_pcm_trigger(snd_pcm_substream_t * substream, int cmd);
 
 static void snd_rme32_proc_init(rme32_t * rme32);
 
 static int snd_rme32_create_switches(snd_card_t * card, rme32_t * rme32);
 
-static inline unsigned int snd_rme32_playback_ptr(rme32_t * rme32)
-{
-
-	return (readl(rme32->iobase + RME32_IO_GET_POS)
-		& RME32_RCR_AUDIO_ADDR_MASK) >> rme32->playback_frlog;
-}
-
-static inline unsigned int snd_rme32_capture_ptr(rme32_t * rme32)
+static inline unsigned int snd_rme32_pcm_byteptr(rme32_t * rme32)
 {
 	return (readl(rme32->iobase + RME32_IO_GET_POS)
-		& RME32_RCR_AUDIO_ADDR_MASK) >> rme32->capture_frlog;
+		& RME32_RCR_AUDIO_ADDR_MASK);
 }
 
 static int snd_rme32_ratecode(int rate)
@@ -285,22 +286,24 @@
 	return 0;
 }
 
+/* silence callback for halfduplex mode */
 static int snd_rme32_playback_silence(snd_pcm_substream_t * substream, int channel,	/* not used (interleaved data) */
 				      snd_pcm_uframes_t pos,
 				      snd_pcm_uframes_t count)
 {
-	rme32_t *rme32 = _snd_pcm_substream_chip(substream);
+	rme32_t *rme32 = snd_pcm_substream_chip(substream);
 	count <<= rme32->playback_frlog;
 	pos <<= rme32->playback_frlog;
 	memset_io(rme32->iobase + RME32_IO_DATA_BUFFER + pos, 0, count);
 	return 0;
 }
 
+/* copy callback for halfduplex mode */
 static int snd_rme32_playback_copy(snd_pcm_substream_t * substream, int channel,	/* not used (interleaved data) */
 				   snd_pcm_uframes_t pos,
 				   void __user *src, snd_pcm_uframes_t count)
 {
-	rme32_t *rme32 = _snd_pcm_substream_chip(substream);
+	rme32_t *rme32 = snd_pcm_substream_chip(substream);
 	count <<= rme32->playback_frlog;
 	pos <<= rme32->playback_frlog;
 	if (copy_from_user_toio(rme32->iobase + RME32_IO_DATA_BUFFER + pos,
@@ -309,11 +312,12 @@
 	return 0;
 }
 
+/* copy callback for halfduplex mode */
 static int snd_rme32_capture_copy(snd_pcm_substream_t * substream, int channel,	/* not used (interleaved data) */
 				  snd_pcm_uframes_t pos,
 				  void __user *dst, snd_pcm_uframes_t count)
 {
-	rme32_t *rme32 = _snd_pcm_substream_chip(substream);
+	rme32_t *rme32 = snd_pcm_substream_chip(substream);
 	count <<= rme32->capture_frlog;
 	pos <<= rme32->capture_frlog;
 	if (copy_to_user_fromio(dst,
@@ -324,13 +328,15 @@
 }
 
 /*
- * Digital output capabilites (S/PDIF)
+ * SPDIF I/O capabilites (half-duplex mode)
  */
-static snd_pcm_hardware_t snd_rme32_playback_spdif_info = {
+static snd_pcm_hardware_t snd_rme32_spdif_info = {
 	.info =		(SNDRV_PCM_INFO_MMAP |
 			 SNDRV_PCM_INFO_MMAP_VALID |
+			 SNDRV_PCM_INFO_MMAP_IOMEM |
 			 SNDRV_PCM_INFO_INTERLEAVED | 
-			 SNDRV_PCM_INFO_PAUSE),
+			 SNDRV_PCM_INFO_PAUSE |
+			 SNDRV_PCM_INFO_SYNC_START),
 	.formats =	(SNDRV_PCM_FMTBIT_S16_LE | 
 			 SNDRV_PCM_FMTBIT_S32_LE),
 	.rates =	(SNDRV_PCM_RATE_32000 |
@@ -349,13 +355,40 @@
 };
 
 /*
- * Digital input capabilites (S/PDIF)
+ * ADAT I/O capabilites (half-duplex mode)
+ */
+static snd_pcm_hardware_t snd_rme32_adat_info =
+{
+	.info =		     (SNDRV_PCM_INFO_MMAP |
+			      SNDRV_PCM_INFO_MMAP_VALID |
+			      SNDRV_PCM_INFO_MMAP_IOMEM |
+			      SNDRV_PCM_INFO_INTERLEAVED |
+			      SNDRV_PCM_INFO_PAUSE |
+			      SNDRV_PCM_INFO_SYNC_START),
+	.formats=            SNDRV_PCM_FMTBIT_S16_LE,
+	.rates =             (SNDRV_PCM_RATE_44100 | 
+			      SNDRV_PCM_RATE_48000),
+	.rate_min =          44100,
+	.rate_max =          48000,
+	.channels_min =      8,
+	.channels_max =	     8,
+	.buffer_bytes_max =  RME32_BUFFER_SIZE,
+	.period_bytes_min =  RME32_BLOCK_SIZE,
+	.period_bytes_max =  RME32_BLOCK_SIZE,
+	.periods_min =	    RME32_BUFFER_SIZE / RME32_BLOCK_SIZE,
+	.periods_max =	    RME32_BUFFER_SIZE / RME32_BLOCK_SIZE,
+	.fifo_size =	    0,
+};
+
+/*
+ * SPDIF I/O capabilites (full-duplex mode)
  */
-static snd_pcm_hardware_t snd_rme32_capture_spdif_info = {
+static snd_pcm_hardware_t snd_rme32_spdif_fd_info = {
 	.info =		(SNDRV_PCM_INFO_MMAP |
 			 SNDRV_PCM_INFO_MMAP_VALID |
 			 SNDRV_PCM_INFO_INTERLEAVED | 
-			 SNDRV_PCM_INFO_PAUSE),
+			 SNDRV_PCM_INFO_PAUSE |
+			 SNDRV_PCM_INFO_SYNC_START),
 	.formats =	(SNDRV_PCM_FMTBIT_S16_LE | 
 			 SNDRV_PCM_FMTBIT_S32_LE),
 	.rates =	(SNDRV_PCM_RATE_32000 |
@@ -365,23 +398,24 @@
 	.rate_max =	48000,
 	.channels_min =	2,
 	.channels_max =	2,
-	.buffer_bytes_max = RME32_BUFFER_SIZE,
+	.buffer_bytes_max = RME32_MID_BUFFER_SIZE,
 	.period_bytes_min = RME32_BLOCK_SIZE,
 	.period_bytes_max = RME32_BLOCK_SIZE,
-	.periods_min =	RME32_BUFFER_SIZE / RME32_BLOCK_SIZE,
-	.periods_max =	RME32_BUFFER_SIZE / RME32_BLOCK_SIZE,
+	.periods_min =	2,
+	.periods_max =	RME32_MID_BUFFER_SIZE / RME32_BLOCK_SIZE,
 	.fifo_size =	0,
 };
 
 /*
- * Digital output capabilites (ADAT)
+ * ADAT I/O capabilites (full-duplex mode)
  */
-static snd_pcm_hardware_t snd_rme32_playback_adat_info =
+static snd_pcm_hardware_t snd_rme32_adat_fd_info =
 {
 	.info =		     (SNDRV_PCM_INFO_MMAP |
 			      SNDRV_PCM_INFO_MMAP_VALID |
 			      SNDRV_PCM_INFO_INTERLEAVED |
-			      SNDRV_PCM_INFO_PAUSE),
+			      SNDRV_PCM_INFO_PAUSE |
+			      SNDRV_PCM_INFO_SYNC_START),
 	.formats=            SNDRV_PCM_FMTBIT_S16_LE,
 	.rates =             (SNDRV_PCM_RATE_44100 | 
 			      SNDRV_PCM_RATE_48000),
@@ -389,38 +423,14 @@
 	.rate_max =          48000,
 	.channels_min =      8,
 	.channels_max =	     8,
-	.buffer_bytes_max =  RME32_BUFFER_SIZE,
+	.buffer_bytes_max =  RME32_MID_BUFFER_SIZE,
 	.period_bytes_min =  RME32_BLOCK_SIZE,
 	.period_bytes_max =  RME32_BLOCK_SIZE,
-	.periods_min =	    RME32_BUFFER_SIZE / RME32_BLOCK_SIZE,
-	.periods_max =	    RME32_BUFFER_SIZE / RME32_BLOCK_SIZE,
+	.periods_min =	    2,
+	.periods_max =	    RME32_MID_BUFFER_SIZE / RME32_BLOCK_SIZE,
 	.fifo_size =	    0,
 };
 
-/*
- * Digital input capabilites (ADAT)
- */
-static snd_pcm_hardware_t snd_rme32_capture_adat_info =
-{
-	.info =		     (SNDRV_PCM_INFO_MMAP |
-			      SNDRV_PCM_INFO_MMAP_VALID |
-			      SNDRV_PCM_INFO_INTERLEAVED |
-			      SNDRV_PCM_INFO_PAUSE),
-	.formats =           SNDRV_PCM_FMTBIT_S16_LE,
-	.rates =             (SNDRV_PCM_RATE_44100 | 
-			      SNDRV_PCM_RATE_48000),
-	.rate_min =          44100,
-	.rate_max =          48000,
-	.channels_min =	     8,
-	.channels_max =	     8,
-	.buffer_bytes_max =  RME32_BUFFER_SIZE,
-	.period_bytes_min =  RME32_BLOCK_SIZE,
-	.period_bytes_max =  RME32_BLOCK_SIZE,
-	.periods_min =	     RME32_BUFFER_SIZE / RME32_BLOCK_SIZE,
-	.periods_max =	     RME32_BUFFER_SIZE / RME32_BLOCK_SIZE,
-	.fifo_size =         0,
-};
-
 static void snd_rme32_reset_dac(rme32_t *rme32)
 {
         writel(rme32->wcreg | RME32_WCR_PD,
@@ -677,11 +687,19 @@
 			     snd_pcm_hw_params_t * params)
 {
 	int err, rate, dummy;
-	rme32_t *rme32 = _snd_pcm_substream_chip(substream);
+	rme32_t *rme32 = snd_pcm_substream_chip(substream);
+	snd_pcm_runtime_t *runtime = substream->runtime;
+
+	if (rme32->fullduplex_mode) {
+		err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(params));
+		if (err < 0)
+			return err;
+	} else {
+		runtime->dma_area = (void *)(rme32->iobase + RME32_IO_DATA_BUFFER);
+		runtime->dma_addr = rme32->port + RME32_IO_DATA_BUFFER;
+		runtime->dma_bytes = RME32_BUFFER_SIZE;
+	}
 
-	if ((err = snd_pcm_lib_malloc_pages(substream,
-				      params_buffer_bytes(params))) < 0)
-		return err;
 	spin_lock_irq(&rme32->lock);
 	if ((rme32->rcreg & RME32_RCR_KMODE) &&
 	    (rate = snd_rme32_capture_getrate(rme32, &dummy)) > 0) {
@@ -719,45 +737,45 @@
 	return 0;
 }
 
-static int snd_rme32_playback_hw_free(snd_pcm_substream_t * substream)
-{
-	snd_pcm_lib_free_pages(substream);
-	return 0;
-}
-
 static int
 snd_rme32_capture_hw_params(snd_pcm_substream_t * substream,
 			    snd_pcm_hw_params_t * params)
 {
-	unsigned long flags;
 	int err, isadat, rate;
-	rme32_t *rme32 = _snd_pcm_substream_chip(substream);
+	rme32_t *rme32 = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
 
-	if ((err = snd_pcm_lib_malloc_pages(substream,
-				      params_buffer_bytes(params))) < 0)
-		return err;
-	spin_lock_irqsave(&rme32->lock, flags);
+	if (rme32->fullduplex_mode) {
+		err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(params));
+		if (err < 0)
+			return err;
+	} else {
+		runtime->dma_area = (void *)rme32->iobase + RME32_IO_DATA_BUFFER;
+		runtime->dma_addr = rme32->port + RME32_IO_DATA_BUFFER;
+		runtime->dma_bytes = RME32_BUFFER_SIZE;
+	}
+
+	spin_lock_irq(&rme32->lock);
 	/* enable AutoSync for record-preparing */
 	rme32->wcreg |= RME32_WCR_AUTOSYNC;
 	writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
 
 	if ((err = snd_rme32_setformat(rme32, params_format(params))) < 0) {
-		spin_unlock_irqrestore(&rme32->lock, flags);
+		spin_unlock_irq(&rme32->lock);
 		return err;
 	}
 	if ((err = snd_rme32_playback_setrate(rme32, params_rate(params))) < 0) {
-		spin_unlock_irqrestore(&rme32->lock, flags);
+		spin_unlock_irq(&rme32->lock);
 		return err;
 	}
 	if ((rate = snd_rme32_capture_getrate(rme32, &isadat)) > 0) {
                 if ((int)params_rate(params) != rate) {
-                        spin_unlock_irqrestore(&rme32->lock, flags);
+			spin_unlock_irq(&rme32->lock);
                         return -EIO;                    
                 }
                 if ((isadat && runtime->hw.channels_min == 2) ||
                     (!isadat && runtime->hw.channels_min == 8)) {
-                        spin_unlock_irqrestore(&rme32->lock, flags);
+			spin_unlock_irq(&rme32->lock);
                         return -EIO;
                 }
 	}
@@ -769,36 +787,26 @@
 	if (rme32->playback_periodsize != 0) {
 		if (params_period_size(params) << rme32->capture_frlog !=
 		    rme32->playback_periodsize) {
-			spin_unlock_irqrestore(&rme32->lock, flags);
+			spin_unlock_irq(&rme32->lock);
 			return -EBUSY;
 		}
 	}
 	rme32->capture_periodsize =
 	    params_period_size(params) << rme32->capture_frlog;
-	spin_unlock_irqrestore(&rme32->lock, flags);
-
-	return 0;
-}
+	spin_unlock_irq(&rme32->lock);
 
-static int snd_rme32_capture_hw_free(snd_pcm_substream_t * substream)
-{
-	snd_pcm_lib_free_pages(substream);
 	return 0;
 }
 
-static void snd_rme32_playback_start(rme32_t * rme32, int from_pause)
+static int snd_rme32_pcm_hw_free(snd_pcm_substream_t * substream)
 {
-	if (!from_pause) {
-		writel(0, rme32->iobase + RME32_IO_RESET_POS);
-		rme32->playback_last_appl_ptr = 0;
-		rme32->playback_ptr = 0;
-	}
-
-	rme32->wcreg |= RME32_WCR_START;
-	writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
+	rme32_t *rme32 = snd_pcm_substream_chip(substream);
+	if (! rme32->fullduplex_mode)
+		return 0;
+	return snd_pcm_lib_free_pages(substream);
 }
 
-static void snd_rme32_capture_start(rme32_t * rme32, int from_pause)
+static void snd_rme32_pcm_start(rme32_t * rme32, int from_pause)
 {
 	if (!from_pause) {
 		writel(0, rme32->iobase + RME32_IO_RESET_POS);
@@ -808,7 +816,7 @@
 	writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
 }
 
-static void snd_rme32_playback_stop(rme32_t * rme32)
+static void snd_rme32_pcm_stop(rme32_t * rme32, int to_pause)
 {
 	/*
 	 * Check if there is an unconfirmed IRQ, if so confirm it, or else
@@ -822,16 +830,8 @@
 	if (rme32->wcreg & RME32_WCR_SEL)
 		rme32->wcreg |= RME32_WCR_MUTE;
 	writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
-}
-
-static void snd_rme32_capture_stop(rme32_t * rme32)
-{
-	rme32->rcreg = readl(rme32->iobase + RME32_IO_CONTROL_REGISTER);
-	if (rme32->rcreg & RME32_RCR_IRQ) {
-		writel(0, rme32->iobase + RME32_IO_CONFIRM_ACTION_IRQ);
-	}
-	rme32->wcreg &= ~RME32_WCR_START;
-	writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
+	if (! to_pause)
+		writel(0, rme32->iobase + RME32_IO_RESET_POS);
 }
 
 static irqreturn_t
@@ -857,36 +857,46 @@
 static unsigned int period_bytes[] = { RME32_BLOCK_SIZE };
 
 
-#define PERIOD_BYTES sizeof(period_bytes) / sizeof(period_bytes[0])
-
 static snd_pcm_hw_constraint_list_t hw_constraints_period_bytes = {
-	.count = PERIOD_BYTES,
+	.count = ARRAY_SIZE(period_bytes),
 	.list = period_bytes,
 	.mask = 0
 };
 
+static void snd_rme32_set_buffer_constraint(rme32_t *rme32, snd_pcm_runtime_t *runtime)
+{
+	if (! rme32->fullduplex_mode) {
+		snd_pcm_hw_constraint_minmax(runtime,
+					     SNDRV_PCM_HW_PARAM_BUFFER_BYTES,
+					     RME32_BUFFER_SIZE, RME32_BUFFER_SIZE);
+		snd_pcm_hw_constraint_list(runtime, 0,
+					   SNDRV_PCM_HW_PARAM_PERIOD_BYTES,
+					   &hw_constraints_period_bytes);
+	}
+}
+
 static int snd_rme32_playback_spdif_open(snd_pcm_substream_t * substream)
 {
-	unsigned long flags;
 	int rate, dummy;
-	rme32_t *rme32 = _snd_pcm_substream_chip(substream);
+	rme32_t *rme32 = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
 
 	snd_pcm_set_sync(substream);
 
-	spin_lock_irqsave(&rme32->lock, flags);
+	spin_lock_irq(&rme32->lock);
 	if (rme32->playback_substream != NULL) {
-		spin_unlock_irqrestore(&rme32->lock, flags);
+		spin_unlock_irq(&rme32->lock);
 		return -EBUSY;
 	}
 	rme32->wcreg &= ~RME32_WCR_ADAT;
 	writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
 	rme32->playback_substream = substream;
-	rme32->playback_last_appl_ptr = 0;
-	rme32->playback_ptr = 0;
-	spin_unlock_irqrestore(&rme32->lock, flags);
+	spin_unlock_irq(&rme32->lock);
 
-	runtime->hw = snd_rme32_playback_spdif_info;
+	if (rme32->fullduplex_mode)
+		runtime->hw = snd_rme32_spdif_fd_info;
+	else
+		runtime->hw = snd_rme32_spdif_info;
 	if (rme32->pci->device == PCI_DEVICE_ID_DIGI32_PRO) {
 		runtime->hw.rates |= SNDRV_PCM_RATE_64000 | SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000;
 		runtime->hw.rate_max = 96000;
@@ -898,12 +908,8 @@
 		runtime->hw.rate_min = rate;
 		runtime->hw.rate_max = rate;
 	}       
-	snd_pcm_hw_constraint_minmax(runtime,
-				     SNDRV_PCM_HW_PARAM_BUFFER_BYTES,
-				     RME32_BUFFER_SIZE, RME32_BUFFER_SIZE);
-	snd_pcm_hw_constraint_list(runtime, 0,
-				   SNDRV_PCM_HW_PARAM_PERIOD_BYTES,
-				   &hw_constraints_period_bytes);
+
+	snd_rme32_set_buffer_constraint(rme32, runtime);
 
 	rme32->wcreg_spdif_stream = rme32->wcreg_spdif;
 	rme32->spdif_ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE;
@@ -914,23 +920,24 @@
 
 static int snd_rme32_capture_spdif_open(snd_pcm_substream_t * substream)
 {
-	unsigned long flags;
 	int isadat, rate;
-	rme32_t *rme32 = _snd_pcm_substream_chip(substream);
+	rme32_t *rme32 = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
 
 	snd_pcm_set_sync(substream);
 
-	spin_lock_irqsave(&rme32->lock, flags);
+	spin_lock_irq(&rme32->lock);
         if (rme32->capture_substream != NULL) {
-	        spin_unlock_irqrestore(&rme32->lock, flags);
+		spin_unlock_irq(&rme32->lock);
                 return -EBUSY;
         }
 	rme32->capture_substream = substream;
-	rme32->capture_ptr = 0;
-	spin_unlock_irqrestore(&rme32->lock, flags);
+	spin_unlock_irq(&rme32->lock);
 
-	runtime->hw = snd_rme32_capture_spdif_info;
+	if (rme32->fullduplex_mode)
+		runtime->hw = snd_rme32_spdif_fd_info;
+	else
+		runtime->hw = snd_rme32_spdif_info;
 	if (RME32_PRO_WITH_8414(rme32)) {
 		runtime->hw.rates |= SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000;
 		runtime->hw.rate_max = 96000;
@@ -944,12 +951,7 @@
 		runtime->hw.rate_max = rate;
 	}
 
-	snd_pcm_hw_constraint_minmax(runtime,
-				     SNDRV_PCM_HW_PARAM_BUFFER_BYTES,
-				     RME32_BUFFER_SIZE, RME32_BUFFER_SIZE);
-	snd_pcm_hw_constraint_list(runtime, 0,
-				   SNDRV_PCM_HW_PARAM_PERIOD_BYTES,
-				   &hw_constraints_period_bytes);
+	snd_rme32_set_buffer_constraint(rme32, runtime);
 
 	return 0;
 }
@@ -957,26 +959,26 @@
 static int
 snd_rme32_playback_adat_open(snd_pcm_substream_t *substream)
 {
-	unsigned long flags;
 	int rate, dummy;
-	rme32_t *rme32 = _snd_pcm_substream_chip(substream);
+	rme32_t *rme32 = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
 	
 	snd_pcm_set_sync(substream);
 
-	spin_lock_irqsave(&rme32->lock, flags);	
+	spin_lock_irq(&rme32->lock);	
         if (rme32->playback_substream != NULL) {
-	        spin_unlock_irqrestore(&rme32->lock, flags);
+		spin_unlock_irq(&rme32->lock);
                 return -EBUSY;
         }
 	rme32->wcreg |= RME32_WCR_ADAT;
 	writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
 	rme32->playback_substream = substream;
-	rme32->playback_last_appl_ptr = 0;
-	rme32->playback_ptr = 0;
-	spin_unlock_irqrestore(&rme32->lock, flags);
+	spin_unlock_irq(&rme32->lock);
 	
-	runtime->hw = snd_rme32_playback_adat_info;
+	if (rme32->fullduplex_mode)
+		runtime->hw = snd_rme32_adat_fd_info;
+	else
+		runtime->hw = snd_rme32_adat_info;
 	if ((rme32->rcreg & RME32_RCR_KMODE) &&
 	    (rate = snd_rme32_capture_getrate(rme32, &dummy)) > 0) {
                 /* AutoSync */
@@ -984,22 +986,22 @@
                 runtime->hw.rate_min = rate;
                 runtime->hw.rate_max = rate;
 	}        
-	snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_BUFFER_BYTES,
-				     RME32_BUFFER_SIZE, RME32_BUFFER_SIZE);
-	snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES,
-				   &hw_constraints_period_bytes);
+
+	snd_rme32_set_buffer_constraint(rme32, runtime);
 	return 0;
 }
 
 static int
 snd_rme32_capture_adat_open(snd_pcm_substream_t *substream)
 {
-	unsigned long flags;
 	int isadat, rate;
-	rme32_t *rme32 = _snd_pcm_substream_chip(substream);
+	rme32_t *rme32 = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
 
-	runtime->hw = snd_rme32_capture_adat_info;
+	if (rme32->fullduplex_mode)
+		runtime->hw = snd_rme32_adat_fd_info;
+	else
+		runtime->hw = snd_rme32_adat_info;
 	if ((rate = snd_rme32_capture_getrate(rme32, &isadat)) > 0) {
 		if (!isadat) {
 			return -EIO;
@@ -1011,33 +1013,28 @@
 
 	snd_pcm_set_sync(substream);
         
-	spin_lock_irqsave(&rme32->lock, flags);	
+	spin_lock_irq(&rme32->lock);	
 	if (rme32->capture_substream != NULL) {
-		spin_unlock_irqrestore(&rme32->lock, flags);
+		spin_unlock_irq(&rme32->lock);
 		return -EBUSY;
         }
 	rme32->capture_substream = substream;
-	rme32->capture_ptr = 0;
-	spin_unlock_irqrestore(&rme32->lock, flags);
+	spin_unlock_irq(&rme32->lock);
 
-	snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_BUFFER_BYTES,
-				     RME32_BUFFER_SIZE, RME32_BUFFER_SIZE);
-	snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES,
-				   &hw_constraints_period_bytes);
+	snd_rme32_set_buffer_constraint(rme32, runtime);
 	return 0;
 }
 
 static int snd_rme32_playback_close(snd_pcm_substream_t * substream)
 {
-	unsigned long flags;
-	rme32_t *rme32 = _snd_pcm_substream_chip(substream);
+	rme32_t *rme32 = snd_pcm_substream_chip(substream);
 	int spdif = 0;
 
-	spin_lock_irqsave(&rme32->lock, flags);
+	spin_lock_irq(&rme32->lock);
 	rme32->playback_substream = NULL;
 	rme32->playback_periodsize = 0;
 	spdif = (rme32->wcreg & RME32_WCR_ADAT) == 0;
-	spin_unlock_irqrestore(&rme32->lock, flags);
+	spin_unlock_irq(&rme32->lock);
 	if (spdif) {
 		rme32->spdif_ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE;
 		snd_ctl_notify(rme32->card, SNDRV_CTL_EVENT_MASK_VALUE |
@@ -1049,207 +1046,203 @@
 
 static int snd_rme32_capture_close(snd_pcm_substream_t * substream)
 {
-	unsigned long flags;
-	rme32_t *rme32 = _snd_pcm_substream_chip(substream);
+	rme32_t *rme32 = snd_pcm_substream_chip(substream);
 
-	spin_lock_irqsave(&rme32->lock, flags);
+	spin_lock_irq(&rme32->lock);
 	rme32->capture_substream = NULL;
 	rme32->capture_periodsize = 0;
-	spin_unlock_irqrestore(&rme32->lock, flags);
+	spin_unlock(&rme32->lock);
 	return 0;
 }
 
 static int snd_rme32_playback_prepare(snd_pcm_substream_t * substream)
 {
-	rme32_t *rme32 = _snd_pcm_substream_chip(substream);
-	unsigned long flags;
+	rme32_t *rme32 = snd_pcm_substream_chip(substream);
 
-	spin_lock_irqsave(&rme32->lock, flags);
-	if (RME32_ISWORKING(rme32)) {
-		snd_rme32_playback_stop(rme32);
+	spin_lock_irq(&rme32->lock);
+	if (rme32->fullduplex_mode) {
+		memset(&rme32->playback_pcm, 0, sizeof(rme32->playback_pcm));
+		rme32->playback_pcm.hw_buffer_size = RME32_BUFFER_SIZE;
+		rme32->playback_pcm.sw_buffer_size = snd_pcm_lib_buffer_bytes(substream);
+	} else {
+		writel(0, rme32->iobase + RME32_IO_RESET_POS);
 	}
-	writel(0, rme32->iobase + RME32_IO_RESET_POS);
 	if (rme32->wcreg & RME32_WCR_SEL)
 		rme32->wcreg &= ~RME32_WCR_MUTE;
 	writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
-	spin_unlock_irqrestore(&rme32->lock, flags);
+	spin_unlock_irq(&rme32->lock);
 	return 0;
 }
 
 static int snd_rme32_capture_prepare(snd_pcm_substream_t * substream)
 {
-	rme32_t *rme32 = _snd_pcm_substream_chip(substream);
-	unsigned long flags;
+	rme32_t *rme32 = snd_pcm_substream_chip(substream);
 
-	spin_lock_irqsave(&rme32->lock, flags);
-	if (RME32_ISWORKING(rme32)) {
-		snd_rme32_capture_stop(rme32);
+	spin_lock_irq(&rme32->lock);
+	if (rme32->fullduplex_mode) {
+		memset(&rme32->capture_pcm, 0, sizeof(rme32->capture_pcm));
+		rme32->capture_pcm.hw_buffer_size = RME32_BUFFER_SIZE;
+		rme32->capture_pcm.hw_queue_size = RME32_BUFFER_SIZE / 2;
+		rme32->capture_pcm.sw_buffer_size = snd_pcm_lib_buffer_bytes(substream);
+	} else {
+		writel(0, rme32->iobase + RME32_IO_RESET_POS);
 	}
-	writel(0, rme32->iobase + RME32_IO_RESET_POS);
-	spin_unlock_irqrestore(&rme32->lock, flags);
+	spin_unlock_irq(&rme32->lock);
 	return 0;
 }
 
 static int
-snd_rme32_playback_trigger(snd_pcm_substream_t * substream, int cmd)
+snd_rme32_pcm_trigger(snd_pcm_substream_t * substream, int cmd)
 {
-	rme32_t *rme32 = _snd_pcm_substream_chip(substream);
-	switch (cmd) {
-	case SNDRV_PCM_TRIGGER_START:
-		if (!RME32_ISWORKING(rme32)) {
-			if (substream != rme32->playback_substream) {
-				return -EBUSY;
+	rme32_t *rme32 = snd_pcm_substream_chip(substream);
+	struct list_head *pos;
+	snd_pcm_substream_t *s;
+
+	spin_lock(&rme32->lock);
+	snd_pcm_group_for_each(pos, substream) {
+		s = snd_pcm_group_substream_entry(pos);
+		if (s != rme32->playback_substream &&
+		    s != rme32->capture_substream)
+			continue;
+		switch (cmd) {
+		case SNDRV_PCM_TRIGGER_START:
+			rme32->running |= (1 << s->stream);
+			if (rme32->fullduplex_mode) {
+				/* remember the current DMA position */
+				if (s == rme32->playback_substream) {
+					rme32->playback_pcm.hw_io =
+					rme32->playback_pcm.hw_data = snd_rme32_pcm_byteptr(rme32);
+				} else {
+					rme32->capture_pcm.hw_io =
+					rme32->capture_pcm.hw_data = snd_rme32_pcm_byteptr(rme32);
+				}
 			}
-			snd_rme32_playback_start(rme32, 0);
+			break;
+		case SNDRV_PCM_TRIGGER_STOP:
+			rme32->running &= ~(1 << s->stream);
+			break;
 		}
-		break;
-
-	case SNDRV_PCM_TRIGGER_STOP:
-		if (RME32_ISWORKING(rme32)) {
-			if (substream != rme32->playback_substream) {
-				return -EBUSY;
+		snd_pcm_trigger_done(s, substream);
+	}
+	
+	/* prefill playback buffer */
+	if (cmd == SNDRV_PCM_TRIGGER_START) {
+		snd_pcm_group_for_each(pos, substream) {
+			s = snd_pcm_group_substream_entry(pos);
+			if (s == rme32->playback_substream) {
+				s->ops->ack(s);
+				break;
 			}
-			snd_rme32_playback_stop(rme32);
-		}
-		break;
-
-	case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
-		if (RME32_ISWORKING(rme32)) {
-			snd_rme32_playback_stop(rme32);
-		}
-		break;
-
-	case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
-		if (!RME32_ISWORKING(rme32)) {
-			snd_rme32_playback_start(rme32, 1);
 		}
-		break;
-
-	default:
-		return -EINVAL;
 	}
-	return 0;
-}
-
-static int
-snd_rme32_capture_trigger(snd_pcm_substream_t * substream, int cmd)
-{
-	rme32_t *rme32 = _snd_pcm_substream_chip(substream);
 
 	switch (cmd) {
 	case SNDRV_PCM_TRIGGER_START:
-		if (!RME32_ISWORKING(rme32)) {
-			if (substream != rme32->capture_substream) {
-				return -EBUSY;
-			}
-			snd_rme32_capture_start(rme32, 0);
-		}
+		if (rme32->running && ! RME32_ISWORKING(rme32))
+			snd_rme32_pcm_start(rme32, 0);
 		break;
-
 	case SNDRV_PCM_TRIGGER_STOP:
-		if (RME32_ISWORKING(rme32)) {
-			if (substream != rme32->capture_substream) {
-				return -EBUSY;
-			}
-			snd_rme32_capture_stop(rme32);
-		}
+		if (! rme32->running && RME32_ISWORKING(rme32))
+			snd_rme32_pcm_stop(rme32, 0);
 		break;
-
 	case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
-		if (RME32_ISWORKING(rme32)) {
-			snd_rme32_capture_stop(rme32);
-		}
+		if (rme32->running && RME32_ISWORKING(rme32))
+			snd_rme32_pcm_stop(rme32, 1);
 		break;
-
 	case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
-		if (!RME32_ISWORKING(rme32)) {
-			snd_rme32_capture_start(rme32, 1);
-		}
+		if (rme32->running && ! RME32_ISWORKING(rme32))
+			snd_rme32_pcm_start(rme32, 1);
 		break;
-
-	default:
-		return -EINVAL;
 	}
-
+	spin_unlock(&rme32->lock);
 	return 0;
 }
 
+/* pointer callback for halfduplex mode */
 static snd_pcm_uframes_t
 snd_rme32_playback_pointer(snd_pcm_substream_t * substream)
 {
-	rme32_t *rme32 = _snd_pcm_substream_chip(substream);
-	snd_pcm_runtime_t *runtime = substream->runtime;
-	snd_pcm_sframes_t diff;
-	size_t bytes;
+	rme32_t *rme32 = snd_pcm_substream_chip(substream);
+	return snd_rme32_pcm_byteptr(rme32) >> rme32->playback_frlog;
+}
 
+static snd_pcm_uframes_t
+snd_rme32_capture_pointer(snd_pcm_substream_t * substream)
+{
+	rme32_t *rme32 = snd_pcm_substream_chip(substream);
+	return snd_rme32_pcm_byteptr(rme32) >> rme32->capture_frlog;
+}
 
-	if (runtime->access == SNDRV_PCM_ACCESS_MMAP_INTERLEAVED) {
-		diff = runtime->control->appl_ptr -
-		       rme32->playback_last_appl_ptr;
-		rme32->playback_last_appl_ptr = runtime->control->appl_ptr;
-		if (diff != 0 && diff < -(snd_pcm_sframes_t) (runtime->boundary >> 1)) {
-			diff += runtime->boundary;
-		}
-		bytes = diff << rme32->playback_frlog;
-		if (bytes > RME32_BUFFER_SIZE - rme32->playback_ptr) {
-			memcpy_toio((void *)(rme32->iobase + RME32_IO_DATA_BUFFER + rme32->playback_ptr),
-				    runtime->dma_area + rme32->playback_ptr,
-				    RME32_BUFFER_SIZE - rme32->playback_ptr);
-			bytes -= RME32_BUFFER_SIZE - rme32->playback_ptr;
-			if (bytes > RME32_BUFFER_SIZE) {
-				bytes = RME32_BUFFER_SIZE;
-			}
-			memcpy_toio((void *)(rme32->iobase + RME32_IO_DATA_BUFFER),
-				    runtime->dma_area, bytes);
-			rme32->playback_ptr = bytes;
-		} else if (bytes != 0) {
-			memcpy_toio((void *)(rme32->iobase + RME32_IO_DATA_BUFFER + rme32->playback_ptr),
-				    runtime->dma_area + rme32->playback_ptr, bytes);
-			rme32->playback_ptr += bytes;
-		}
-	}
-	return snd_rme32_playback_ptr(rme32);
+
+/* ack and pointer callbacks for fullduplex mode */
+static void snd_rme32_pb_trans_copy(snd_pcm_substream_t *substream,
+				    snd_pcm_indirect_t *rec, size_t bytes)
+{
+	rme32_t *rme32 = snd_pcm_substream_chip(substream);
+	memcpy_toio(rme32->iobase + RME32_IO_DATA_BUFFER + rec->hw_data,
+		    substream->runtime->dma_area + rec->sw_data, bytes);
+}
+
+static int snd_rme32_playback_fd_ack(snd_pcm_substream_t *substream)
+{
+	rme32_t *rme32 = snd_pcm_substream_chip(substream);
+	snd_pcm_indirect_t *rec, *cprec;
+	unsigned long flags;
+
+	rec = &rme32->playback_pcm;
+	cprec = &rme32->capture_pcm;
+	spin_lock_irqsave(&rme32->lock, flags);
+	rec->hw_queue_size = RME32_BUFFER_SIZE;
+	if (rme32->running & (1 << SNDRV_PCM_STREAM_CAPTURE))
+		rec->hw_queue_size -= cprec->hw_ready;
+	spin_unlock_irqrestore(&rme32->lock, flags);
+	snd_pcm_indirect_playback_transfer(substream, rec,
+					   snd_rme32_pb_trans_copy);
+	return 0;
+}
+
+static void snd_rme32_cp_trans_copy(snd_pcm_substream_t *substream,
+				    snd_pcm_indirect_t *rec, size_t bytes)
+{
+	rme32_t *rme32 = snd_pcm_substream_chip(substream);
+	memcpy_fromio(substream->runtime->dma_area + rec->sw_data,
+		      rme32->iobase + RME32_IO_DATA_BUFFER + rec->hw_data,
+		      bytes);
+}
+
+static int snd_rme32_capture_fd_ack(snd_pcm_substream_t *substream)
+{
+	rme32_t *rme32 = snd_pcm_substream_chip(substream);
+	snd_pcm_indirect_capture_transfer(substream, &rme32->capture_pcm,
+					  snd_rme32_cp_trans_copy);
+	return 0;
 }
 
 static snd_pcm_uframes_t
-snd_rme32_capture_pointer(snd_pcm_substream_t * substream)
+snd_rme32_playback_fd_pointer(snd_pcm_substream_t * substream)
 {
-	rme32_t *rme32 = _snd_pcm_substream_chip(substream);
-	snd_pcm_runtime_t *runtime = substream->runtime;
-	snd_pcm_uframes_t frameptr;
-	size_t ptr;
+	rme32_t *rme32 = snd_pcm_substream_chip(substream);
+	return snd_pcm_indirect_playback_pointer(substream, &rme32->playback_pcm,
+						 snd_rme32_pcm_byteptr(rme32));
+}
 
-	frameptr = snd_rme32_capture_ptr(rme32);
-	if (runtime->access == SNDRV_PCM_ACCESS_MMAP_INTERLEAVED) {
-		ptr = frameptr << rme32->capture_frlog;
-		if (ptr > rme32->capture_ptr) {
-			memcpy_fromio(runtime->dma_area + rme32->capture_ptr,
-				      (void *)(rme32->iobase + RME32_IO_DATA_BUFFER +
-					       rme32->capture_ptr),
-				      ptr - rme32->capture_ptr);
-			rme32->capture_ptr += ptr - rme32->capture_ptr;
-		} else if (ptr < rme32->capture_ptr) {
-			memcpy_fromio(runtime->dma_area + rme32->capture_ptr,
-				      (void *)(rme32->iobase + RME32_IO_DATA_BUFFER +
-					       rme32->capture_ptr),
-				      RME32_BUFFER_SIZE - rme32->capture_ptr);
-			memcpy_fromio(runtime->dma_area,
-				      (void *)(rme32->iobase + RME32_IO_DATA_BUFFER),
-				      ptr);
-			rme32->capture_ptr = ptr;
-		}
-	}
-	return frameptr;
+static snd_pcm_uframes_t
+snd_rme32_capture_fd_pointer(snd_pcm_substream_t * substream)
+{
+	rme32_t *rme32 = snd_pcm_substream_chip(substream);
+	return snd_pcm_indirect_capture_pointer(substream, &rme32->capture_pcm,
+						snd_rme32_pcm_byteptr(rme32));
 }
 
+/* for halfduplex mode */
 static snd_pcm_ops_t snd_rme32_playback_spdif_ops = {
 	.open =		snd_rme32_playback_spdif_open,
 	.close =	snd_rme32_playback_close,
 	.ioctl =	snd_pcm_lib_ioctl,
 	.hw_params =	snd_rme32_playback_hw_params,
-	.hw_free =	snd_rme32_playback_hw_free,
+	.hw_free =	snd_rme32_pcm_hw_free,
 	.prepare =	snd_rme32_playback_prepare,
-	.trigger =	snd_rme32_playback_trigger,
+	.trigger =	snd_rme32_pcm_trigger,
 	.pointer =	snd_rme32_playback_pointer,
 	.copy =		snd_rme32_playback_copy,
 	.silence =	snd_rme32_playback_silence,
@@ -1260,9 +1253,9 @@
 	.close =	snd_rme32_capture_close,
 	.ioctl =	snd_pcm_lib_ioctl,
 	.hw_params =	snd_rme32_capture_hw_params,
-	.hw_free =	snd_rme32_capture_hw_free,
+	.hw_free =	snd_rme32_pcm_hw_free,
 	.prepare =	snd_rme32_capture_prepare,
-	.trigger =	snd_rme32_capture_trigger,
+	.trigger =	snd_rme32_pcm_trigger,
 	.pointer =	snd_rme32_capture_pointer,
 	.copy =		snd_rme32_capture_copy,
 };
@@ -1272,9 +1265,8 @@
 	.close =	snd_rme32_playback_close,
 	.ioctl =	snd_pcm_lib_ioctl,
 	.hw_params =	snd_rme32_playback_hw_params,
-	.hw_free =	snd_rme32_playback_hw_free,
 	.prepare =	snd_rme32_playback_prepare,
-	.trigger =	snd_rme32_playback_trigger,
+	.trigger =	snd_rme32_pcm_trigger,
 	.pointer =	snd_rme32_playback_pointer,
 	.copy =		snd_rme32_playback_copy,
 	.silence =	snd_rme32_playback_silence,
@@ -1285,13 +1277,59 @@
 	.close =	snd_rme32_capture_close,
 	.ioctl =	snd_pcm_lib_ioctl,
 	.hw_params =	snd_rme32_capture_hw_params,
-	.hw_free =	snd_rme32_capture_hw_free,
 	.prepare =	snd_rme32_capture_prepare,
-	.trigger =	snd_rme32_capture_trigger,
+	.trigger =	snd_rme32_pcm_trigger,
 	.pointer =	snd_rme32_capture_pointer,
 	.copy =		snd_rme32_capture_copy,
 };
 
+/* for fullduplex mode */
+static snd_pcm_ops_t snd_rme32_playback_spdif_fd_ops = {
+	.open =		snd_rme32_playback_spdif_open,
+	.close =	snd_rme32_playback_close,
+	.ioctl =	snd_pcm_lib_ioctl,
+	.hw_params =	snd_rme32_playback_hw_params,
+	.hw_free =	snd_rme32_pcm_hw_free,
+	.prepare =	snd_rme32_playback_prepare,
+	.trigger =	snd_rme32_pcm_trigger,
+	.pointer =	snd_rme32_playback_fd_pointer,
+	.ack =		snd_rme32_playback_fd_ack,
+};
+
+static snd_pcm_ops_t snd_rme32_capture_spdif_fd_ops = {
+	.open =		snd_rme32_capture_spdif_open,
+	.close =	snd_rme32_capture_close,
+	.ioctl =	snd_pcm_lib_ioctl,
+	.hw_params =	snd_rme32_capture_hw_params,
+	.hw_free =	snd_rme32_pcm_hw_free,
+	.prepare =	snd_rme32_capture_prepare,
+	.trigger =	snd_rme32_pcm_trigger,
+	.pointer =	snd_rme32_capture_fd_pointer,
+	.ack =		snd_rme32_capture_fd_ack,
+};
+
+static snd_pcm_ops_t snd_rme32_playback_adat_fd_ops = {
+	.open =		snd_rme32_playback_adat_open,
+	.close =	snd_rme32_playback_close,
+	.ioctl =	snd_pcm_lib_ioctl,
+	.hw_params =	snd_rme32_playback_hw_params,
+	.prepare =	snd_rme32_playback_prepare,
+	.trigger =	snd_rme32_pcm_trigger,
+	.pointer =	snd_rme32_playback_fd_pointer,
+	.ack =		snd_rme32_playback_fd_ack,
+};
+
+static snd_pcm_ops_t snd_rme32_capture_adat_fd_ops = {
+	.open =		snd_rme32_capture_adat_open,
+	.close =	snd_rme32_capture_close,
+	.ioctl =	snd_pcm_lib_ioctl,
+	.hw_params =	snd_rme32_capture_hw_params,
+	.prepare =	snd_rme32_capture_prepare,
+	.trigger =	snd_rme32_pcm_trigger,
+	.pointer =	snd_rme32_capture_fd_pointer,
+	.ack =		snd_rme32_capture_fd_ack,
+};
+
 static void snd_rme32_free(void *private_data)
 {
 	rme32_t *rme32 = (rme32_t *) private_data;
@@ -1300,8 +1338,7 @@
 		return;
 	}
 	if (rme32->irq >= 0) {
-		snd_rme32_playback_stop(rme32);
-		snd_rme32_capture_stop(rme32);
+		snd_rme32_pcm_stop(rme32, 0);
 		free_irq(rme32->irq, (void *) rme32);
 		rme32->irq = -1;
 	}
@@ -1309,9 +1346,9 @@
 		iounmap((void *) rme32->iobase);
 		rme32->iobase = 0;
 	}
-	if (rme32->res_port != NULL) {
-		release_resource(rme32->res_port);
-		rme32->res_port = NULL;
+	if (rme32->port) {
+		pci_release_regions(rme32->pci);
+		rme32->port = 0;
 	}
 }
 
@@ -1319,7 +1356,6 @@
 {
 	rme32_t *rme32 = (rme32_t *) pcm->private_data;
 	rme32->spdif_pcm = NULL;
-	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
 
 static void
@@ -1327,7 +1363,6 @@
 {
 	rme32_t *rme32 = (rme32_t *) pcm->private_data;
 	rme32->adat_pcm = NULL;
-	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
 
 static int __devinit snd_rme32_create(rme32_t * rme32)
@@ -1336,25 +1371,21 @@
 	int err;
 
 	rme32->irq = -1;
+	spin_lock_init(&rme32->lock);
 
 	if ((err = pci_enable_device(pci)) < 0)
 		return err;
 
+	if ((err = pci_request_regions(pci, "RME32")) < 0)
+		return err;
 	rme32->port = pci_resource_start(rme32->pci, 0);
 
-	if ((rme32->res_port = request_mem_region(rme32->port, RME32_IO_SIZE, "RME32")) == NULL) {
-		snd_printk("unable to grab memory region 0x%lx-0x%lx\n",
-			   rme32->port, rme32->port + RME32_IO_SIZE - 1);
-		return -EBUSY;
-	}
-
 	if (request_irq(pci->irq, snd_rme32_interrupt, SA_INTERRUPT | SA_SHIRQ, "RME32", (void *) rme32)) {
 		snd_printk("unable to grab IRQ %d\n", pci->irq);
 		return -EBUSY;
 	}
 	rme32->irq = pci->irq;
 
-	spin_lock_init(&rme32->lock);
 	if ((rme32->iobase = (unsigned long) 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);
@@ -1371,18 +1402,22 @@
 	rme32->spdif_pcm->private_data = rme32;
 	rme32->spdif_pcm->private_free = snd_rme32_free_spdif_pcm;
 	strcpy(rme32->spdif_pcm->name, "Digi32 IEC958");
-	snd_pcm_set_ops(rme32->spdif_pcm, SNDRV_PCM_STREAM_PLAYBACK,
-			&snd_rme32_playback_spdif_ops);
-	snd_pcm_set_ops(rme32->spdif_pcm, SNDRV_PCM_STREAM_CAPTURE,
-			&snd_rme32_capture_spdif_ops);
-
-	rme32->spdif_pcm->info_flags = 0;
-
-	snd_pcm_lib_preallocate_pages_for_all(rme32->spdif_pcm,
-					      SNDRV_DMA_TYPE_CONTINUOUS,
-					      snd_dma_continuous_data(GFP_KERNEL),
-					      RME32_BUFFER_SIZE,
-					      RME32_BUFFER_SIZE);
+	if (rme32->fullduplex_mode) {
+		snd_pcm_set_ops(rme32->spdif_pcm, SNDRV_PCM_STREAM_PLAYBACK,
+				&snd_rme32_playback_spdif_fd_ops);
+		snd_pcm_set_ops(rme32->spdif_pcm, SNDRV_PCM_STREAM_CAPTURE,
+				&snd_rme32_capture_spdif_fd_ops);
+		snd_pcm_lib_preallocate_pages_for_all(rme32->spdif_pcm, SNDRV_DMA_TYPE_CONTINUOUS,
+						      snd_dma_continuous_data(GFP_KERNEL),
+						      0, RME32_MID_BUFFER_SIZE);
+		rme32->spdif_pcm->info_flags = SNDRV_PCM_INFO_JOINT_DUPLEX;
+	} else {
+		snd_pcm_set_ops(rme32->spdif_pcm, SNDRV_PCM_STREAM_PLAYBACK,
+				&snd_rme32_playback_spdif_ops);
+		snd_pcm_set_ops(rme32->spdif_pcm, SNDRV_PCM_STREAM_CAPTURE,
+				&snd_rme32_capture_spdif_ops);
+		rme32->spdif_pcm->info_flags = SNDRV_PCM_INFO_HALF_DUPLEX;
+	}
 
 	/* set up ALSA pcm device for ADAT */
 	if ((pci->device == PCI_DEVICE_ID_DIGI32) ||
@@ -1399,18 +1434,22 @@
 		rme32->adat_pcm->private_data = rme32;
 		rme32->adat_pcm->private_free = snd_rme32_free_adat_pcm;
 		strcpy(rme32->adat_pcm->name, "Digi32 ADAT");
-		snd_pcm_set_ops(rme32->adat_pcm, SNDRV_PCM_STREAM_PLAYBACK, 
-				&snd_rme32_playback_adat_ops);
-		snd_pcm_set_ops(rme32->adat_pcm, SNDRV_PCM_STREAM_CAPTURE, 
-				&snd_rme32_capture_adat_ops);
-		
-		rme32->adat_pcm->info_flags = 0;
-
-		snd_pcm_lib_preallocate_pages_for_all(rme32->adat_pcm, 
-						      SNDRV_DMA_TYPE_CONTINUOUS,
-						      snd_dma_continuous_data(GFP_KERNEL),
-						      RME32_BUFFER_SIZE, 
-						      RME32_BUFFER_SIZE);
+		if (rme32->fullduplex_mode) {
+			snd_pcm_set_ops(rme32->adat_pcm, SNDRV_PCM_STREAM_PLAYBACK, 
+					&snd_rme32_playback_adat_fd_ops);
+			snd_pcm_set_ops(rme32->adat_pcm, SNDRV_PCM_STREAM_CAPTURE, 
+					&snd_rme32_capture_adat_fd_ops);
+			snd_pcm_lib_preallocate_pages_for_all(rme32->adat_pcm, SNDRV_DMA_TYPE_CONTINUOUS,
+							      snd_dma_continuous_data(GFP_KERNEL),
+							      0, RME32_MID_BUFFER_SIZE);
+			rme32->adat_pcm->info_flags = SNDRV_PCM_INFO_JOINT_DUPLEX;
+		} else {
+			snd_pcm_set_ops(rme32->adat_pcm, SNDRV_PCM_STREAM_PLAYBACK, 
+					&snd_rme32_playback_adat_ops);
+			snd_pcm_set_ops(rme32->adat_pcm, SNDRV_PCM_STREAM_CAPTURE, 
+					&snd_rme32_capture_adat_ops);
+			rme32->adat_pcm->info_flags = SNDRV_PCM_INFO_HALF_DUPLEX;
+		}
 	}
 
 
@@ -1418,8 +1457,7 @@
 	rme32->capture_periodsize = 0;
 
 	/* make sure playback/capture is stopped, if by some reason active */
-	snd_rme32_playback_stop(rme32);
-	snd_rme32_capture_stop(rme32);
+	snd_rme32_pcm_stop(rme32, 0);
 
         /* reset DAC */
         snd_rme32_reset_dac(rme32);
@@ -1464,6 +1502,10 @@
 	snd_iprintf(buffer, " (index #%d)\n", rme32->card->number + 1);
 
 	snd_iprintf(buffer, "\nGeneral settings\n");
+	if (rme32->fullduplex_mode)
+		snd_iprintf(buffer, "  Full-duplex mode\n");
+	else
+		snd_iprintf(buffer, "  Half-duplex mode\n");
 	if (RME32_PRO_WITH_8414(rme32)) {
 		snd_iprintf(buffer, "  receiver: CS8414\n");
 	} else {
@@ -1569,26 +1611,24 @@
 snd_rme32_get_loopback_control(snd_kcontrol_t * kcontrol,
 			       snd_ctl_elem_value_t * ucontrol)
 {
-	rme32_t *rme32 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme32_t *rme32 = snd_kcontrol_chip(kcontrol);
 
-	spin_lock_irqsave(&rme32->lock, flags);
+	spin_lock_irq(&rme32->lock);
 	ucontrol->value.integer.value[0] =
 	    rme32->wcreg & RME32_WCR_SEL ? 0 : 1;
-	spin_unlock_irqrestore(&rme32->lock, flags);
+	spin_unlock_irq(&rme32->lock);
 	return 0;
 }
 static int
 snd_rme32_put_loopback_control(snd_kcontrol_t * kcontrol,
 			       snd_ctl_elem_value_t * ucontrol)
 {
-	rme32_t *rme32 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme32_t *rme32 = snd_kcontrol_chip(kcontrol);
 	unsigned int val;
 	int change;
 
 	val = ucontrol->value.integer.value[0] ? 0 : RME32_WCR_SEL;
-	spin_lock_irqsave(&rme32->lock, flags);
+	spin_lock_irq(&rme32->lock);
 	val = (rme32->wcreg & ~RME32_WCR_SEL) | val;
 	change = val != rme32->wcreg;
 	if (ucontrol->value.integer.value[0])
@@ -1597,7 +1637,7 @@
 		val |= RME32_WCR_MUTE;
 	writel(rme32->wcreg =
 	       val, rme32->iobase + RME32_IO_CONTROL_REGISTER);
-	spin_unlock_irqrestore(&rme32->lock, flags);
+	spin_unlock_irq(&rme32->lock);
 	return change;
 }
 
@@ -1605,7 +1645,7 @@
 snd_rme32_info_inputtype_control(snd_kcontrol_t * kcontrol,
 				 snd_ctl_elem_info_t * uinfo)
 {
-	rme32_t *rme32 = _snd_kcontrol_chip(kcontrol);
+	rme32_t *rme32 = snd_kcontrol_chip(kcontrol);
 	static char *texts[4] = { "Optical", "Coaxial", "Internal", "XLR" };
 
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
@@ -1635,11 +1675,10 @@
 snd_rme32_get_inputtype_control(snd_kcontrol_t * kcontrol,
 				snd_ctl_elem_value_t * ucontrol)
 {
-	rme32_t *rme32 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme32_t *rme32 = snd_kcontrol_chip(kcontrol);
 	unsigned int items = 3;
 
-	spin_lock_irqsave(&rme32->lock, flags);
+	spin_lock_irq(&rme32->lock);
 	ucontrol->value.enumerated.item[0] = snd_rme32_getinputtype(rme32);
 
 	switch (rme32->pci->device) {
@@ -1658,15 +1697,14 @@
 		ucontrol->value.enumerated.item[0] = items - 1;
 	}
 
-	spin_unlock_irqrestore(&rme32->lock, flags);
+	spin_unlock_irq(&rme32->lock);
 	return 0;
 }
 static int
 snd_rme32_put_inputtype_control(snd_kcontrol_t * kcontrol,
 				snd_ctl_elem_value_t * ucontrol)
 {
-	rme32_t *rme32 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme32_t *rme32 = snd_kcontrol_chip(kcontrol);
 	unsigned int val;
 	int change, items = 3;
 
@@ -1684,10 +1722,10 @@
 	}
 	val = ucontrol->value.enumerated.item[0] % items;
 
-	spin_lock_irqsave(&rme32->lock, flags);
+	spin_lock_irq(&rme32->lock);
 	change = val != (unsigned int)snd_rme32_getinputtype(rme32);
 	snd_rme32_setinputtype(rme32, val);
-	spin_unlock_irqrestore(&rme32->lock, flags);
+	spin_unlock_irq(&rme32->lock);
 	return change;
 }
 
@@ -1714,28 +1752,26 @@
 snd_rme32_get_clockmode_control(snd_kcontrol_t * kcontrol,
 				snd_ctl_elem_value_t * ucontrol)
 {
-	rme32_t *rme32 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme32_t *rme32 = snd_kcontrol_chip(kcontrol);
 
-	spin_lock_irqsave(&rme32->lock, flags);
+	spin_lock_irq(&rme32->lock);
 	ucontrol->value.enumerated.item[0] = snd_rme32_getclockmode(rme32);
-	spin_unlock_irqrestore(&rme32->lock, flags);
+	spin_unlock_irq(&rme32->lock);
 	return 0;
 }
 static int
 snd_rme32_put_clockmode_control(snd_kcontrol_t * kcontrol,
 				snd_ctl_elem_value_t * ucontrol)
 {
-	rme32_t *rme32 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme32_t *rme32 = snd_kcontrol_chip(kcontrol);
 	unsigned int val;
 	int change;
 
 	val = ucontrol->value.enumerated.item[0] % 3;
-	spin_lock_irqsave(&rme32->lock, flags);
+	spin_lock_irq(&rme32->lock);
 	change = val != (unsigned int)snd_rme32_getclockmode(rme32);
 	snd_rme32_setclockmode(rme32, val);
-	spin_unlock_irqrestore(&rme32->lock, flags);
+	spin_unlock_irq(&rme32->lock);
 	return change;
 }
 
@@ -1770,7 +1806,7 @@
 static int snd_rme32_control_spdif_get(snd_kcontrol_t * kcontrol,
 				       snd_ctl_elem_value_t * ucontrol)
 {
-	rme32_t *rme32 = _snd_kcontrol_chip(kcontrol);
+	rme32_t *rme32 = snd_kcontrol_chip(kcontrol);
 
 	snd_rme32_convert_to_aes(&ucontrol->value.iec958,
 				 rme32->wcreg_spdif);
@@ -1780,16 +1816,15 @@
 static int snd_rme32_control_spdif_put(snd_kcontrol_t * kcontrol,
 				       snd_ctl_elem_value_t * ucontrol)
 {
-	rme32_t *rme32 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme32_t *rme32 = snd_kcontrol_chip(kcontrol);
 	int change;
 	u32 val;
 
 	val = snd_rme32_convert_from_aes(&ucontrol->value.iec958);
-	spin_lock_irqsave(&rme32->lock, flags);
+	spin_lock_irq(&rme32->lock);
 	change = val != rme32->wcreg_spdif;
 	rme32->wcreg_spdif = val;
-	spin_unlock_irqrestore(&rme32->lock, flags);
+	spin_unlock_irq(&rme32->lock);
 	return change;
 }
 
@@ -1805,7 +1840,7 @@
 					      snd_ctl_elem_value_t *
 					      ucontrol)
 {
-	rme32_t *rme32 = _snd_kcontrol_chip(kcontrol);
+	rme32_t *rme32 = snd_kcontrol_chip(kcontrol);
 
 	snd_rme32_convert_to_aes(&ucontrol->value.iec958,
 				 rme32->wcreg_spdif_stream);
@@ -1816,18 +1851,17 @@
 					      snd_ctl_elem_value_t *
 					      ucontrol)
 {
-	rme32_t *rme32 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme32_t *rme32 = snd_kcontrol_chip(kcontrol);
 	int change;
 	u32 val;
 
 	val = snd_rme32_convert_from_aes(&ucontrol->value.iec958);
-	spin_lock_irqsave(&rme32->lock, flags);
+	spin_lock_irq(&rme32->lock);
 	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);
-	spin_unlock_irqrestore(&rme32->lock, flags);
+	spin_unlock_irq(&rme32->lock);
 	return change;
 }
 
@@ -1907,7 +1941,7 @@
 	int idx, err;
 	snd_kcontrol_t *kctl;
 
-	for (idx = 0; idx < 7; idx++) {
+	for (idx = 0; idx < (int)ARRAY_SIZE(snd_rme32_controls); idx++) {
 		if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_rme32_controls[idx], rme32))) < 0)
 			return err;
 		if (idx == 1)	/* IEC958 (S/PDIF) Stream */
@@ -1952,6 +1986,8 @@
 	rme32->card = card;
 	rme32->pci = pci;
 	snd_card_set_dev(card, &pci->dev);
+        if (fullduplex[dev])
+		rme32->fullduplex_mode = 1;
 	if ((err = snd_rme32_create(rme32)) < 0) {
 		snd_card_free(card);
 		return err;
diff -Nru a/sound/pci/rme96.c b/sound/pci/rme96.c
--- a/sound/pci/rme96.c	2004-08-04 17:48:48 -07:00
+++ b/sound/pci/rme96.c	2004-08-04 17:48:48 -07:00
@@ -47,8 +47,7 @@
 MODULE_DESCRIPTION("RME Digi96, Digi96/8, Digi96/8 PRO, Digi96/8 PST, "
 		   "Digi96/8 PAD");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{RME,Digi96},"
+MODULE_SUPPORTED_DEVICE("{{RME,Digi96},"
 		"{RME,Digi96/8},"
 		"{RME,Digi96/8 PRO},"
 		"{RME,Digi96/8 PST},"
@@ -61,13 +60,10 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for RME Digi96 soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for RME Digi96 soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable RME Digi96 soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 
 /*
  * Defines for RME Digi96 series, from internal RME reference documents
@@ -229,7 +225,6 @@
 	spinlock_t    lock;
 	int irq;
 	unsigned long port;
-	struct resource *res_port;
 	unsigned long iobase;
 	
 	u32 wcreg;    /* cached write control register value */
@@ -250,10 +245,6 @@
         size_t playback_periodsize; /* in bytes, zero if not used */
 	size_t capture_periodsize; /* in bytes, zero if not used */
 
-        snd_pcm_uframes_t playback_last_appl_ptr;
-	size_t playback_ptr;
-	size_t capture_ptr;
-
 	snd_card_t         *card;
 	snd_pcm_t          *spdif_pcm;
 	snd_pcm_t          *adat_pcm; 
@@ -349,7 +340,7 @@
 			   snd_pcm_uframes_t pos,
 			   snd_pcm_uframes_t count)
 {
-	rme96_t *rme96 = _snd_pcm_substream_chip(substream);
+	rme96_t *rme96 = snd_pcm_substream_chip(substream);
 	count <<= rme96->playback_frlog;
 	pos <<= rme96->playback_frlog;
 	memset_io(rme96->iobase + RME96_IO_PLAY_BUFFER + pos,
@@ -364,7 +355,7 @@
 			void __user *src,
 			snd_pcm_uframes_t count)
 {
-	rme96_t *rme96 = _snd_pcm_substream_chip(substream);
+	rme96_t *rme96 = snd_pcm_substream_chip(substream);
 	count <<= rme96->playback_frlog;
 	pos <<= rme96->playback_frlog;
 	copy_from_user_toio(rme96->iobase + RME96_IO_PLAY_BUFFER + pos, src,
@@ -379,7 +370,7 @@
 		       void __user *dst,
 		       snd_pcm_uframes_t count)
 {
-	rme96_t *rme96 = _snd_pcm_substream_chip(substream);
+	rme96_t *rme96 = snd_pcm_substream_chip(substream);
 	count <<= rme96->capture_frlog;
 	pos <<= rme96->capture_frlog;
 	copy_to_user_fromio(dst, rme96->iobase + RME96_IO_REC_BUFFER + pos,
@@ -394,6 +385,7 @@
 {
 	.info =		     (SNDRV_PCM_INFO_MMAP |
 			      SNDRV_PCM_INFO_MMAP_VALID |
+			      SNDRV_PCM_INFO_MMAP_IOMEM |
 			      SNDRV_PCM_INFO_INTERLEAVED |
 			      SNDRV_PCM_INFO_PAUSE),
 	.formats =	     (SNDRV_PCM_FMTBIT_S16_LE |
@@ -423,6 +415,7 @@
 {
 	.info =		     (SNDRV_PCM_INFO_MMAP |
 			      SNDRV_PCM_INFO_MMAP_VALID |
+			      SNDRV_PCM_INFO_MMAP_IOMEM |
 			      SNDRV_PCM_INFO_INTERLEAVED |
 			      SNDRV_PCM_INFO_PAUSE),
 	.formats =	     (SNDRV_PCM_FMTBIT_S16_LE |
@@ -452,6 +445,7 @@
 {
 	.info =		     (SNDRV_PCM_INFO_MMAP |
 			      SNDRV_PCM_INFO_MMAP_VALID |
+			      SNDRV_PCM_INFO_MMAP_IOMEM |
 			      SNDRV_PCM_INFO_INTERLEAVED |
 			      SNDRV_PCM_INFO_PAUSE),
 	.formats =	     (SNDRV_PCM_FMTBIT_S16_LE |
@@ -477,6 +471,7 @@
 {
 	.info =		     (SNDRV_PCM_INFO_MMAP |
 			      SNDRV_PCM_INFO_MMAP_VALID |
+			      SNDRV_PCM_INFO_MMAP_IOMEM |
 			      SNDRV_PCM_INFO_INTERLEAVED |
 			      SNDRV_PCM_INFO_PAUSE),
 	.formats =	     (SNDRV_PCM_FMTBIT_S16_LE |
@@ -991,28 +986,30 @@
 snd_rme96_playback_hw_params(snd_pcm_substream_t *substream,
 			     snd_pcm_hw_params_t *params)
 {
-	unsigned long flags;        
-	rme96_t *rme96 = _snd_pcm_substream_chip(substream);
+	rme96_t *rme96 = snd_pcm_substream_chip(substream);
+	snd_pcm_runtime_t *runtime = substream->runtime;
 	int err, rate, dummy;
 
-	if ((err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(params))) < 0)
-		return err;
-	spin_lock_irqsave(&rme96->lock, flags);
+	runtime->dma_area = (void *)(rme96->iobase + RME96_IO_PLAY_BUFFER);
+	runtime->dma_addr = rme96->port + RME96_IO_PLAY_BUFFER;
+	runtime->dma_bytes = RME96_BUFFER_SIZE;
+
+	spin_lock_irq(&rme96->lock);
 	if (!(rme96->wcreg & RME96_WCR_MASTER) &&
             snd_rme96_getinputtype(rme96) != RME96_INPUT_ANALOG &&
 	    (rate = snd_rme96_capture_getrate(rme96, &dummy)) > 0)
 	{
                 /* slave clock */
                 if ((int)params_rate(params) != rate) {
-		        spin_unlock_irqrestore(&rme96->lock, flags);
+			spin_unlock_irq(&rme96->lock);
 			return -EIO;                    
                 }
 	} else if ((err = snd_rme96_playback_setrate(rme96, params_rate(params))) < 0) {
-		spin_unlock_irqrestore(&rme96->lock, flags);
+		spin_unlock_irq(&rme96->lock);
 		return err;
 	}
 	if ((err = snd_rme96_playback_setformat(rme96, params_format(params))) < 0) {
-		spin_unlock_irqrestore(&rme96->lock, flags);
+		spin_unlock_irq(&rme96->lock);
 		return err;
 	}
 	snd_rme96_setframelog(rme96, params_channels(params), 1);
@@ -1020,7 +1017,7 @@
 		if (params_period_size(params) << rme96->playback_frlog !=
 		    rme96->capture_periodsize)
 		{
-			spin_unlock_irqrestore(&rme96->lock, flags);
+			spin_unlock_irq(&rme96->lock);
 			return -EBUSY;
 		}
 	}
@@ -1032,50 +1029,44 @@
 		rme96->wcreg &= ~(RME96_WCR_PRO | RME96_WCR_DOLBY | RME96_WCR_EMP);
 		writel(rme96->wcreg |= rme96->wcreg_spdif_stream, rme96->iobase + RME96_IO_CONTROL_REGISTER);
 	}
-	spin_unlock_irqrestore(&rme96->lock, flags);
+	spin_unlock_irq(&rme96->lock);
 		
 	return 0;
 }
 
 static int
-snd_rme96_playback_hw_free(snd_pcm_substream_t *substream)
-{
-	snd_pcm_lib_free_pages(substream);
-	return 0;
-}
-
-static int
 snd_rme96_capture_hw_params(snd_pcm_substream_t *substream,
 			    snd_pcm_hw_params_t *params)
 {
-	unsigned long flags;
-	rme96_t *rme96 = _snd_pcm_substream_chip(substream);
+	rme96_t *rme96 = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
 	int err, isadat, rate;
 	
-	if ((err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(params))) < 0)
-		return err;
-	spin_lock_irqsave(&rme96->lock, flags);
+	runtime->dma_area = (void *)(rme96->iobase + RME96_IO_REC_BUFFER);
+	runtime->dma_addr = rme96->port + RME96_IO_REC_BUFFER;
+	runtime->dma_bytes = RME96_BUFFER_SIZE;
+
+	spin_lock_irq(&rme96->lock);
 	if ((err = snd_rme96_capture_setformat(rme96, params_format(params))) < 0) {
-		spin_unlock_irqrestore(&rme96->lock, flags);
+		spin_unlock_irq(&rme96->lock);
 		return err;
 	}
 	if (snd_rme96_getinputtype(rme96) == RME96_INPUT_ANALOG) {
 		if ((err = snd_rme96_capture_analog_setrate(rme96,
 							    params_rate(params))) < 0)
 		{
-			spin_unlock_irqrestore(&rme96->lock, flags);
+			spin_unlock_irq(&rme96->lock);
 			return err;
 		}
 	} else if ((rate = snd_rme96_capture_getrate(rme96, &isadat)) > 0) {
                 if ((int)params_rate(params) != rate) {
-			spin_unlock_irqrestore(&rme96->lock, flags);
+			spin_unlock_irq(&rme96->lock);
 			return -EIO;                    
                 }
                 if ((isadat && runtime->hw.channels_min == 2) ||
                     (!isadat && runtime->hw.channels_min == 8))
                 {
-			spin_unlock_irqrestore(&rme96->lock, flags);
+			spin_unlock_irq(&rme96->lock);
 			return -EIO;
                 }
         }
@@ -1084,33 +1075,24 @@
 		if (params_period_size(params) << rme96->capture_frlog !=
 		    rme96->playback_periodsize)
 		{
-			spin_unlock_irqrestore(&rme96->lock, flags);
+			spin_unlock_irq(&rme96->lock);
 			return -EBUSY;
 		}
 	}
 	rme96->capture_periodsize =
 		params_period_size(params) << rme96->capture_frlog;
 	snd_rme96_set_period_properties(rme96, rme96->capture_periodsize);
-	spin_unlock_irqrestore(&rme96->lock, flags);
+	spin_unlock_irq(&rme96->lock);
 
 	return 0;
 }
 
-static int
-snd_rme96_capture_hw_free(snd_pcm_substream_t *substream)
-{
-	snd_pcm_lib_free_pages(substream);
-	return 0;
-}
-
 static void
 snd_rme96_playback_start(rme96_t *rme96,
 			 int from_pause)
 {
 	if (!from_pause) {
 		writel(0, rme96->iobase + RME96_IO_RESET_PLAY_POS);
-		rme96->playback_last_appl_ptr = 0;
-		rme96->playback_ptr = 0;
 	}
 
 	rme96->wcreg |= RME96_WCR_START;
@@ -1123,7 +1105,6 @@
 {
 	if (!from_pause) {
 		writel(0, rme96->iobase + RME96_IO_RESET_REC_POS);
-		rme96->capture_ptr = 0;
 	}
 
 	rme96->wcreg |= RME96_WCR_START_2;
@@ -1186,10 +1167,8 @@
 
 static unsigned int period_bytes[] = { RME96_SMALL_BLOCK_SIZE, RME96_LARGE_BLOCK_SIZE };
 
-#define PERIOD_BYTES sizeof(period_bytes) / sizeof(period_bytes[0])
-
 static snd_pcm_hw_constraint_list_t hw_constraints_period_bytes = {
-	.count = PERIOD_BYTES,
+	.count = ARRAY_SIZE(period_bytes),
 	.list = period_bytes,
 	.mask = 0
 };
@@ -1197,24 +1176,21 @@
 static int
 snd_rme96_playback_spdif_open(snd_pcm_substream_t *substream)
 {
-	unsigned long flags;
         int rate, dummy;
-	rme96_t *rme96 = _snd_pcm_substream_chip(substream);
+	rme96_t *rme96 = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
 
 	snd_pcm_set_sync(substream);
 
-	spin_lock_irqsave(&rme96->lock, flags);	
+	spin_lock_irq(&rme96->lock);	
         if (rme96->playback_substream != NULL) {
-	        spin_unlock_irqrestore(&rme96->lock, flags);
+		spin_unlock_irq(&rme96->lock);
                 return -EBUSY;
         }
 	rme96->wcreg &= ~RME96_WCR_ADAT;
 	writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
 	rme96->playback_substream = substream;
-	rme96->playback_last_appl_ptr = 0;
-	rme96->playback_ptr = 0;
-	spin_unlock_irqrestore(&rme96->lock, flags);
+	spin_unlock_irq(&rme96->lock);
 
 	runtime->hw = snd_rme96_playback_spdif_info;
 	if (!(rme96->wcreg & RME96_WCR_MASTER) &&
@@ -1239,9 +1215,8 @@
 static int
 snd_rme96_capture_spdif_open(snd_pcm_substream_t *substream)
 {
-	unsigned long flags;
         int isadat, rate;
-	rme96_t *rme96 = _snd_pcm_substream_chip(substream);
+	rme96_t *rme96 = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
 
 	snd_pcm_set_sync(substream);
@@ -1258,14 +1233,13 @@
                 runtime->hw.rate_max = rate;
         }
         
-	spin_lock_irqsave(&rme96->lock, flags);
+	spin_lock_irq(&rme96->lock);
         if (rme96->capture_substream != NULL) {
-	        spin_unlock_irqrestore(&rme96->lock, flags);
+		spin_unlock_irq(&rme96->lock);
                 return -EBUSY;
         }
 	rme96->capture_substream = substream;
-	rme96->capture_ptr = 0;
-	spin_unlock_irqrestore(&rme96->lock, flags);
+	spin_unlock_irq(&rme96->lock);
 	
 	snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_BUFFER_BYTES, RME96_BUFFER_SIZE, RME96_BUFFER_SIZE);
 	snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES, &hw_constraints_period_bytes);
@@ -1276,24 +1250,21 @@
 static int
 snd_rme96_playback_adat_open(snd_pcm_substream_t *substream)
 {
-	unsigned long flags;
         int rate, dummy;
-	rme96_t *rme96 = _snd_pcm_substream_chip(substream);
+	rme96_t *rme96 = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;        
 	
 	snd_pcm_set_sync(substream);
 
-	spin_lock_irqsave(&rme96->lock, flags);	
+	spin_lock_irq(&rme96->lock);	
         if (rme96->playback_substream != NULL) {
-	        spin_unlock_irqrestore(&rme96->lock, flags);
+		spin_unlock_irq(&rme96->lock);
                 return -EBUSY;
         }
 	rme96->wcreg |= RME96_WCR_ADAT;
 	writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
 	rme96->playback_substream = substream;
-	rme96->playback_last_appl_ptr = 0;
-	rme96->playback_ptr = 0;
-	spin_unlock_irqrestore(&rme96->lock, flags);
+	spin_unlock_irq(&rme96->lock);
 	
 	runtime->hw = snd_rme96_playback_adat_info;
 	if (!(rme96->wcreg & RME96_WCR_MASTER) &&
@@ -1313,9 +1284,8 @@
 static int
 snd_rme96_capture_adat_open(snd_pcm_substream_t *substream)
 {
-	unsigned long flags;
         int isadat, rate;
-	rme96_t *rme96 = _snd_pcm_substream_chip(substream);
+	rme96_t *rme96 = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
 
 	snd_pcm_set_sync(substream);
@@ -1335,14 +1305,13 @@
                 runtime->hw.rate_max = rate;
         }
         
-	spin_lock_irqsave(&rme96->lock, flags);	
+	spin_lock_irq(&rme96->lock);	
         if (rme96->capture_substream != NULL) {
-	        spin_unlock_irqrestore(&rme96->lock, flags);
+		spin_unlock_irq(&rme96->lock);
                 return -EBUSY;
         }
 	rme96->capture_substream = substream;
-	rme96->capture_ptr = 0;
-	spin_unlock_irqrestore(&rme96->lock, flags);
+	spin_unlock_irq(&rme96->lock);
 
 	snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_BUFFER_BYTES, RME96_BUFFER_SIZE, RME96_BUFFER_SIZE);
 	snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES, &hw_constraints_period_bytes);
@@ -1352,18 +1321,17 @@
 static int
 snd_rme96_playback_close(snd_pcm_substream_t *substream)
 {
-	unsigned long flags;
-	rme96_t *rme96 = _snd_pcm_substream_chip(substream);
+	rme96_t *rme96 = snd_pcm_substream_chip(substream);
 	int spdif = 0;
 
-	spin_lock_irqsave(&rme96->lock, flags);	
+	spin_lock_irq(&rme96->lock);	
 	if (RME96_ISPLAYING(rme96)) {
 		snd_rme96_playback_stop(rme96);
 	}
 	rme96->playback_substream = NULL;
 	rme96->playback_periodsize = 0;
 	spdif = (rme96->wcreg & RME96_WCR_ADAT) == 0;
-	spin_unlock_irqrestore(&rme96->lock, flags);
+	spin_unlock_irq(&rme96->lock);
 	if (spdif) {
 		rme96->spdif_ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE;
 		snd_ctl_notify(rme96->card, SNDRV_CTL_EVENT_MASK_VALUE |
@@ -1375,46 +1343,43 @@
 static int
 snd_rme96_capture_close(snd_pcm_substream_t *substream)
 {
-	unsigned long flags;
-	rme96_t *rme96 = _snd_pcm_substream_chip(substream);
+	rme96_t *rme96 = snd_pcm_substream_chip(substream);
 	
-	spin_lock_irqsave(&rme96->lock, flags);	
+	spin_lock_irq(&rme96->lock);	
 	if (RME96_ISRECORDING(rme96)) {
 		snd_rme96_capture_stop(rme96);
 	}
 	rme96->capture_substream = NULL;
 	rme96->capture_periodsize = 0;
-	spin_unlock_irqrestore(&rme96->lock, flags);
+	spin_unlock_irq(&rme96->lock);
 	return 0;
 }
 
 static int
 snd_rme96_playback_prepare(snd_pcm_substream_t *substream)
 {
-	rme96_t *rme96 = _snd_pcm_substream_chip(substream);
-	unsigned long flags;
+	rme96_t *rme96 = snd_pcm_substream_chip(substream);
 	
-	spin_lock_irqsave(&rme96->lock, flags);	
+	spin_lock_irq(&rme96->lock);	
 	if (RME96_ISPLAYING(rme96)) {
 		snd_rme96_playback_stop(rme96);
 	}
 	writel(0, rme96->iobase + RME96_IO_RESET_PLAY_POS);
-	spin_unlock_irqrestore(&rme96->lock, flags);
+	spin_unlock_irq(&rme96->lock);
 	return 0;
 }
 
 static int
 snd_rme96_capture_prepare(snd_pcm_substream_t *substream)
 {
-	rme96_t *rme96 = _snd_pcm_substream_chip(substream);
-	unsigned long flags;
+	rme96_t *rme96 = snd_pcm_substream_chip(substream);
 	
-	spin_lock_irqsave(&rme96->lock, flags);	
+	spin_lock_irq(&rme96->lock);	
 	if (RME96_ISRECORDING(rme96)) {
 		snd_rme96_capture_stop(rme96);
 	}
 	writel(0, rme96->iobase + RME96_IO_RESET_REC_POS);
-	spin_unlock_irqrestore(&rme96->lock, flags);
+	spin_unlock_irq(&rme96->lock);
 	return 0;
 }
 
@@ -1422,7 +1387,7 @@
 snd_rme96_playback_trigger(snd_pcm_substream_t *substream, 
 			   int cmd)
 {
-	rme96_t *rme96 = _snd_pcm_substream_chip(substream);
+	rme96_t *rme96 = snd_pcm_substream_chip(substream);
 
 	switch (cmd) {
 	case SNDRV_PCM_TRIGGER_START:
@@ -1465,7 +1430,7 @@
 snd_rme96_capture_trigger(snd_pcm_substream_t *substream, 
 			  int cmd)
 {
-	rme96_t *rme96 = _snd_pcm_substream_chip(substream);
+	rme96_t *rme96 = snd_pcm_substream_chip(substream);
 
 	switch (cmd) {
 	case SNDRV_PCM_TRIGGER_START:
@@ -1508,75 +1473,15 @@
 static snd_pcm_uframes_t
 snd_rme96_playback_pointer(snd_pcm_substream_t *substream)
 {
-	rme96_t *rme96 = _snd_pcm_substream_chip(substream);
-	snd_pcm_runtime_t *runtime = substream->runtime;
-	snd_pcm_sframes_t diff;
-	size_t bytes;
-	
-	if (runtime->access == SNDRV_PCM_ACCESS_MMAP_INTERLEAVED) {
-		diff = runtime->control->appl_ptr -
-		    rme96->playback_last_appl_ptr;
- 	        rme96->playback_last_appl_ptr = runtime->control->appl_ptr;
-	        if (diff != 0 &&
-		    diff < -(snd_pcm_sframes_t)(runtime->boundary >> 1))
-		{
-		        diff += runtime->boundary;
-		}
-		bytes = diff << rme96->playback_frlog;
-		
-		if (bytes > RME96_BUFFER_SIZE - rme96->playback_ptr) {
-			memcpy_toio((void *)(rme96->iobase + RME96_IO_PLAY_BUFFER +
-					     rme96->playback_ptr),
-				    runtime->dma_area + rme96->playback_ptr,
-				    RME96_BUFFER_SIZE - rme96->playback_ptr);
-		        bytes -= RME96_BUFFER_SIZE - rme96->playback_ptr;
-			if (bytes > RME96_BUFFER_SIZE) {
-			        bytes = RME96_BUFFER_SIZE;
-			}
-			memcpy_toio((void *)(rme96->iobase + RME96_IO_PLAY_BUFFER),
-				    runtime->dma_area,
-				    bytes);
-			rme96->playback_ptr = bytes;
-		} else if (bytes != 0) {
-			memcpy_toio((void *)(rme96->iobase + RME96_IO_PLAY_BUFFER +
-					     rme96->playback_ptr),
-				    runtime->dma_area + rme96->playback_ptr,
-				    bytes);
-			rme96->playback_ptr += bytes;
-		}
-	}
+	rme96_t *rme96 = snd_pcm_substream_chip(substream);
 	return snd_rme96_playback_ptr(rme96);
 }
 
 static snd_pcm_uframes_t
 snd_rme96_capture_pointer(snd_pcm_substream_t *substream)
 {
-	rme96_t *rme96 = _snd_pcm_substream_chip(substream);
-	snd_pcm_runtime_t *runtime = substream->runtime;
-	snd_pcm_uframes_t frameptr;
-	size_t ptr;
-
-	frameptr = snd_rme96_capture_ptr(rme96);
-	if (runtime->access == SNDRV_PCM_ACCESS_MMAP_INTERLEAVED) {
-		ptr = frameptr << rme96->capture_frlog;
-		if (ptr > rme96->capture_ptr) {
-			memcpy_fromio(runtime->dma_area + rme96->capture_ptr,
-				      (void *)(rme96->iobase + RME96_IO_REC_BUFFER +
-					       rme96->capture_ptr),
-				      ptr - rme96->capture_ptr);
-			rme96->capture_ptr += ptr - rme96->capture_ptr;
-		} else if (ptr < rme96->capture_ptr) {
-			memcpy_fromio(runtime->dma_area + rme96->capture_ptr,
-				      (void *)(rme96->iobase + RME96_IO_REC_BUFFER +
-					       rme96->capture_ptr),
-				      RME96_BUFFER_SIZE - rme96->capture_ptr);
-			memcpy_fromio(runtime->dma_area,
-				      (void *)(rme96->iobase + RME96_IO_REC_BUFFER),
-				      ptr);
-			rme96->capture_ptr = ptr;
-		}
-	}
-	return frameptr;
+	rme96_t *rme96 = snd_pcm_substream_chip(substream);
+	return snd_rme96_capture_ptr(rme96);
 }
 
 static snd_pcm_ops_t snd_rme96_playback_spdif_ops = {
@@ -1584,7 +1489,6 @@
 	.close =	snd_rme96_playback_close,
 	.ioctl =	snd_pcm_lib_ioctl,
 	.hw_params =	snd_rme96_playback_hw_params,
-	.hw_free =	snd_rme96_playback_hw_free,
 	.prepare =	snd_rme96_playback_prepare,
 	.trigger =	snd_rme96_playback_trigger,
 	.pointer =	snd_rme96_playback_pointer,
@@ -1597,7 +1501,6 @@
 	.close =	snd_rme96_capture_close,
 	.ioctl =	snd_pcm_lib_ioctl,
 	.hw_params =	snd_rme96_capture_hw_params,
-	.hw_free =	snd_rme96_capture_hw_free,
 	.prepare =	snd_rme96_capture_prepare,
 	.trigger =	snd_rme96_capture_trigger,
 	.pointer =	snd_rme96_capture_pointer,
@@ -1609,7 +1512,6 @@
 	.close =	snd_rme96_playback_close,
 	.ioctl =	snd_pcm_lib_ioctl,
 	.hw_params =	snd_rme96_playback_hw_params,
-	.hw_free =	snd_rme96_playback_hw_free,
 	.prepare =	snd_rme96_playback_prepare,
 	.trigger =	snd_rme96_playback_trigger,
 	.pointer =	snd_rme96_playback_pointer,
@@ -1622,7 +1524,6 @@
 	.close =	snd_rme96_capture_close,
 	.ioctl =	snd_pcm_lib_ioctl,
 	.hw_params =	snd_rme96_capture_hw_params,
-	.hw_free =	snd_rme96_capture_hw_free,
 	.prepare =	snd_rme96_capture_prepare,
 	.trigger =	snd_rme96_capture_trigger,
 	.pointer =	snd_rme96_capture_pointer,
@@ -1649,10 +1550,9 @@
 		iounmap((void *)rme96->iobase);
 		rme96->iobase = 0;
 	}
-	if (rme96->res_port != NULL) {
-		release_resource(rme96->res_port);
-		kfree_nocheck(rme96->res_port);
-		rme96->res_port = NULL;
+	if (rme96->port) {
+		pci_release_regions(rme96->pci);
+		rme96->port = 0;
 	}
 }
 
@@ -1661,7 +1561,6 @@
 {
 	rme96_t *rme96 = (rme96_t *) pcm->private_data;
 	rme96->spdif_pcm = NULL;
-	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
 
 static void
@@ -1669,7 +1568,6 @@
 {
 	rme96_t *rme96 = (rme96_t *) pcm->private_data;
 	rme96->adat_pcm = NULL;
-	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
 
 static int __devinit
@@ -1679,24 +1577,21 @@
 	int err;
 
 	rme96->irq = -1;
+	spin_lock_init(&rme96->lock);
 
 	if ((err = pci_enable_device(pci)) < 0)
 		return err;
 
+	if ((err = pci_request_regions(pci, "RME96")) < 0)
+		return err;
 	rme96->port = pci_resource_start(rme96->pci, 0);
 
-	if ((rme96->res_port = request_mem_region(rme96->port, RME96_IO_SIZE, "RME96")) == NULL) {
-		snd_printk("unable to grab memory region 0x%lx-0x%lx\n", rme96->port, rme96->port + RME96_IO_SIZE - 1);
-		return -EBUSY;
-	}
-
 	if (request_irq(pci->irq, snd_rme96_interrupt, SA_INTERRUPT|SA_SHIRQ, "RME96", (void *)rme96)) {
 		snd_printk("unable to grab IRQ %d\n", pci->irq);
 		return -EBUSY;
 	}
 	rme96->irq = pci->irq;
 
-	spin_lock_init(&rme96->lock);
 	if ((rme96->iobase = (unsigned long) 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;
@@ -1719,12 +1614,6 @@
 
 	rme96->spdif_pcm->info_flags = 0;
 
-	snd_pcm_lib_preallocate_pages_for_all(rme96->spdif_pcm,
-					      SNDRV_DMA_TYPE_CONTINUOUS,
-					      snd_dma_continuous_data(GFP_KERNEL),
-					      RME96_BUFFER_SIZE,
-					      RME96_BUFFER_SIZE);
-
 	/* set up ALSA pcm device for ADAT */
 	if (pci->device == PCI_DEVICE_ID_DIGI96) {
 		/* ADAT is not available on the base model */
@@ -1742,12 +1631,6 @@
 		snd_pcm_set_ops(rme96->adat_pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_rme96_capture_adat_ops);
 		
 		rme96->adat_pcm->info_flags = 0;
-
-		snd_pcm_lib_preallocate_pages_for_all(rme96->adat_pcm,
-						      SNDRV_DMA_TYPE_CONTINUOUS,
-						      snd_dma_continuous_data(GFP_KERNEL),
-						      RME96_BUFFER_SIZE,
-						      RME96_BUFFER_SIZE);
 	}
 
 	rme96->playback_periodsize = 0;
@@ -1958,28 +1841,26 @@
 static int
 snd_rme96_get_loopback_control(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme96_t *rme96 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme96_t *rme96 = snd_kcontrol_chip(kcontrol);
 	
-	spin_lock_irqsave(&rme96->lock, flags);
+	spin_lock_irq(&rme96->lock);
 	ucontrol->value.integer.value[0] = rme96->wcreg & RME96_WCR_SEL ? 0 : 1;
-	spin_unlock_irqrestore(&rme96->lock, flags);
+	spin_unlock_irq(&rme96->lock);
 	return 0;
 }
 static int
 snd_rme96_put_loopback_control(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme96_t *rme96 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme96_t *rme96 = snd_kcontrol_chip(kcontrol);
 	unsigned int val;
 	int change;
 	
 	val = ucontrol->value.integer.value[0] ? 0 : RME96_WCR_SEL;
-	spin_lock_irqsave(&rme96->lock, flags);
+	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);
-	spin_unlock_irqrestore(&rme96->lock, flags);
+	spin_unlock_irq(&rme96->lock);
 	return change;
 }
 
@@ -1987,7 +1868,7 @@
 snd_rme96_info_inputtype_control(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo)
 {
 	static char *_texts[5] = { "Optical", "Coaxial", "Internal", "XLR", "Analog" };
-	rme96_t *rme96 = _snd_kcontrol_chip(kcontrol);
+	rme96_t *rme96 = snd_kcontrol_chip(kcontrol);
 	char *texts[5] = { _texts[0], _texts[1], _texts[2], _texts[3], _texts[4] };
 	
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
@@ -2023,11 +1904,10 @@
 static int
 snd_rme96_get_inputtype_control(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme96_t *rme96 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme96_t *rme96 = snd_kcontrol_chip(kcontrol);
 	unsigned int items = 3;
 	
-	spin_lock_irqsave(&rme96->lock, flags);
+	spin_lock_irq(&rme96->lock);
 	ucontrol->value.enumerated.item[0] = snd_rme96_getinputtype(rme96);
 	
 	switch (rme96->pci->device) {
@@ -2057,14 +1937,13 @@
 		ucontrol->value.enumerated.item[0] = items - 1;
 	}
 	
-	spin_unlock_irqrestore(&rme96->lock, flags);
+	spin_unlock_irq(&rme96->lock);
 	return 0;
 }
 static int
 snd_rme96_put_inputtype_control(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme96_t *rme96 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme96_t *rme96 = snd_kcontrol_chip(kcontrol);
 	unsigned int val;
 	int change, items = 3;
 	
@@ -2096,10 +1975,10 @@
 		}
 	}
 	
-	spin_lock_irqsave(&rme96->lock, flags);
+	spin_lock_irq(&rme96->lock);
 	change = (int)val != snd_rme96_getinputtype(rme96);
 	snd_rme96_setinputtype(rme96, val);
-	spin_unlock_irqrestore(&rme96->lock, flags);
+	spin_unlock_irq(&rme96->lock);
 	return change;
 }
 
@@ -2120,27 +1999,25 @@
 static int
 snd_rme96_get_clockmode_control(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme96_t *rme96 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme96_t *rme96 = snd_kcontrol_chip(kcontrol);
 	
-	spin_lock_irqsave(&rme96->lock, flags);
+	spin_lock_irq(&rme96->lock);
 	ucontrol->value.enumerated.item[0] = snd_rme96_getclockmode(rme96);
-	spin_unlock_irqrestore(&rme96->lock, flags);
+	spin_unlock_irq(&rme96->lock);
 	return 0;
 }
 static int
 snd_rme96_put_clockmode_control(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme96_t *rme96 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme96_t *rme96 = snd_kcontrol_chip(kcontrol);
 	unsigned int val;
 	int change;
 	
 	val = ucontrol->value.enumerated.item[0] % 3;
-	spin_lock_irqsave(&rme96->lock, flags);
+	spin_lock_irq(&rme96->lock);
 	change = (int)val != snd_rme96_getclockmode(rme96);
 	snd_rme96_setclockmode(rme96, val);
-	spin_unlock_irqrestore(&rme96->lock, flags);
+	spin_unlock_irq(&rme96->lock);
 	return change;
 }
 
@@ -2161,28 +2038,26 @@
 static int
 snd_rme96_get_attenuation_control(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme96_t *rme96 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme96_t *rme96 = snd_kcontrol_chip(kcontrol);
 	
-	spin_lock_irqsave(&rme96->lock, flags);
+	spin_lock_irq(&rme96->lock);
 	ucontrol->value.enumerated.item[0] = snd_rme96_getattenuation(rme96);
-	spin_unlock_irqrestore(&rme96->lock, flags);
+	spin_unlock_irq(&rme96->lock);
 	return 0;
 }
 static int
 snd_rme96_put_attenuation_control(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme96_t *rme96 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme96_t *rme96 = snd_kcontrol_chip(kcontrol);
 	unsigned int val;
 	int change;
 	
 	val = ucontrol->value.enumerated.item[0] % 4;
-	spin_lock_irqsave(&rme96->lock, flags);
+	spin_lock_irq(&rme96->lock);
 
 	change = (int)val != snd_rme96_getattenuation(rme96);
 	snd_rme96_setattenuation(rme96, val);
-	spin_unlock_irqrestore(&rme96->lock, flags);
+	spin_unlock_irq(&rme96->lock);
 	return change;
 }
 
@@ -2203,27 +2078,25 @@
 static int
 snd_rme96_get_montracks_control(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme96_t *rme96 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme96_t *rme96 = snd_kcontrol_chip(kcontrol);
 	
-	spin_lock_irqsave(&rme96->lock, flags);
+	spin_lock_irq(&rme96->lock);
 	ucontrol->value.enumerated.item[0] = snd_rme96_getmontracks(rme96);
-	spin_unlock_irqrestore(&rme96->lock, flags);
+	spin_unlock_irq(&rme96->lock);
 	return 0;
 }
 static int
 snd_rme96_put_montracks_control(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme96_t *rme96 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme96_t *rme96 = snd_kcontrol_chip(kcontrol);
 	unsigned int val;
 	int change;
 	
 	val = ucontrol->value.enumerated.item[0] % 4;
-	spin_lock_irqsave(&rme96->lock, flags);
+	spin_lock_irq(&rme96->lock);
 	change = (int)val != snd_rme96_getmontracks(rme96);
 	snd_rme96_setmontracks(rme96, val);
-	spin_unlock_irqrestore(&rme96->lock, flags);
+	spin_unlock_irq(&rme96->lock);
 	return change;
 }
 
@@ -2258,7 +2131,7 @@
 
 static int snd_rme96_control_spdif_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme96_t *rme96 = _snd_kcontrol_chip(kcontrol);
+	rme96_t *rme96 = snd_kcontrol_chip(kcontrol);
 	
 	snd_rme96_convert_to_aes(&ucontrol->value.iec958, rme96->wcreg_spdif);
 	return 0;
@@ -2266,16 +2139,15 @@
 
 static int snd_rme96_control_spdif_put(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme96_t *rme96 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme96_t *rme96 = snd_kcontrol_chip(kcontrol);
 	int change;
 	u32 val;
 	
 	val = snd_rme96_convert_from_aes(&ucontrol->value.iec958);
-	spin_lock_irqsave(&rme96->lock, flags);
+	spin_lock_irq(&rme96->lock);
 	change = val != rme96->wcreg_spdif;
 	rme96->wcreg_spdif = val;
-	spin_unlock_irqrestore(&rme96->lock, flags);
+	spin_unlock_irq(&rme96->lock);
 	return change;
 }
 
@@ -2288,7 +2160,7 @@
 
 static int snd_rme96_control_spdif_stream_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme96_t *rme96 = _snd_kcontrol_chip(kcontrol);
+	rme96_t *rme96 = snd_kcontrol_chip(kcontrol);
 	
 	snd_rme96_convert_to_aes(&ucontrol->value.iec958, rme96->wcreg_spdif_stream);
 	return 0;
@@ -2296,18 +2168,17 @@
 
 static int snd_rme96_control_spdif_stream_put(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme96_t *rme96 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme96_t *rme96 = snd_kcontrol_chip(kcontrol);
 	int change;
 	u32 val;
 	
 	val = snd_rme96_convert_from_aes(&ucontrol->value.iec958);
-	spin_lock_irqsave(&rme96->lock, flags);
+	spin_lock_irq(&rme96->lock);
 	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);
-	spin_unlock_irqrestore(&rme96->lock, flags);
+	spin_unlock_irq(&rme96->lock);
 	return change;
 }
 
@@ -2327,7 +2198,7 @@
 static int
 snd_rme96_dac_volume_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo)
 {
-	rme96_t *rme96 = _snd_kcontrol_chip(kcontrol);
+	rme96_t *rme96 = snd_kcontrol_chip(kcontrol);
 	
         uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
         uinfo->count = 2;
@@ -2339,13 +2210,12 @@
 static int
 snd_rme96_dac_volume_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *u)
 {
-	rme96_t *rme96 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme96_t *rme96 = snd_kcontrol_chip(kcontrol);
 
-	spin_lock_irqsave(&rme96->lock, flags);
+	spin_lock_irq(&rme96->lock);
         u->value.integer.value[0] = rme96->vol[0];
         u->value.integer.value[1] = rme96->vol[1];
-	spin_unlock_irqrestore(&rme96->lock, flags);
+	spin_unlock_irq(&rme96->lock);
 
         return 0;
 }
@@ -2353,14 +2223,13 @@
 static int
 snd_rme96_dac_volume_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *u)
 {
-	rme96_t *rme96 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme96_t *rme96 = snd_kcontrol_chip(kcontrol);
         int change = 0;
 
 	if (!RME96_HAS_ANALOG_OUT(rme96)) {
 		return -EINVAL;
 	}
-	spin_lock_irqsave(&rme96->lock, flags);
+	spin_lock_irq(&rme96->lock);
         if (u->value.integer.value[0] != rme96->vol[0]) {
 		rme96->vol[0] = u->value.integer.value[0];
                 change = 1;
@@ -2372,7 +2241,7 @@
 	if (change) {
 		snd_rme96_apply_dac_volume(rme96);
 	}
-	spin_unlock_irqrestore(&rme96->lock, flags);
+	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-08-04 17:48:48 -07:00
+++ b/sound/pci/rme9652/hdsp.c	2004-08-04 17:48:48 -07:00
@@ -52,24 +52,18 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for RME Hammerfall DSP interface.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for RME Hammerfall DSP interface.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable/disable specific Hammerfall DSP soundcards.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(precise_ptr, bool, boot_devs, 0444);
 MODULE_PARM_DESC(precise_ptr, "Enable precise pointer (doesn't work reliably).");
-MODULE_PARM_SYNTAX(precise_ptr, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC);
 module_param_array(line_outs_monitor, bool, boot_devs, 0444);
 MODULE_PARM_DESC(line_outs_monitor, "Send all input and playback streams to line outs by default.");
-MODULE_PARM_SYNTAX(line_outs_monitor, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC);
 MODULE_AUTHOR("Paul Davis <paul@linuxaudiosystems.com>, Marcus Andersson, Thomas Charbonnel <thomas@undata.org>");
 MODULE_DESCRIPTION("RME Hammerfall DSP");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{RME Hammerfall-DSP},"
+MODULE_SUPPORTED_DEVICE("{{RME Hammerfall-DSP},"
 	        "{RME HDSP-9652},"
 		"{RME HDSP-9632}}");
 
@@ -462,12 +456,12 @@
 	unsigned char	      qs_out_channels;	    
 	unsigned char         ds_out_channels;
 	unsigned char         ss_out_channels;
-	void                 *capture_buffer_unaligned;	 /* original buffer addresses */
-	void                 *playback_buffer_unaligned; /* original buffer addresses */
+
+	struct snd_dma_buffer capture_dma_buf;
+	struct snd_dma_buffer playback_dma_buf;
 	unsigned char        *capture_buffer;	    /* suitably aligned address */
 	unsigned char        *playback_buffer;	    /* suitably aligned address */
-	dma_addr_t            capture_buffer_addr;
-	dma_addr_t            playback_buffer_addr;
+
 	pid_t                 capture_pid;
 	pid_t                 playback_pid;
 	int                   running;
@@ -477,7 +471,6 @@
 	int                   dev;
 	int                   irq;
 	unsigned long         port;
-	struct resource      *res_port;
         unsigned long         iobase;
 	snd_card_t           *card;
 	snd_pcm_t            *pcm;
@@ -561,50 +554,24 @@
 	-1, -1
 };
 
-#define HDSP_PREALLOCATE_MEMORY	/* via module snd-hdsp_mem */
-
-#ifdef HDSP_PREALLOCATE_MEMORY
-static void *snd_hammerfall_get_buffer(struct pci_dev *pci, size_t size, dma_addr_t *addrp, int capture)
+static int snd_hammerfall_get_buffer(struct pci_dev *pci, struct snd_dma_buffer *dmab, size_t size)
 {
-	struct snd_dma_device pdev;
-	struct snd_dma_buffer dmbuf;
-
-	memset(&pdev, 0, sizeof(pdev));
-	pdev.type = SNDRV_DMA_TYPE_DEV;
-	pdev.dev = snd_dma_pci_data(pci);
-	pdev.id = capture;
-	dmbuf.bytes = 0;
-	if (! snd_dma_get_reserved(&pdev, &dmbuf)) {
-		if (snd_dma_alloc_pages(&pdev, size, &dmbuf) < 0)
-			return NULL;
-		snd_dma_set_reserved(&pdev, &dmbuf);
+	dmab->dev.type = SNDRV_DMA_TYPE_DEV;
+	dmab->dev.dev = snd_dma_pci_data(pci);
+	if (! snd_dma_get_reserved_buf(dmab, snd_dma_pci_buf_id(pci))) {
+		if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci),
+					size, dmab) < 0)
+			return -ENOMEM;
 	}
-	*addrp = dmbuf.addr;
-	return dmbuf.area;
+	return 0;
 }
 
-static void snd_hammerfall_free_buffer(struct pci_dev *pci, size_t size, void *ptr, dma_addr_t addr, int capture)
+static void snd_hammerfall_free_buffer(struct snd_dma_buffer *dmab, struct pci_dev *pci)
 {
-	struct snd_dma_device pdev;
-
-	memset(&pdev, 0, sizeof(pdev));
-	pdev.type = SNDRV_DMA_TYPE_DEV;
-	pdev.dev = snd_dma_pci_data(pci);
-	pdev.id = capture;
-	snd_dma_free_reserved(&pdev);
+	if (dmab->area)
+		snd_dma_reserve_buf(dmab, snd_dma_pci_buf_id(pci));
 }
 
-#else
-static void *snd_hammerfall_get_buffer(struct pci_dev *pci, size_t size, dma_addr_t *addrp, int capture)
-{
-	return snd_malloc_pci_pages(pci, size, addrp);
-}
-
-static void snd_hammerfall_free_buffer(struct pci_dev *pci, size_t size, void *ptr, dma_addr_t addr, int capture)
-{
-	snd_free_pci_pages(pci, size, ptr, addr);
-}
-#endif
 
 static struct pci_device_id snd_hdsp_ids[] = {
 	{
@@ -621,15 +588,15 @@
 /* prototypes */
 static int __devinit snd_hdsp_create_alsa_devices(snd_card_t *card, hdsp_t *hdsp);
 static int __devinit snd_hdsp_create_pcm(snd_card_t *card, hdsp_t *hdsp);
-static inline int snd_hdsp_enable_io (hdsp_t *hdsp);
-static inline void snd_hdsp_initialize_midi_flush (hdsp_t *hdsp);
-static inline void snd_hdsp_initialize_channels (hdsp_t *hdsp);
-static inline int hdsp_fifo_wait(hdsp_t *hdsp, int count, int timeout);
+static int snd_hdsp_enable_io (hdsp_t *hdsp);
+static void snd_hdsp_initialize_midi_flush (hdsp_t *hdsp);
+static void snd_hdsp_initialize_channels (hdsp_t *hdsp);
+static int hdsp_fifo_wait(hdsp_t *hdsp, int count, int timeout);
 static int hdsp_autosync_ref(hdsp_t *hdsp);
 static int snd_hdsp_set_defaults(hdsp_t *hdsp);
-static inline void snd_hdsp_9652_enable_mixer (hdsp_t *hdsp);
+static void snd_hdsp_9652_enable_mixer (hdsp_t *hdsp);
 
-static inline int hdsp_playback_to_output_key (hdsp_t *hdsp, int in, int out)
+static int hdsp_playback_to_output_key (hdsp_t *hdsp, int in, int out)
 {
 	switch (hdsp->firmware_rev) {
 	case 0xa:
@@ -642,7 +609,7 @@
 	}
 }
 
-static inline int hdsp_input_to_output_key (hdsp_t *hdsp, int in, int out)
+static int hdsp_input_to_output_key (hdsp_t *hdsp, int in, int out)
 {
 	switch (hdsp->firmware_rev) {
 	case 0xa:
@@ -655,17 +622,17 @@
 	}
 }
 
-static inline void hdsp_write(hdsp_t *hdsp, int reg, int val)
+static void hdsp_write(hdsp_t *hdsp, int reg, int val)
 {
 	writel(val, hdsp->iobase + reg);
 }
 
-static inline unsigned int hdsp_read(hdsp_t *hdsp, int reg)
+static unsigned int hdsp_read(hdsp_t *hdsp, int reg)
 {
 	return readl (hdsp->iobase + reg);
 }
 
-static inline int hdsp_check_for_iobox (hdsp_t *hdsp)
+static int hdsp_check_for_iobox (hdsp_t *hdsp)
 {
 
 	if (hdsp->io_type == H9652 || hdsp->io_type == H9632) return 0;
@@ -738,7 +705,7 @@
 	return 0;
 }
 
-static inline int hdsp_get_iobox_version (hdsp_t *hdsp)
+static int hdsp_get_iobox_version (hdsp_t *hdsp)
 {
 	int err;
 	
@@ -781,7 +748,7 @@
 }
 
 
-static inline int hdsp_check_for_firmware (hdsp_t *hdsp)
+static int hdsp_check_for_firmware (hdsp_t *hdsp)
 {
 	if (hdsp->io_type == H9652 || hdsp->io_type == H9632) return 0;
 	if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) {
@@ -793,7 +760,7 @@
 }
 
 
-static inline int hdsp_fifo_wait(hdsp_t *hdsp, int count, int timeout)
+static int hdsp_fifo_wait(hdsp_t *hdsp, int count, int timeout)
 {    
 	int i;
 
@@ -818,7 +785,7 @@
 	return -1;
 }
 
-static inline int hdsp_read_gain (hdsp_t *hdsp, unsigned int addr)
+static int hdsp_read_gain (hdsp_t *hdsp, unsigned int addr)
 {
 	if (addr >= HDSP_MATRIX_MIXER_SIZE) {
 		return 0;
@@ -826,7 +793,7 @@
 	return hdsp->mixer_matrix[addr];
 }
 
-static inline int hdsp_write_gain(hdsp_t *hdsp, unsigned int addr, unsigned short data)
+static int hdsp_write_gain(hdsp_t *hdsp, unsigned int addr, unsigned short data)
 {
 	unsigned int ad;
 
@@ -835,7 +802,7 @@
 	
 	if (hdsp->io_type == H9652 || hdsp->io_type == H9632) {
 
-		/* from martin bj�rnsen:
+		/* from martin björnsen:
 		   
 		   "You can only write dwords to the
 		   mixer memory which contain two
@@ -889,7 +856,7 @@
 	return 0;
 }
 
-static inline int snd_hdsp_use_is_exclusive(hdsp_t *hdsp)
+static int snd_hdsp_use_is_exclusive(hdsp_t *hdsp)
 {
 	unsigned long flags;
 	int ret = 1;
@@ -903,7 +870,7 @@
 	return ret;
 }
 
-static inline int hdsp_external_sample_rate (hdsp_t *hdsp)
+static int hdsp_external_sample_rate (hdsp_t *hdsp)
 {
 	unsigned int status2 = hdsp_read(hdsp, HDSP_status2Register);
 	unsigned int rate_bits = status2 & HDSP_systemFrequencyMask;
@@ -920,7 +887,7 @@
 	}
 }
 
-static inline int hdsp_spdif_sample_rate(hdsp_t *hdsp)
+static int hdsp_spdif_sample_rate(hdsp_t *hdsp)
 {
 	unsigned int status = hdsp_read(hdsp, HDSP_statusRegister);
 	unsigned int rate_bits = (status & HDSP_spdifFrequencyMask);
@@ -952,7 +919,7 @@
 	return 0;
 }
 
-static inline void hdsp_compute_period_size(hdsp_t *hdsp)
+static void hdsp_compute_period_size(hdsp_t *hdsp)
 {
 	hdsp->period_bytes = 1 << ((hdsp_decode_latency(hdsp->control_register) + 8));
 }
@@ -974,24 +941,24 @@
 	return position;
 }
 
-static inline void hdsp_reset_hw_pointer(hdsp_t *hdsp)
+static void hdsp_reset_hw_pointer(hdsp_t *hdsp)
 {
 	hdsp_write (hdsp, HDSP_resetPointer, 0);
 }
 
-static inline void hdsp_start_audio(hdsp_t *s)
+static void hdsp_start_audio(hdsp_t *s)
 {
 	s->control_register |= (HDSP_AudioInterruptEnable | HDSP_Start);
 	hdsp_write(s, HDSP_controlRegister, s->control_register);
 }
 
-static inline void hdsp_stop_audio(hdsp_t *s)
+static void hdsp_stop_audio(hdsp_t *s)
 {
 	s->control_register &= ~(HDSP_Start | HDSP_AudioInterruptEnable);
 	hdsp_write(s, HDSP_controlRegister, s->control_register);
 }
 
-static inline void hdsp_silence_playback(hdsp_t *hdsp)
+static void hdsp_silence_playback(hdsp_t *hdsp)
 {
 	memset(hdsp->playback_buffer, 0, HDSP_DMA_AREA_BYTES);
 }
@@ -1236,7 +1203,7 @@
    MIDI
   ----------------------------------------------------------------------------*/
 
-static inline unsigned char snd_hdsp_midi_read_byte (hdsp_t *hdsp, int id)
+static unsigned char snd_hdsp_midi_read_byte (hdsp_t *hdsp, int id)
 {
 	/* the hardware already does the relevant bit-mask with 0xff */
 	if (id) {
@@ -1246,7 +1213,7 @@
 	}
 }
 
-static inline void snd_hdsp_midi_write_byte (hdsp_t *hdsp, int id, int val)
+static void snd_hdsp_midi_write_byte (hdsp_t *hdsp, int id, int val)
 {
 	/* the hardware already does the relevant bit-mask with 0xff */
 	if (id) {
@@ -1256,7 +1223,7 @@
 	}
 }
 
-static inline int snd_hdsp_midi_input_available (hdsp_t *hdsp, int id)
+static int snd_hdsp_midi_input_available (hdsp_t *hdsp, int id)
 {
 	if (id) {
 		return (hdsp_read(hdsp, HDSP_midiStatusIn1) & 0xff);
@@ -1265,7 +1232,7 @@
 	}
 }
 
-static inline int snd_hdsp_midi_output_possible (hdsp_t *hdsp, int id)
+static int snd_hdsp_midi_output_possible (hdsp_t *hdsp, int id)
 {
 	int fifo_bytes_used;
 
@@ -1282,7 +1249,7 @@
 	}
 }
 
-static inline void snd_hdsp_flush_midi_input (hdsp_t *hdsp, int id)
+static void snd_hdsp_flush_midi_input (hdsp_t *hdsp, int id)
 {
 	while (snd_hdsp_midi_input_available (hdsp, id)) {
 		snd_hdsp_midi_read_byte (hdsp, id);
@@ -1429,13 +1396,12 @@
 static int snd_hdsp_midi_input_open(snd_rawmidi_substream_t * substream)
 {
 	hdsp_midi_t *hmidi;
-	unsigned long flags;
 
 	hmidi = (hdsp_midi_t *) substream->rmidi->private_data;
-	spin_lock_irqsave (&hmidi->lock, flags);
+	spin_lock_irq (&hmidi->lock);
 	snd_hdsp_flush_midi_input (hmidi->hdsp, hmidi->id);
 	hmidi->input = substream;
-	spin_unlock_irqrestore (&hmidi->lock, flags);
+	spin_unlock_irq (&hmidi->lock);
 
 	return 0;
 }
@@ -1443,12 +1409,11 @@
 static int snd_hdsp_midi_output_open(snd_rawmidi_substream_t * substream)
 {
 	hdsp_midi_t *hmidi;
-	unsigned long flags;
 
 	hmidi = (hdsp_midi_t *) substream->rmidi->private_data;
-	spin_lock_irqsave (&hmidi->lock, flags);
+	spin_lock_irq (&hmidi->lock);
 	hmidi->output = substream;
-	spin_unlock_irqrestore (&hmidi->lock, flags);
+	spin_unlock_irq (&hmidi->lock);
 
 	return 0;
 }
@@ -1456,14 +1421,13 @@
 static int snd_hdsp_midi_input_close(snd_rawmidi_substream_t * substream)
 {
 	hdsp_midi_t *hmidi;
-	unsigned long flags;
 
 	snd_hdsp_midi_input_trigger (substream, 0);
 
 	hmidi = (hdsp_midi_t *) substream->rmidi->private_data;
-	spin_lock_irqsave (&hmidi->lock, flags);
+	spin_lock_irq (&hmidi->lock);
 	hmidi->input = NULL;
-	spin_unlock_irqrestore (&hmidi->lock, flags);
+	spin_unlock_irq (&hmidi->lock);
 
 	return 0;
 }
@@ -1471,14 +1435,13 @@
 static int snd_hdsp_midi_output_close(snd_rawmidi_substream_t * substream)
 {
 	hdsp_midi_t *hmidi;
-	unsigned long flags;
 
 	snd_hdsp_midi_output_trigger (substream, 0);
 
 	hmidi = (hdsp_midi_t *) substream->rmidi->private_data;
-	spin_lock_irqsave (&hmidi->lock, flags);
+	spin_lock_irq (&hmidi->lock);
 	hmidi->output = NULL;
-	spin_unlock_irqrestore (&hmidi->lock, flags);
+	spin_unlock_irq (&hmidi->lock);
 
 	return 0;
 }
@@ -1563,7 +1526,7 @@
 
 static int snd_hdsp_control_spdif_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	
 	snd_hdsp_convert_to_aes(&ucontrol->value.iec958, hdsp->creg_spdif);
 	return 0;
@@ -1571,16 +1534,15 @@
 
 static int snd_hdsp_control_spdif_put(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	u32 val;
 	
 	val = snd_hdsp_convert_from_aes(&ucontrol->value.iec958);
-	spin_lock_irqsave(&hdsp->lock, flags);
+	spin_lock_irq(&hdsp->lock);
 	change = val != hdsp->creg_spdif;
 	hdsp->creg_spdif = val;
-	spin_unlock_irqrestore(&hdsp->lock, flags);
+	spin_unlock_irq(&hdsp->lock);
 	return change;
 }
 
@@ -1593,7 +1555,7 @@
 
 static int snd_hdsp_control_spdif_stream_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	
 	snd_hdsp_convert_to_aes(&ucontrol->value.iec958, hdsp->creg_spdif_stream);
 	return 0;
@@ -1601,18 +1563,17 @@
 
 static int snd_hdsp_control_spdif_stream_put(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	u32 val;
 	
 	val = snd_hdsp_convert_from_aes(&ucontrol->value.iec958);
-	spin_lock_irqsave(&hdsp->lock, flags);
+	spin_lock_irq(&hdsp->lock);
 	change = val != hdsp->creg_spdif_stream;
 	hdsp->creg_spdif_stream = val;
 	hdsp->control_register &= ~(HDSP_SPDIFProfessional | HDSP_SPDIFNonAudio | HDSP_SPDIFEmphasis);
 	hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register |= val);
-	spin_unlock_irqrestore(&hdsp->lock, flags);
+	spin_unlock_irq(&hdsp->lock);
 	return change;
 }
 
@@ -1653,7 +1614,7 @@
 static int snd_hdsp_info_spdif_in(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo)
 {
 	static char *texts[4] = {"Optical", "Coaxial", "Internal", "AES"};
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
 	uinfo->count = 1;
@@ -1666,7 +1627,7 @@
 
 static int snd_hdsp_get_spdif_in(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	
 	ucontrol->value.enumerated.item[0] = hdsp_spdif_in(hdsp);
 	return 0;
@@ -1674,19 +1635,18 @@
 
 static int snd_hdsp_put_spdif_in(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	unsigned int val;
 	
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 		return -EBUSY;
 	val = ucontrol->value.enumerated.item[0] % ((hdsp->io_type == H9632) ? 4 : 3);
-	spin_lock_irqsave(&hdsp->lock, flags);
+	spin_lock_irq(&hdsp->lock);
 	change = val != hdsp_spdif_in(hdsp);
 	if (change)
 		hdsp_set_spdif_input(hdsp, val);
-	spin_unlock_irqrestore(&hdsp->lock, flags);
+	spin_unlock_irq(&hdsp->lock);
 	return change;
 }
 
@@ -1722,7 +1682,7 @@
 
 static int snd_hdsp_get_spdif_out(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	
 	ucontrol->value.integer.value[0] = hdsp_spdif_out(hdsp);
 	return 0;
@@ -1730,18 +1690,17 @@
 
 static int snd_hdsp_put_spdif_out(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	unsigned int val;
 	
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 		return -EBUSY;
 	val = ucontrol->value.integer.value[0] & 1;
-	spin_lock_irqsave(&hdsp->lock, flags);
+	spin_lock_irq(&hdsp->lock);
 	change = (int)val != hdsp_spdif_out(hdsp);
 	hdsp_set_spdif_output(hdsp, val);
-	spin_unlock_irqrestore(&hdsp->lock, flags);
+	spin_unlock_irq(&hdsp->lock);
 	return change;
 }
 
@@ -1768,7 +1727,7 @@
 
 static int snd_hdsp_get_spdif_professional(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	
 	ucontrol->value.integer.value[0] = hdsp_spdif_professional(hdsp);
 	return 0;
@@ -1776,18 +1735,17 @@
 
 static int snd_hdsp_put_spdif_professional(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	unsigned int val;
 	
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 		return -EBUSY;
 	val = ucontrol->value.integer.value[0] & 1;
-	spin_lock_irqsave(&hdsp->lock, flags);
+	spin_lock_irq(&hdsp->lock);
 	change = (int)val != hdsp_spdif_professional(hdsp);
 	hdsp_set_spdif_professional(hdsp, val);
-	spin_unlock_irqrestore(&hdsp->lock, flags);
+	spin_unlock_irq(&hdsp->lock);
 	return change;
 }
 
@@ -1814,7 +1772,7 @@
 
 static int snd_hdsp_get_spdif_emphasis(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	
 	ucontrol->value.integer.value[0] = hdsp_spdif_emphasis(hdsp);
 	return 0;
@@ -1822,18 +1780,17 @@
 
 static int snd_hdsp_put_spdif_emphasis(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	unsigned int val;
 	
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 		return -EBUSY;
 	val = ucontrol->value.integer.value[0] & 1;
-	spin_lock_irqsave(&hdsp->lock, flags);
+	spin_lock_irq(&hdsp->lock);
 	change = (int)val != hdsp_spdif_emphasis(hdsp);
 	hdsp_set_spdif_emphasis(hdsp, val);
-	spin_unlock_irqrestore(&hdsp->lock, flags);
+	spin_unlock_irq(&hdsp->lock);
 	return change;
 }
 
@@ -1860,7 +1817,7 @@
 
 static int snd_hdsp_get_spdif_nonaudio(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	
 	ucontrol->value.integer.value[0] = hdsp_spdif_nonaudio(hdsp);
 	return 0;
@@ -1868,18 +1825,17 @@
 
 static int snd_hdsp_put_spdif_nonaudio(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	unsigned int val;
 	
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 		return -EBUSY;
 	val = ucontrol->value.integer.value[0] & 1;
-	spin_lock_irqsave(&hdsp->lock, flags);
+	spin_lock_irq(&hdsp->lock);
 	change = (int)val != hdsp_spdif_nonaudio(hdsp);
 	hdsp_set_spdif_nonaudio(hdsp, val);
-	spin_unlock_irqrestore(&hdsp->lock, flags);
+	spin_unlock_irq(&hdsp->lock);
 	return change;
 }
 
@@ -1895,7 +1851,7 @@
 static int snd_hdsp_info_spdif_sample_rate(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo)
 {
 	static char *texts[] = {"32000", "44100", "48000", "64000", "88200", "96000", "None", "128000", "176400", "192000"};
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
 	uinfo->count = 1;
@@ -1908,7 +1864,7 @@
 
 static int snd_hdsp_get_spdif_sample_rate(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	
 	switch (hdsp_spdif_sample_rate(hdsp)) {
 	case 32000:
@@ -1962,7 +1918,7 @@
 
 static int snd_hdsp_get_system_sample_rate(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	
 	ucontrol->value.enumerated.item[0] = hdsp->system_sample_rate;
 	return 0;
@@ -1979,7 +1935,7 @@
 
 static int snd_hdsp_info_autosync_sample_rate(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	static char *texts[] = {"32000", "44100", "48000", "64000", "88200", "96000", "None", "128000", "176400", "192000"};	
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
 	uinfo->count = 1;
@@ -1992,7 +1948,7 @@
 
 static int snd_hdsp_get_autosync_sample_rate(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	
 	switch (hdsp_external_sample_rate(hdsp)) {
 	case 32000:
@@ -2062,7 +2018,7 @@
 
 static int snd_hdsp_get_system_clock_mode(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	
 	ucontrol->value.enumerated.item[0] = hdsp_system_clock_mode(hdsp);
 	return 0;
@@ -2159,7 +2115,7 @@
 static int snd_hdsp_info_clock_source(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo)
 {
 	static char *texts[] = {"AutoSync", "Internal 32.0 kHz", "Internal 44.1 kHz", "Internal 48.0 kHz", "Internal 64.0 kHz", "Internal 88.2 kHz", "Internal 96.0 kHz", "Internal 128 kHz", "Internal 176.4 kHz", "Internal 192.0 KHz" };
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
 	uinfo->count = 1;
@@ -2175,7 +2131,7 @@
 
 static int snd_hdsp_get_clock_source(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	
 	ucontrol->value.enumerated.item[0] = hdsp_clock_source(hdsp);
 	return 0;
@@ -2183,8 +2139,7 @@
 
 static int snd_hdsp_put_clock_source(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	int val;
 	
@@ -2197,13 +2152,13 @@
 	} else {
 	    if (val > 6) val = 6;
 	}
-	spin_lock_irqsave(&hdsp->lock, flags);
+	spin_lock_irq(&hdsp->lock);
 	if (val != hdsp_clock_source(hdsp)) {
 		change = (hdsp_set_clock_source(hdsp, val) == 0) ? 1 : 0;
 	} else {
 		change = 0;
 	}
-	spin_unlock_irqrestore(&hdsp->lock, flags);
+	spin_unlock_irq(&hdsp->lock);
 	return change;
 }
 
@@ -2266,7 +2221,7 @@
 
 static int snd_hdsp_get_da_gain(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	
 	ucontrol->value.enumerated.item[0] = hdsp_da_gain(hdsp);
 	return 0;
@@ -2274,8 +2229,7 @@
 
 static int snd_hdsp_put_da_gain(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	int val;
 	
@@ -2284,13 +2238,13 @@
 	val = ucontrol->value.enumerated.item[0];
 	if (val < 0) val = 0;
 	if (val > 2) val = 2;
-	spin_lock_irqsave(&hdsp->lock, flags);
+	spin_lock_irq(&hdsp->lock);
 	if (val != hdsp_da_gain(hdsp)) {
 		change = (hdsp_set_da_gain(hdsp, val) == 0) ? 1 : 0;
 	} else {
 		change = 0;
 	}
-	spin_unlock_irqrestore(&hdsp->lock, flags);
+	spin_unlock_irq(&hdsp->lock);
 	return change;
 }
 
@@ -2353,7 +2307,7 @@
 
 static int snd_hdsp_get_ad_gain(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	
 	ucontrol->value.enumerated.item[0] = hdsp_ad_gain(hdsp);
 	return 0;
@@ -2361,8 +2315,7 @@
 
 static int snd_hdsp_put_ad_gain(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	int val;
 	
@@ -2371,13 +2324,13 @@
 	val = ucontrol->value.enumerated.item[0];
 	if (val < 0) val = 0;
 	if (val > 2) val = 2;
-	spin_lock_irqsave(&hdsp->lock, flags);
+	spin_lock_irq(&hdsp->lock);
 	if (val != hdsp_ad_gain(hdsp)) {
 		change = (hdsp_set_ad_gain(hdsp, val) == 0) ? 1 : 0;
 	} else {
 		change = 0;
 	}
-	spin_unlock_irqrestore(&hdsp->lock, flags);
+	spin_unlock_irq(&hdsp->lock);
 	return change;
 }
 
@@ -2440,7 +2393,7 @@
 
 static int snd_hdsp_get_phone_gain(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	
 	ucontrol->value.enumerated.item[0] = hdsp_phone_gain(hdsp);
 	return 0;
@@ -2448,8 +2401,7 @@
 
 static int snd_hdsp_put_phone_gain(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	int val;
 	
@@ -2458,13 +2410,13 @@
 	val = ucontrol->value.enumerated.item[0];
 	if (val < 0) val = 0;
 	if (val > 2) val = 2;
-	spin_lock_irqsave(&hdsp->lock, flags);
+	spin_lock_irq(&hdsp->lock);
 	if (val != hdsp_phone_gain(hdsp)) {
 		change = (hdsp_set_phone_gain(hdsp, val) == 0) ? 1 : 0;
 	} else {
 		change = 0;
 	}
-	spin_unlock_irqrestore(&hdsp->lock, flags);
+	spin_unlock_irq(&hdsp->lock);
 	return change;
 }
 
@@ -2507,7 +2459,7 @@
 
 static int snd_hdsp_get_xlr_breakout_cable(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	
 	ucontrol->value.enumerated.item[0] = hdsp_xlr_breakout_cable(hdsp);
 	return 0;
@@ -2515,18 +2467,17 @@
 
 static int snd_hdsp_put_xlr_breakout_cable(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	int val;
 	
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 		return -EBUSY;
 	val = ucontrol->value.integer.value[0] & 1;
-	spin_lock_irqsave(&hdsp->lock, flags);
+	spin_lock_irq(&hdsp->lock);
 	change = (int)val != hdsp_xlr_breakout_cable(hdsp);
 	hdsp_set_xlr_breakout_cable(hdsp, val);
-	spin_unlock_irqrestore(&hdsp->lock, flags);
+	spin_unlock_irq(&hdsp->lock);
 	return change;
 }
 
@@ -2573,7 +2524,7 @@
 
 static int snd_hdsp_get_aeb(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	
 	ucontrol->value.enumerated.item[0] = hdsp_aeb(hdsp);
 	return 0;
@@ -2581,18 +2532,17 @@
 
 static int snd_hdsp_put_aeb(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	int val;
 	
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 		return -EBUSY;
 	val = ucontrol->value.integer.value[0] & 1;
-	spin_lock_irqsave(&hdsp->lock, flags);
+	spin_lock_irq(&hdsp->lock);
 	change = (int)val != hdsp_aeb(hdsp);
 	hdsp_set_aeb(hdsp, val);
-	spin_unlock_irqrestore(&hdsp->lock, flags);
+	spin_unlock_irq(&hdsp->lock);
 	return change;
 }
 
@@ -2662,7 +2612,7 @@
 static int snd_hdsp_info_pref_sync_ref(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo)
 {
 	static char *texts[] = {"Word", "IEC958", "ADAT1", "ADAT Sync", "ADAT2", "ADAT3" };
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
 	uinfo->count = 1;
@@ -2691,7 +2641,7 @@
 
 static int snd_hdsp_get_pref_sync_ref(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	
 	ucontrol->value.enumerated.item[0] = hdsp_pref_sync_ref(hdsp);
 	return 0;
@@ -2699,8 +2649,7 @@
 
 static int snd_hdsp_put_pref_sync_ref(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	int change, max;
 	unsigned int val;
 	
@@ -2723,10 +2672,10 @@
 	}
 
 	val = ucontrol->value.enumerated.item[0] % max;
-	spin_lock_irqsave(&hdsp->lock, flags);
+	spin_lock_irq(&hdsp->lock);
 	change = (int)val != hdsp_pref_sync_ref(hdsp);
 	hdsp_set_pref_sync_ref(hdsp, val);
-	spin_unlock_irqrestore(&hdsp->lock, flags);
+	spin_unlock_irq(&hdsp->lock);
 	return change;
 }
 
@@ -2780,7 +2729,7 @@
 
 static int snd_hdsp_get_autosync_ref(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	
 	ucontrol->value.enumerated.item[0] = hdsp_pref_sync_ref(hdsp);
 	return 0;
@@ -2806,19 +2755,17 @@
 
 static int snd_hdsp_get_passthru(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 
-	spin_lock_irqsave(&hdsp->lock, flags);
+	spin_lock_irq(&hdsp->lock);
 	ucontrol->value.integer.value[0] = hdsp->passthru;
-	spin_unlock_irqrestore(&hdsp->lock, flags);
+	spin_unlock_irq(&hdsp->lock);
 	return 0;
 }
 
 static int snd_hdsp_put_passthru(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	unsigned int val;
 	int err = 0;
@@ -2827,11 +2774,11 @@
 		return -EBUSY;
 
 	val = ucontrol->value.integer.value[0] & 1;
-	spin_lock_irqsave(&hdsp->lock, flags);
+	spin_lock_irq(&hdsp->lock);
 	change = (ucontrol->value.integer.value[0] != hdsp->passthru);
 	if (change)
 		err = hdsp_set_passthru(hdsp, val);
-	spin_unlock_irqrestore(&hdsp->lock, flags);
+	spin_unlock_irq(&hdsp->lock);
 	return err ? err : change;
 }
 
@@ -2871,29 +2818,27 @@
 
 static int snd_hdsp_get_line_out(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	
-	spin_lock_irqsave(&hdsp->lock, flags);
+	spin_lock_irq(&hdsp->lock);
 	ucontrol->value.integer.value[0] = hdsp_line_out(hdsp);
-	spin_unlock_irqrestore(&hdsp->lock, flags);
+	spin_unlock_irq(&hdsp->lock);
 	return 0;
 }
 
 static int snd_hdsp_put_line_out(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	unsigned int val;
 	
 	if (!snd_hdsp_use_is_exclusive(hdsp))
 		return -EBUSY;
 	val = ucontrol->value.integer.value[0] & 1;
-	spin_lock_irqsave(&hdsp->lock, flags);
+	spin_lock_irq(&hdsp->lock);
 	change = (int)val != hdsp_line_out(hdsp);
 	hdsp_set_line_output(hdsp, val);
-	spin_unlock_irqrestore(&hdsp->lock, flags);
+	spin_unlock_irq(&hdsp->lock);
 	return change;
 }
 
@@ -2920,8 +2865,7 @@
 
 static int snd_hdsp_get_mixer(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	int source;
 	int destination;
 	int addr;
@@ -2935,16 +2879,15 @@
 		addr = hdsp_input_to_output_key(hdsp,source, destination);
 	}
 	
-	spin_lock_irqsave(&hdsp->lock, flags);
+	spin_lock_irq(&hdsp->lock);
 	ucontrol->value.integer.value[2] = hdsp_read_gain (hdsp, addr);
-	spin_unlock_irqrestore(&hdsp->lock, flags);
+	spin_unlock_irq(&hdsp->lock);
 	return 0;
 }
 
 static int snd_hdsp_put_mixer(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 	int change;
 	int source;
 	int destination;
@@ -2965,11 +2908,11 @@
 
 	gain = ucontrol->value.integer.value[2];
 
-	spin_lock_irqsave(&hdsp->lock, flags);
+	spin_lock_irq(&hdsp->lock);
 	change = gain != hdsp_read_gain(hdsp, addr);
 	if (change)
 		hdsp_write_gain(hdsp, addr, gain);
-	spin_unlock_irqrestore(&hdsp->lock, flags);
+	spin_unlock_irq(&hdsp->lock);
 	return change;
 }
 
@@ -3011,7 +2954,7 @@
 
 static int snd_hdsp_get_wc_sync_check(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 
 	ucontrol->value.enumerated.item[0] = hdsp_wc_sync_check(hdsp);
 	return 0;
@@ -3043,7 +2986,7 @@
 
 static int snd_hdsp_get_spdif_sync_check(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 
 	ucontrol->value.enumerated.item[0] = hdsp_spdif_sync_check(hdsp);
 	return 0;
@@ -3074,7 +3017,7 @@
 
 static int snd_hdsp_get_adatsync_sync_check(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 
 	ucontrol->value.enumerated.item[0] = hdsp_adatsync_sync_check(hdsp);
 	return 0;
@@ -3105,7 +3048,7 @@
 static int snd_hdsp_get_adat_sync_check(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
 	int offset;
-	hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol);
+	hdsp_t *hdsp = snd_kcontrol_chip(kcontrol);
 
 	offset = ucontrol->id.index - 1;
 	snd_assert(offset >= 0);
@@ -3194,10 +3137,6 @@
 HDSP_LINE_OUT("Line Out", 0),
 };
 
-#define HDSP_CONTROLS (sizeof(snd_hdsp_controls)/sizeof(snd_kcontrol_new_t))
-
-#define HDSP_9632_CONTROLS (sizeof(snd_hdsp_9632_controls)/sizeof(snd_kcontrol_new_t))
-
 static snd_kcontrol_new_t snd_hdsp_96xx_aeb = HDSP_AEB("Analog Extension Board", 0);
 static snd_kcontrol_new_t snd_hdsp_adat_sync_check = HDSP_ADAT_SYNC_CHECK;
 
@@ -3207,7 +3146,7 @@
 	int err;
 	snd_kcontrol_t *kctl;
 
-	for (idx = 0; idx < HDSP_CONTROLS; idx++) {
+	for (idx = 0; idx < ARRAY_SIZE(snd_hdsp_controls); idx++) {
 		if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_hdsp_controls[idx], hdsp))) < 0) {
 			return err;
 		}
@@ -3232,7 +3171,7 @@
 	
 	/* DA, AD and Phone gain and XLR breakout cable controls for H9632 cards */
 	if (hdsp->io_type == H9632) {
-		for (idx = 0; idx < HDSP_9632_CONTROLS; idx++) {
+		for (idx = 0; idx < ARRAY_SIZE(snd_hdsp_9632_controls); idx++) {
 			if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_hdsp_9632_controls[idx], hdsp))) < 0) {
 				return err;
 			}
@@ -3583,59 +3522,34 @@
 
 static void snd_hdsp_free_buffers(hdsp_t *hdsp)
 {
-	if (hdsp->capture_buffer_unaligned) {
-		snd_hammerfall_free_buffer(hdsp->pci, HDSP_DMA_AREA_BYTES,
-					   hdsp->capture_buffer_unaligned,
-					   hdsp->capture_buffer_addr, 1);
-	}
-
-	if (hdsp->playback_buffer_unaligned) {
-		snd_hammerfall_free_buffer(hdsp->pci, HDSP_DMA_AREA_BYTES,
-					   hdsp->playback_buffer_unaligned,
-					   hdsp->playback_buffer_addr, 0);
-	}
+	snd_hammerfall_free_buffer(&hdsp->capture_dma_buf, hdsp->pci);
+	snd_hammerfall_free_buffer(&hdsp->playback_dma_buf, hdsp->pci);
 }
 
 static int __devinit snd_hdsp_initialize_memory(hdsp_t *hdsp)
 {
-	void *pb, *cb;
-	dma_addr_t pb_addr, cb_addr;
 	unsigned long pb_bus, cb_bus;
 
-	cb = snd_hammerfall_get_buffer(hdsp->pci, HDSP_DMA_AREA_BYTES, &cb_addr, 1);
-	pb = snd_hammerfall_get_buffer(hdsp->pci, HDSP_DMA_AREA_BYTES, &pb_addr, 0);
-
-	if (cb == 0 || pb == 0) {
-		if (cb) {
-			snd_hammerfall_free_buffer(hdsp->pci, HDSP_DMA_AREA_BYTES, cb, cb_addr, 1);
-		}
-		if (pb) {
-			snd_hammerfall_free_buffer(hdsp->pci, HDSP_DMA_AREA_BYTES, pb, pb_addr, 0);
-		}
-
+	if (snd_hammerfall_get_buffer(hdsp->pci, &hdsp->capture_dma_buf, HDSP_DMA_AREA_BYTES) < 0 ||
+	    snd_hammerfall_get_buffer(hdsp->pci, &hdsp->playback_dma_buf, HDSP_DMA_AREA_BYTES) < 0) {
+		if (hdsp->capture_dma_buf.area)
+			snd_dma_free_pages(&hdsp->capture_dma_buf);
 		printk(KERN_ERR "%s: no buffers available\n", hdsp->card_name);
 		return -ENOMEM;
 	}
 
-	/* save raw addresses for use when freeing memory later */
-
-	hdsp->capture_buffer_unaligned = cb;
-	hdsp->playback_buffer_unaligned = pb;
-	hdsp->capture_buffer_addr = cb_addr;
-	hdsp->playback_buffer_addr = pb_addr;
-
 	/* Align to bus-space 64K boundary */
 
-	cb_bus = (cb_addr + 0xFFFF) & ~0xFFFFl;
-	pb_bus = (pb_addr + 0xFFFF) & ~0xFFFFl;
+	cb_bus = (hdsp->capture_dma_buf.addr + 0xFFFF) & ~0xFFFFl;
+	pb_bus = (hdsp->playback_dma_buf.addr + 0xFFFF) & ~0xFFFFl;
 
 	/* Tell the card where it is */
 
 	hdsp_write(hdsp, HDSP_inputBufferAddress, cb_bus);
 	hdsp_write(hdsp, HDSP_outputBufferAddress, pb_bus);
 
-	hdsp->capture_buffer = cb + (cb_bus - cb_addr);
-	hdsp->playback_buffer = pb + (pb_bus - pb_addr);
+	hdsp->capture_buffer = hdsp->capture_dma_buf.area + (cb_bus - hdsp->capture_dma_buf.addr);
+	hdsp->playback_buffer = hdsp->playback_dma_buf.area + (pb_bus - hdsp->playback_dma_buf.addr);
 
 	return 0;
 }
@@ -3809,7 +3723,7 @@
 
 static snd_pcm_uframes_t snd_hdsp_hw_pointer(snd_pcm_substream_t *substream)
 {
-	hdsp_t *hdsp = _snd_pcm_substream_chip(substream);
+	hdsp_t *hdsp = snd_pcm_substream_chip(substream);
 	return hdsp_hw_pointer(hdsp);
 }
 
@@ -3836,7 +3750,7 @@
 static int snd_hdsp_playback_copy(snd_pcm_substream_t *substream, int channel,
 				  snd_pcm_uframes_t pos, void __user *src, snd_pcm_uframes_t count)
 {
-	hdsp_t *hdsp = _snd_pcm_substream_chip(substream);
+	hdsp_t *hdsp = snd_pcm_substream_chip(substream);
 	char *channel_buf;
 
 	snd_assert(pos + count <= HDSP_CHANNEL_BUFFER_BYTES / 4, return -EINVAL);
@@ -3851,7 +3765,7 @@
 static int snd_hdsp_capture_copy(snd_pcm_substream_t *substream, int channel,
 				 snd_pcm_uframes_t pos, void __user *dst, snd_pcm_uframes_t count)
 {
-	hdsp_t *hdsp = _snd_pcm_substream_chip(substream);
+	hdsp_t *hdsp = snd_pcm_substream_chip(substream);
 	char *channel_buf;
 
 	snd_assert(pos + count <= HDSP_CHANNEL_BUFFER_BYTES / 4, return -EINVAL);
@@ -3866,7 +3780,7 @@
 static int snd_hdsp_hw_silence(snd_pcm_substream_t *substream, int channel,
 				  snd_pcm_uframes_t pos, snd_pcm_uframes_t count)
 {
-	hdsp_t *hdsp = _snd_pcm_substream_chip(substream);
+	hdsp_t *hdsp = snd_pcm_substream_chip(substream);
 	char *channel_buf;
 
 	channel_buf = hdsp_channel_buffer_location (hdsp, substream->pstr->stream, channel);
@@ -3878,7 +3792,7 @@
 static int snd_hdsp_reset(snd_pcm_substream_t *substream)
 {
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	hdsp_t *hdsp = _snd_pcm_substream_chip(substream);
+	hdsp_t *hdsp = snd_pcm_substream_chip(substream);
 	snd_pcm_substream_t *other;
 	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
 		other = hdsp->capture_substream;
@@ -3906,7 +3820,7 @@
 static int snd_hdsp_hw_params(snd_pcm_substream_t *substream,
 				 snd_pcm_hw_params_t *params)
 {
-	hdsp_t *hdsp = _snd_pcm_substream_chip(substream);
+	hdsp_t *hdsp = snd_pcm_substream_chip(substream);
 	int err;
 	pid_t this_pid;
 	pid_t other_pid;
@@ -3989,7 +3903,7 @@
 static int snd_hdsp_channel_info(snd_pcm_substream_t *substream,
 				    snd_pcm_channel_info_t *info)
 {
-	hdsp_t *hdsp = _snd_pcm_substream_chip(substream);
+	hdsp_t *hdsp = snd_pcm_substream_chip(substream);
 	int mapped_channel;
 
 	snd_assert(info->channel < hdsp->max_channels, return -EINVAL);
@@ -4026,7 +3940,7 @@
 
 static int snd_hdsp_trigger(snd_pcm_substream_t *substream, int cmd)
 {
-	hdsp_t *hdsp = _snd_pcm_substream_chip(substream);
+	hdsp_t *hdsp = snd_pcm_substream_chip(substream);
 	snd_pcm_substream_t *other;
 	int running;
 	
@@ -4105,7 +4019,7 @@
 
 static int snd_hdsp_prepare(snd_pcm_substream_t *substream)
 {
-	hdsp_t *hdsp = _snd_pcm_substream_chip(substream);
+	hdsp_t *hdsp = snd_pcm_substream_chip(substream);
 	int result = 0;
 
 	if (hdsp_check_for_iobox (hdsp)) {
@@ -4123,10 +4037,10 @@
 		return -EIO;
 	}
 
-	spin_lock(&hdsp->lock);
+	spin_lock_irq(&hdsp->lock);
 	if (!hdsp->running)
 		hdsp_reset_hw_pointer(hdsp);
-	spin_unlock(&hdsp->lock);
+	spin_unlock_irq(&hdsp->lock);
 	return result;
 }
 
@@ -4183,20 +4097,16 @@
 
 static unsigned int hdsp_period_sizes[] = { 64, 128, 256, 512, 1024, 2048, 4096, 8192 };
 
-#define HDSP_PERIOD_SIZES sizeof(hdsp_period_sizes) / sizeof(hdsp_period_sizes[0])
-
 static snd_pcm_hw_constraint_list_t hdsp_hw_constraints_period_sizes = {
-	.count = HDSP_PERIOD_SIZES,
+	.count = ARRAY_SIZE(hdsp_period_sizes),
 	.list = hdsp_period_sizes,
 	.mask = 0
 };
 
 static unsigned int hdsp_9632_sample_rates[] = { 32000, 44100, 48000, 64000, 88200, 96000, 128000, 176400, 192000 };
 
-#define HDSP_9632_SAMPLE_RATES sizeof(hdsp_9632_sample_rates) / sizeof(hdsp_9632_sample_rates[0])
-
 static snd_pcm_hw_constraint_list_t hdsp_hw_constraints_9632_sample_rates = {
-	.count = HDSP_9632_SAMPLE_RATES,
+	.count = ARRAY_SIZE(hdsp_9632_sample_rates),
 	.list = hdsp_9632_sample_rates,
 	.mask = 0
 };
@@ -4364,8 +4274,7 @@
 
 static int snd_hdsp_playback_open(snd_pcm_substream_t *substream)
 {
-	hdsp_t *hdsp = _snd_pcm_substream_chip(substream);
-	unsigned long flags;
+	hdsp_t *hdsp = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
 
 	if (hdsp_check_for_iobox (hdsp)) {
@@ -4383,7 +4292,7 @@
 		return -EIO;
 	}
 
-	spin_lock_irqsave(&hdsp->lock, flags);
+	spin_lock_irq(&hdsp->lock);
 
 	snd_pcm_set_sync(substream);
 
@@ -4399,7 +4308,7 @@
 	hdsp->playback_pid = current->pid;
 	hdsp->playback_substream = substream;
 
-	spin_unlock_irqrestore(&hdsp->lock, flags);
+	spin_unlock_irq(&hdsp->lock);
 
 	snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24);
 	snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, &hdsp_hw_constraints_period_sizes);
@@ -4430,15 +4339,14 @@
 
 static int snd_hdsp_playback_release(snd_pcm_substream_t *substream)
 {
-	hdsp_t *hdsp = _snd_pcm_substream_chip(substream);
-	unsigned long flags;
+	hdsp_t *hdsp = snd_pcm_substream_chip(substream);
 
-	spin_lock_irqsave(&hdsp->lock, flags);
+	spin_lock_irq(&hdsp->lock);
 
 	hdsp->playback_pid = -1;
 	hdsp->playback_substream = NULL;
 
-	spin_unlock_irqrestore(&hdsp->lock, flags);
+	spin_unlock_irq(&hdsp->lock);
 
 	hdsp->spdif_ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE;
 	snd_ctl_notify(hdsp->card, SNDRV_CTL_EVENT_MASK_VALUE |
@@ -4449,8 +4357,7 @@
 
 static int snd_hdsp_capture_open(snd_pcm_substream_t *substream)
 {
-	hdsp_t *hdsp = _snd_pcm_substream_chip(substream);
-	unsigned long flags;
+	hdsp_t *hdsp = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
 
 	if (hdsp_check_for_iobox (hdsp)) {
@@ -4468,7 +4375,7 @@
 		return -EIO;
 	}
 
-	spin_lock_irqsave(&hdsp->lock, flags);
+	spin_lock_irq(&hdsp->lock);
 
 	snd_pcm_set_sync(substream);
 
@@ -4484,7 +4391,7 @@
 	hdsp->capture_pid = current->pid;
 	hdsp->capture_substream = substream;
 
-	spin_unlock_irqrestore(&hdsp->lock, flags);
+	spin_unlock_irq(&hdsp->lock);
 
 	snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24);
 	snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, &hdsp_hw_constraints_period_sizes);
@@ -4509,15 +4416,14 @@
 
 static int snd_hdsp_capture_release(snd_pcm_substream_t *substream)
 {
-	hdsp_t *hdsp = _snd_pcm_substream_chip(substream);
-	unsigned long flags;
+	hdsp_t *hdsp = snd_pcm_substream_chip(substream);
 
-	spin_lock_irqsave(&hdsp->lock, flags);
+	spin_lock_irq(&hdsp->lock);
 
 	hdsp->capture_pid = -1;
 	hdsp->capture_substream = NULL;
 
-	spin_unlock_irqrestore(&hdsp->lock, flags);
+	spin_unlock_irq(&hdsp->lock);
 	return 0;
 }
 
@@ -4830,19 +4736,13 @@
 	return 0;
 }
 
-static inline void snd_hdsp_9652_enable_mixer (hdsp_t *hdsp)
+static void snd_hdsp_9652_enable_mixer (hdsp_t *hdsp)
 {
         hdsp->control2_register |= HDSP_9652_ENABLE_MIXER;
 	hdsp_write (hdsp, HDSP_control2Reg, hdsp->control2_register);
 }
 
-static inline void snd_hdsp_9652_disable_mixer (hdsp_t *hdsp)
-{
-        hdsp->control2_register &= ~HDSP_9652_ENABLE_MIXER;
-	hdsp_write (hdsp, HDSP_control2Reg, hdsp->control2_register);
-}
-
-static inline int snd_hdsp_enable_io (hdsp_t *hdsp)
+static int snd_hdsp_enable_io (hdsp_t *hdsp)
 {
 	int i;
 	
@@ -4858,7 +4758,7 @@
 	return 0;
 }
 
-static inline void snd_hdsp_initialize_channels(hdsp_t *hdsp)
+static void snd_hdsp_initialize_channels(hdsp_t *hdsp)
 {
 	int status, aebi_channels, aebo_channels;
 	
@@ -4901,7 +4801,7 @@
 	}
 }
 
-static inline void snd_hdsp_initialize_midi_flush (hdsp_t *hdsp)
+static void snd_hdsp_initialize_midi_flush (hdsp_t *hdsp)
 {
 	snd_hdsp_flush_midi_input (hdsp, 0);
 	snd_hdsp_flush_midi_input (hdsp, 1);
@@ -4980,7 +4880,6 @@
 	spin_lock_init(&hdsp->midi[0].lock);
 	spin_lock_init(&hdsp->midi[1].lock);
 	hdsp->iobase = 0;
-	hdsp->res_port = NULL;
 	hdsp->control_register = 0;
 	hdsp->control2_register = 0;
 	hdsp->io_type = Undefined;
@@ -5035,13 +4934,9 @@
 
 	pci_set_master(hdsp->pci);
 
+	if ((err = pci_request_regions(pci, "hdsp")) < 0)
+		return err;
 	hdsp->port = pci_resource_start(pci, 0);
-
-	if ((hdsp->res_port = request_mem_region(hdsp->port, HDSP_IO_EXTENT, "hdsp")) == NULL) {
-		snd_printk("unable to grab memory region 0x%lx-0x%lx\n", hdsp->port, hdsp->port + HDSP_IO_EXTENT - 1);
-		return -EBUSY;
-	}
-
 	if ((hdsp->iobase = (unsigned long) ioremap_nocache(hdsp->port, HDSP_IO_EXTENT)) == 0) {
 		snd_printk("unable to remap region 0x%lx-0x%lx\n", hdsp->port, hdsp->port + HDSP_IO_EXTENT - 1);
 		return -EBUSY;
@@ -5114,7 +5009,7 @@
 
 static int snd_hdsp_free(hdsp_t *hdsp)
 {
-	if (hdsp->res_port) {
+	if (hdsp->port) {
 		/* stop the audio, and cancel all interrupts */
 		hdsp->control_register &= ~(HDSP_Start|HDSP_AudioInterruptEnable|HDSP_Midi0InterruptEnable|HDSP_Midi1InterruptEnable);
 		hdsp_write (hdsp, HDSP_controlRegister, hdsp->control_register);
@@ -5128,10 +5023,8 @@
 	if (hdsp->iobase)
 		iounmap((void *) hdsp->iobase);
 
-	if (hdsp->res_port) {
-		release_resource(hdsp->res_port);
-		kfree_nocheck(hdsp->res_port);
-	}
+	if (hdsp->port)
+		pci_release_regions(hdsp->pci);
 		
 	return 0;
 }
diff -Nru a/sound/pci/rme9652/rme9652.c b/sound/pci/rme9652/rme9652.c
--- a/sound/pci/rme9652/rme9652.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/rme9652/rme9652.c	2004-08-04 17:48:49 -07:00
@@ -46,21 +46,16 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for RME Digi9652 (Hammerfall) soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for RME Digi9652 (Hammerfall) soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable/disable specific RME96{52,36} soundcards.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(precise_ptr, bool, boot_devs, 0444);
 MODULE_PARM_DESC(precise_ptr, "Enable precise pointer (doesn't work reliably).");
-MODULE_PARM_SYNTAX(precise_ptr, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC);
 MODULE_AUTHOR("Paul Davis <pbd@op.net>, Winfried Ritsch");
 MODULE_DESCRIPTION("RME Digi9652/Digi9636");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{RME,Hammerfall},"
+MODULE_SUPPORTED_DEVICE("{{RME,Hammerfall},"
 		"{RME,Hammerfall-Light}}");
 
 /* The Hammerfall has two sets of 24 ADAT + 2 S/PDIF channels, one for
@@ -217,7 +212,6 @@
 	spinlock_t lock;
 	int irq;
 	unsigned long port;
-	struct resource *res_port;
 	unsigned long iobase;
 	
 	int precise_ptr;
@@ -239,12 +233,11 @@
 	unsigned char ds_channels;
 	unsigned char ss_channels;	/* different for hammerfall/hammerfall-light */
 
-	void *capture_buffer_unaligned;	/* original buffer addresses */
-	void *playback_buffer_unaligned;	/* original buffer addresses */
+	struct snd_dma_buffer playback_dma_buf;
+	struct snd_dma_buffer capture_dma_buf;
+
 	unsigned char *capture_buffer;	/* suitably aligned address */
 	unsigned char *playback_buffer;	/* suitably aligned address */
-	dma_addr_t capture_buffer_addr;
-	dma_addr_t playback_buffer_addr;
 
 	pid_t capture_pid;
 	pid_t playback_pid;
@@ -307,50 +300,24 @@
 	-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
 };
 
-#define RME9652_PREALLOCATE_MEMORY	/* via module snd-hammerfall-mem */
-
-#ifdef RME9652_PREALLOCATE_MEMORY
-static void *snd_hammerfall_get_buffer(struct pci_dev *pci, size_t size, dma_addr_t *addrp, int capture)
+static int snd_hammerfall_get_buffer(struct pci_dev *pci, struct snd_dma_buffer *dmab, size_t size)
 {
-	struct snd_dma_device pdev;
-	struct snd_dma_buffer dmbuf;
-
-	memset(&pdev, 0, sizeof(pdev));
-	pdev.type = SNDRV_DMA_TYPE_DEV;
-	pdev.dev = snd_dma_pci_data(pci);
-	pdev.id = capture;
-	dmbuf.bytes = 0;
-	if (! snd_dma_get_reserved(&pdev, &dmbuf)) {
-		if (snd_dma_alloc_pages(&pdev, size, &dmbuf) < 0)
-			return NULL;
-		snd_dma_set_reserved(&pdev, &dmbuf);
+	dmab->dev.type = SNDRV_DMA_TYPE_DEV;
+	dmab->dev.dev = snd_dma_pci_data(pci);
+	if (! snd_dma_get_reserved_buf(dmab, snd_dma_pci_buf_id(pci))) {
+		if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci),
+					size, dmab) < 0)
+			return -ENOMEM;
 	}
-	*addrp = dmbuf.addr;
-	return dmbuf.area;
-}
-
-static void snd_hammerfall_free_buffer(struct pci_dev *pci, size_t size, void *ptr, dma_addr_t addr, int capture)
-{
-	struct snd_dma_device pdev;
-
-	memset(&pdev, 0, sizeof(pdev));
-	pdev.type = SNDRV_DMA_TYPE_DEV;
-	pdev.dev = snd_dma_pci_data(pci);
-	pdev.id = capture;
-	snd_dma_free_reserved(&pdev);
+	return 0;
 }
 
-#else
-static void *snd_hammerfall_get_buffer(struct pci_dev *pci, size_t size, dma_addr_t *addrp, int capture)
+static void snd_hammerfall_free_buffer(struct snd_dma_buffer *dmab, struct pci_dev *pci)
 {
-	return snd_malloc_pci_pages(pci, size, addrp);
+	if (dmab->area)
+		snd_dma_reserve_buf(dmab, snd_dma_pci_buf_id(pci));
 }
 
-static void snd_hammerfall_free_buffer(struct pci_dev *pci, size_t size, void *ptr, dma_addr_t addr, int capture)
-{
-	snd_free_pci_pages(pci, size, ptr, addr);
-}
-#endif
 
 static struct pci_device_id snd_rme9652_ids[] = {
 	{
@@ -858,7 +825,7 @@
 
 static int snd_rme9652_control_spdif_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme9652_t *rme9652 = _snd_kcontrol_chip(kcontrol);
+	rme9652_t *rme9652 = snd_kcontrol_chip(kcontrol);
 	
 	snd_rme9652_convert_to_aes(&ucontrol->value.iec958, rme9652->creg_spdif);
 	return 0;
@@ -866,16 +833,15 @@
 
 static int snd_rme9652_control_spdif_put(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme9652_t *rme9652 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme9652_t *rme9652 = snd_kcontrol_chip(kcontrol);
 	int change;
 	u32 val;
 	
 	val = snd_rme9652_convert_from_aes(&ucontrol->value.iec958);
-	spin_lock_irqsave(&rme9652->lock, flags);
+	spin_lock_irq(&rme9652->lock);
 	change = val != rme9652->creg_spdif;
 	rme9652->creg_spdif = val;
-	spin_unlock_irqrestore(&rme9652->lock, flags);
+	spin_unlock_irq(&rme9652->lock);
 	return change;
 }
 
@@ -888,7 +854,7 @@
 
 static int snd_rme9652_control_spdif_stream_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme9652_t *rme9652 = _snd_kcontrol_chip(kcontrol);
+	rme9652_t *rme9652 = snd_kcontrol_chip(kcontrol);
 	
 	snd_rme9652_convert_to_aes(&ucontrol->value.iec958, rme9652->creg_spdif_stream);
 	return 0;
@@ -896,18 +862,17 @@
 
 static int snd_rme9652_control_spdif_stream_put(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme9652_t *rme9652 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme9652_t *rme9652 = snd_kcontrol_chip(kcontrol);
 	int change;
 	u32 val;
 	
 	val = snd_rme9652_convert_from_aes(&ucontrol->value.iec958);
-	spin_lock_irqsave(&rme9652->lock, flags);
+	spin_lock_irq(&rme9652->lock);
 	change = val != rme9652->creg_spdif_stream;
 	rme9652->creg_spdif_stream = val;
 	rme9652->control_register &= ~(RME9652_PRO | RME9652_Dolby | RME9652_EMP);
 	rme9652_write(rme9652, RME9652_control_register, rme9652->control_register |= val);
-	spin_unlock_irqrestore(&rme9652->lock, flags);
+	spin_unlock_irq(&rme9652->lock);
 	return change;
 }
 
@@ -977,30 +942,28 @@
 
 static int snd_rme9652_get_adat1_in(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme9652_t *rme9652 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme9652_t *rme9652 = snd_kcontrol_chip(kcontrol);
 	
-	spin_lock_irqsave(&rme9652->lock, flags);
+	spin_lock_irq(&rme9652->lock);
 	ucontrol->value.enumerated.item[0] = rme9652_adat1_in(rme9652);
-	spin_unlock_irqrestore(&rme9652->lock, flags);
+	spin_unlock_irq(&rme9652->lock);
 	return 0;
 }
 
 static int snd_rme9652_put_adat1_in(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme9652_t *rme9652 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme9652_t *rme9652 = snd_kcontrol_chip(kcontrol);
 	int change;
 	unsigned int val;
 	
 	if (!snd_rme9652_use_is_exclusive(rme9652))
 		return -EBUSY;
 	val = ucontrol->value.enumerated.item[0] % 2;
-	spin_lock_irqsave(&rme9652->lock, flags);
+	spin_lock_irq(&rme9652->lock);
 	change = val != rme9652_adat1_in(rme9652);
 	if (change)
 		rme9652_set_adat1_input(rme9652, val);
-	spin_unlock_irqrestore(&rme9652->lock, flags);
+	spin_unlock_irq(&rme9652->lock);
 	return change;
 }
 
@@ -1050,30 +1013,28 @@
 
 static int snd_rme9652_get_spdif_in(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme9652_t *rme9652 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme9652_t *rme9652 = snd_kcontrol_chip(kcontrol);
 	
-	spin_lock_irqsave(&rme9652->lock, flags);
+	spin_lock_irq(&rme9652->lock);
 	ucontrol->value.enumerated.item[0] = rme9652_spdif_in(rme9652);
-	spin_unlock_irqrestore(&rme9652->lock, flags);
+	spin_unlock_irq(&rme9652->lock);
 	return 0;
 }
 
 static int snd_rme9652_put_spdif_in(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme9652_t *rme9652 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme9652_t *rme9652 = snd_kcontrol_chip(kcontrol);
 	int change;
 	unsigned int val;
 	
 	if (!snd_rme9652_use_is_exclusive(rme9652))
 		return -EBUSY;
 	val = ucontrol->value.enumerated.item[0] % 3;
-	spin_lock_irqsave(&rme9652->lock, flags);
+	spin_lock_irq(&rme9652->lock);
 	change = val != rme9652_spdif_in(rme9652);
 	if (change)
 		rme9652_set_spdif_input(rme9652, val);
-	spin_unlock_irqrestore(&rme9652->lock, flags);
+	spin_unlock_irq(&rme9652->lock);
 	return change;
 }
 
@@ -1121,29 +1082,27 @@
 
 static int snd_rme9652_get_spdif_out(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme9652_t *rme9652 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme9652_t *rme9652 = snd_kcontrol_chip(kcontrol);
 	
-	spin_lock_irqsave(&rme9652->lock, flags);
+	spin_lock_irq(&rme9652->lock);
 	ucontrol->value.integer.value[0] = rme9652_spdif_out(rme9652);
-	spin_unlock_irqrestore(&rme9652->lock, flags);
+	spin_unlock_irq(&rme9652->lock);
 	return 0;
 }
 
 static int snd_rme9652_put_spdif_out(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme9652_t *rme9652 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme9652_t *rme9652 = snd_kcontrol_chip(kcontrol);
 	int change;
 	unsigned int val;
 	
 	if (!snd_rme9652_use_is_exclusive(rme9652))
 		return -EBUSY;
 	val = ucontrol->value.integer.value[0] & 1;
-	spin_lock_irqsave(&rme9652->lock, flags);
+	spin_lock_irq(&rme9652->lock);
 	change = (int)val != rme9652_spdif_out(rme9652);
 	rme9652_set_spdif_output(rme9652, val);
-	spin_unlock_irqrestore(&rme9652->lock, flags);
+	spin_unlock_irq(&rme9652->lock);
 	return change;
 }
 
@@ -1210,27 +1169,25 @@
 
 static int snd_rme9652_get_sync_mode(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme9652_t *rme9652 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme9652_t *rme9652 = snd_kcontrol_chip(kcontrol);
 	
-	spin_lock_irqsave(&rme9652->lock, flags);
+	spin_lock_irq(&rme9652->lock);
 	ucontrol->value.enumerated.item[0] = rme9652_sync_mode(rme9652);
-	spin_unlock_irqrestore(&rme9652->lock, flags);
+	spin_unlock_irq(&rme9652->lock);
 	return 0;
 }
 
 static int snd_rme9652_put_sync_mode(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme9652_t *rme9652 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme9652_t *rme9652 = snd_kcontrol_chip(kcontrol);
 	int change;
 	unsigned int val;
 	
 	val = ucontrol->value.enumerated.item[0] % 3;
-	spin_lock_irqsave(&rme9652->lock, flags);
+	spin_lock_irq(&rme9652->lock);
 	change = (int)val != rme9652_sync_mode(rme9652);
 	rme9652_set_sync_mode(rme9652, val);
-	spin_unlock_irqrestore(&rme9652->lock, flags);
+	spin_unlock_irq(&rme9652->lock);
 	return change;
 }
 
@@ -1291,7 +1248,7 @@
 static int snd_rme9652_info_sync_pref(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo)
 {
 	static char *texts[4] = {"IEC958 In", "ADAT1 In", "ADAT2 In", "ADAT3 In"};
-	rme9652_t *rme9652 = _snd_kcontrol_chip(kcontrol);
+	rme9652_t *rme9652 = snd_kcontrol_chip(kcontrol);
 
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
 	uinfo->count = 1;
@@ -1304,19 +1261,17 @@
 
 static int snd_rme9652_get_sync_pref(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme9652_t *rme9652 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme9652_t *rme9652 = snd_kcontrol_chip(kcontrol);
 	
-	spin_lock_irqsave(&rme9652->lock, flags);
+	spin_lock_irq(&rme9652->lock);
 	ucontrol->value.enumerated.item[0] = rme9652_sync_pref(rme9652);
-	spin_unlock_irqrestore(&rme9652->lock, flags);
+	spin_unlock_irq(&rme9652->lock);
 	return 0;
 }
 
 static int snd_rme9652_put_sync_pref(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme9652_t *rme9652 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme9652_t *rme9652 = snd_kcontrol_chip(kcontrol);
 	int change, max;
 	unsigned int val;
 	
@@ -1324,16 +1279,16 @@
 		return -EBUSY;
 	max = rme9652->ss_channels == RME9652_NCHANNELS ? 4 : 3;
 	val = ucontrol->value.enumerated.item[0] % max;
-	spin_lock_irqsave(&rme9652->lock, flags);
+	spin_lock_irq(&rme9652->lock);
 	change = (int)val != rme9652_sync_pref(rme9652);
 	rme9652_set_sync_pref(rme9652, val);
-	spin_unlock_irqrestore(&rme9652->lock, flags);
+	spin_unlock_irq(&rme9652->lock);
 	return change;
 }
 
 static int snd_rme9652_info_thru(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo)
 {
-	rme9652_t *rme9652 = _snd_kcontrol_chip(kcontrol);
+	rme9652_t *rme9652 = snd_kcontrol_chip(kcontrol);
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
 	uinfo->count = rme9652->ss_channels;
 	uinfo->value.integer.min = 0;
@@ -1343,7 +1298,7 @@
 
 static int snd_rme9652_get_thru(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme9652_t *rme9652 = _snd_kcontrol_chip(kcontrol);
+	rme9652_t *rme9652 = snd_kcontrol_chip(kcontrol);
 	unsigned int k;
 	u32 thru_bits = rme9652->thru_bits;
 
@@ -1355,8 +1310,7 @@
 
 static int snd_rme9652_put_thru(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme9652_t *rme9652 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme9652_t *rme9652 = snd_kcontrol_chip(kcontrol);
 	int change;
 	unsigned int chn;
 	u32 thru_bits = 0;
@@ -1369,7 +1323,7 @@
 			thru_bits |= 1 << chn;
 	}
 	
-	spin_lock_irqsave(&rme9652->lock, flags);
+	spin_lock_irq(&rme9652->lock);
 	change = thru_bits ^ rme9652->thru_bits;
 	if (change) {
 		for (chn = 0; chn < rme9652->ss_channels; ++chn) {
@@ -1378,7 +1332,7 @@
 			rme9652_set_thru(rme9652,chn,thru_bits&(1<<chn));
 		}
 	}
-	spin_unlock_irqrestore(&rme9652->lock, flags);
+	spin_unlock_irq(&rme9652->lock);
 	return !!change;
 }
 
@@ -1399,19 +1353,17 @@
 
 static int snd_rme9652_get_passthru(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme9652_t *rme9652 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme9652_t *rme9652 = snd_kcontrol_chip(kcontrol);
 
-	spin_lock_irqsave(&rme9652->lock, flags);
+	spin_lock_irq(&rme9652->lock);
 	ucontrol->value.integer.value[0] = rme9652->passthru;
-	spin_unlock_irqrestore(&rme9652->lock, flags);
+	spin_unlock_irq(&rme9652->lock);
 	return 0;
 }
 
 static int snd_rme9652_put_passthru(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme9652_t *rme9652 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme9652_t *rme9652 = snd_kcontrol_chip(kcontrol);
 	int change;
 	unsigned int val;
 	int err = 0;
@@ -1420,11 +1372,11 @@
 		return -EBUSY;
 
 	val = ucontrol->value.integer.value[0] & 1;
-	spin_lock_irqsave(&rme9652->lock, flags);
+	spin_lock_irq(&rme9652->lock);
 	change = (ucontrol->value.integer.value[0] != rme9652->passthru);
 	if (change)
 		err = rme9652_set_passthru(rme9652, val);
-	spin_unlock_irqrestore(&rme9652->lock, flags);
+	spin_unlock_irq(&rme9652->lock);
 	return err ? err : change;
 }
 
@@ -1447,12 +1399,11 @@
 
 static int snd_rme9652_get_spdif_rate(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme9652_t *rme9652 = _snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
+	rme9652_t *rme9652 = snd_kcontrol_chip(kcontrol);
 	
-	spin_lock_irqsave(&rme9652->lock, flags);
+	spin_lock_irq(&rme9652->lock);
 	ucontrol->value.integer.value[0] = rme9652_spdif_sample_rate(rme9652);
-	spin_unlock_irqrestore(&rme9652->lock, flags);
+	spin_unlock_irq(&rme9652->lock);
 	return 0;
 }
 
@@ -1477,7 +1428,7 @@
 
 static int snd_rme9652_get_adat_sync(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme9652_t *rme9652 = _snd_kcontrol_chip(kcontrol);
+	rme9652_t *rme9652 = snd_kcontrol_chip(kcontrol);
 	unsigned int mask1, mask2, val;
 	
 	switch (kcontrol->private_value) {
@@ -1509,7 +1460,7 @@
 
 static int snd_rme9652_get_tc_valid(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
-	rme9652_t *rme9652 = _snd_kcontrol_chip(kcontrol);
+	rme9652_t *rme9652 = snd_kcontrol_chip(kcontrol);
 	
 	ucontrol->value.integer.value[0] = 
 		(rme9652_read(rme9652, RME9652_status_register) & RME9652_tc_valid) ? 1 : 0;
@@ -1573,8 +1524,6 @@
 
 #endif				/* ALSA_HAS_STANDARD_WAY_OF_RETURNING_TIMECODE */
 
-#define RME9652_CONTROLS (sizeof(snd_rme9652_controls)/sizeof(snd_kcontrol_new_t))
-
 static snd_kcontrol_new_t snd_rme9652_controls[] = {
 {
 	.iface =	SNDRV_CTL_ELEM_IFACE_PCM,
@@ -1642,7 +1591,7 @@
 	int err;
 	snd_kcontrol_t *kctl;
 
-	for (idx = 0; idx < RME9652_CONTROLS; idx++) {
+	for (idx = 0; idx < ARRAY_SIZE(snd_rme9652_controls); idx++) {
 		if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_rme9652_controls[idx], rme9652))) < 0)
 			return err;
 		if (idx == 1)	/* IEC958 (S/PDIF) Stream */
@@ -1847,17 +1796,8 @@
 
 static void snd_rme9652_free_buffers(rme9652_t *rme9652)
 {
-	if (rme9652->capture_buffer_unaligned) {
-		snd_hammerfall_free_buffer(rme9652->pci, RME9652_DMA_AREA_BYTES,
-					   rme9652->capture_buffer_unaligned,
-					   rme9652->capture_buffer_addr, 1);
-	}
-
-	if (rme9652->playback_buffer_unaligned) {
-		snd_hammerfall_free_buffer(rme9652->pci, RME9652_DMA_AREA_BYTES,
-					   rme9652->playback_buffer_unaligned,
-					   rme9652->playback_buffer_addr, 0);
-	}
+	snd_hammerfall_free_buffer(&rme9652->capture_dma_buf, rme9652->pci);
+	snd_hammerfall_free_buffer(&rme9652->playback_dma_buf, rme9652->pci);
 }
 
 static int snd_rme9652_free(rme9652_t *rme9652)
@@ -1866,57 +1806,40 @@
 		rme9652_stop(rme9652);
 	snd_rme9652_free_buffers(rme9652);
 
-	if (rme9652->iobase)
-		iounmap((void *) rme9652->iobase);
-	if (rme9652->res_port) {
-		release_resource(rme9652->res_port);
-		kfree_nocheck(rme9652->res_port);
-	}
 	if (rme9652->irq >= 0)
 		free_irq(rme9652->irq, (void *)rme9652);
+	if (rme9652->iobase)
+		iounmap((void *) rme9652->iobase);
+	if (rme9652->port)
+		pci_release_regions(rme9652->pci);
+
 	return 0;
 }
 
 static int __devinit snd_rme9652_initialize_memory(rme9652_t *rme9652)
 {
-	void *pb, *cb;
-	dma_addr_t pb_addr, cb_addr;
 	unsigned long pb_bus, cb_bus;
 
-	cb = snd_hammerfall_get_buffer(rme9652->pci, RME9652_DMA_AREA_BYTES, &cb_addr, 1);
-	pb = snd_hammerfall_get_buffer(rme9652->pci, RME9652_DMA_AREA_BYTES, &pb_addr, 0);
-
-	if (cb == 0 || pb == 0) {
-		if (cb) {
-			snd_hammerfall_free_buffer(rme9652->pci, RME9652_DMA_AREA_BYTES, cb, cb_addr, 1);
-		}
-		if (pb) {
-			snd_hammerfall_free_buffer(rme9652->pci, RME9652_DMA_AREA_BYTES, pb, pb_addr, 0);
-		}
-
+	if (snd_hammerfall_get_buffer(rme9652->pci, &rme9652->capture_dma_buf, RME9652_DMA_AREA_BYTES) < 0 ||
+	    snd_hammerfall_get_buffer(rme9652->pci, &rme9652->playback_dma_buf, RME9652_DMA_AREA_BYTES) < 0) {
+		if (rme9652->capture_dma_buf.area)
+			snd_dma_free_pages(&rme9652->capture_dma_buf);
 		printk(KERN_ERR "%s: no buffers available\n", rme9652->card_name);
 		return -ENOMEM;
 	}
 
-	/* save raw addresses for use when freeing memory later */
-
-	rme9652->capture_buffer_unaligned = cb;
-	rme9652->playback_buffer_unaligned = pb;
-	rme9652->capture_buffer_addr = cb_addr;
-	rme9652->playback_buffer_addr = pb_addr;
-
 	/* Align to bus-space 64K boundary */
 
-	cb_bus = (cb_addr + 0xFFFF) & ~0xFFFFl;
-	pb_bus = (pb_addr + 0xFFFF) & ~0xFFFFl;
+	cb_bus = (rme9652->capture_dma_buf.addr + 0xFFFF) & ~0xFFFFl;
+	pb_bus = (rme9652->playback_dma_buf.addr + 0xFFFF) & ~0xFFFFl;
 
 	/* Tell the card where it is */
 
 	rme9652_write(rme9652, RME9652_rec_buffer, cb_bus);
 	rme9652_write(rme9652, RME9652_play_buffer, pb_bus);
 
-	rme9652->capture_buffer = cb + (cb_bus - cb_addr);
-	rme9652->playback_buffer = pb + (pb_bus - pb_addr);
+	rme9652->capture_buffer = rme9652->capture_dma_buf.area + (cb_bus - rme9652->capture_dma_buf.addr);
+	rme9652->playback_buffer = rme9652->playback_dma_buf.area + (pb_bus - rme9652->playback_dma_buf.addr);
 
 	return 0;
 }
@@ -1984,7 +1907,7 @@
 
 static snd_pcm_uframes_t snd_rme9652_hw_pointer(snd_pcm_substream_t *substream)
 {
-	rme9652_t *rme9652 = _snd_pcm_substream_chip(substream);
+	rme9652_t *rme9652 = snd_pcm_substream_chip(substream);
 	return rme9652_hw_pointer(rme9652);
 }
 
@@ -2013,7 +1936,7 @@
 static int snd_rme9652_playback_copy(snd_pcm_substream_t *substream, int channel,
 				     snd_pcm_uframes_t pos, void __user *src, snd_pcm_uframes_t count)
 {
-	rme9652_t *rme9652 = _snd_pcm_substream_chip(substream);
+	rme9652_t *rme9652 = snd_pcm_substream_chip(substream);
 	char *channel_buf;
 
 	snd_assert(pos + count <= RME9652_CHANNEL_BUFFER_BYTES / 4, return -EINVAL);
@@ -2030,7 +1953,7 @@
 static int snd_rme9652_capture_copy(snd_pcm_substream_t *substream, int channel,
 				    snd_pcm_uframes_t pos, void __user *dst, snd_pcm_uframes_t count)
 {
-	rme9652_t *rme9652 = _snd_pcm_substream_chip(substream);
+	rme9652_t *rme9652 = snd_pcm_substream_chip(substream);
 	char *channel_buf;
 
 	snd_assert(pos + count <= RME9652_CHANNEL_BUFFER_BYTES / 4, return -EINVAL);
@@ -2047,7 +1970,7 @@
 static int snd_rme9652_hw_silence(snd_pcm_substream_t *substream, int channel,
 				  snd_pcm_uframes_t pos, snd_pcm_uframes_t count)
 {
-	rme9652_t *rme9652 = _snd_pcm_substream_chip(substream);
+	rme9652_t *rme9652 = snd_pcm_substream_chip(substream);
 	char *channel_buf;
 
 	channel_buf = rme9652_channel_buffer_location (rme9652,
@@ -2061,7 +1984,7 @@
 static int snd_rme9652_reset(snd_pcm_substream_t *substream)
 {
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	rme9652_t *rme9652 = _snd_pcm_substream_chip(substream);
+	rme9652_t *rme9652 = snd_pcm_substream_chip(substream);
 	snd_pcm_substream_t *other;
 	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
 		other = rme9652->capture_substream;
@@ -2089,7 +2012,7 @@
 static int snd_rme9652_hw_params(snd_pcm_substream_t *substream,
 				 snd_pcm_hw_params_t *params)
 {
-	rme9652_t *rme9652 = _snd_pcm_substream_chip(substream);
+	rme9652_t *rme9652 = snd_pcm_substream_chip(substream);
 	int err;
 	pid_t this_pid;
 	pid_t other_pid;
@@ -2154,7 +2077,7 @@
 static int snd_rme9652_channel_info(snd_pcm_substream_t *substream,
 				    snd_pcm_channel_info_t *info)
 {
-	rme9652_t *rme9652 = _snd_pcm_substream_chip(substream);
+	rme9652_t *rme9652 = snd_pcm_substream_chip(substream);
 	int chn;
 
 	snd_assert(info->channel < RME9652_NCHANNELS, return -EINVAL);
@@ -2197,7 +2120,7 @@
 static int snd_rme9652_trigger(snd_pcm_substream_t *substream,
 			       int cmd)
 {
-	rme9652_t *rme9652 = _snd_pcm_substream_chip(substream);
+	rme9652_t *rme9652 = snd_pcm_substream_chip(substream);
 	snd_pcm_substream_t *other;
 	int running;
 	spin_lock(&rme9652->lock);
@@ -2260,13 +2183,14 @@
 
 static int snd_rme9652_prepare(snd_pcm_substream_t *substream)
 {
-	rme9652_t *rme9652 = _snd_pcm_substream_chip(substream);
+	rme9652_t *rme9652 = snd_pcm_substream_chip(substream);
+	unsigned long flags;
 	int result = 0;
 
-	spin_lock(&rme9652->lock);
+	spin_lock_irqsave(&rme9652->lock, flags);
 	if (!rme9652->running)
 		rme9652_reset_hw_pointer(rme9652);
-	spin_unlock(&rme9652->lock);
+	spin_unlock_irqrestore(&rme9652->lock, flags);
 	return result;
 }
 
@@ -2319,10 +2243,8 @@
 
 static unsigned int period_sizes[] = { 64, 128, 256, 512, 1024, 2048, 4096, 8192 };
 
-#define PERIOD_SIZES sizeof(period_sizes) / sizeof(period_sizes[0])
-
 static snd_pcm_hw_constraint_list_t hw_constraints_period_sizes = {
-	.count = PERIOD_SIZES,
+	.count = ARRAY_SIZE(period_sizes),
 	.list = period_sizes,
 	.mask = 0
 };
@@ -2386,11 +2308,10 @@
 
 static int snd_rme9652_playback_open(snd_pcm_substream_t *substream)
 {
-	rme9652_t *rme9652 = _snd_pcm_substream_chip(substream);
-	unsigned long flags;
+	rme9652_t *rme9652 = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
 
-	spin_lock_irqsave(&rme9652->lock, flags);
+	spin_lock_irq(&rme9652->lock);
 
 	snd_pcm_set_sync(substream);
 
@@ -2406,7 +2327,7 @@
 	rme9652->playback_pid = current->pid;
 	rme9652->playback_substream = substream;
 
-	spin_unlock_irqrestore(&rme9652->lock, flags);
+	spin_unlock_irq(&rme9652->lock);
 
 	snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24);
 	snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, &hw_constraints_period_sizes);
@@ -2429,15 +2350,14 @@
 
 static int snd_rme9652_playback_release(snd_pcm_substream_t *substream)
 {
-	rme9652_t *rme9652 = _snd_pcm_substream_chip(substream);
-	unsigned long flags;
+	rme9652_t *rme9652 = snd_pcm_substream_chip(substream);
 
-	spin_lock_irqsave(&rme9652->lock, flags);
+	spin_lock_irq(&rme9652->lock);
 
 	rme9652->playback_pid = -1;
 	rme9652->playback_substream = NULL;
 
-	spin_unlock_irqrestore(&rme9652->lock, flags);
+	spin_unlock_irq(&rme9652->lock);
 
 	rme9652->spdif_ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE;
 	snd_ctl_notify(rme9652->card, SNDRV_CTL_EVENT_MASK_VALUE |
@@ -2448,11 +2368,10 @@
 
 static int snd_rme9652_capture_open(snd_pcm_substream_t *substream)
 {
-	rme9652_t *rme9652 = _snd_pcm_substream_chip(substream);
-	unsigned long flags;
+	rme9652_t *rme9652 = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
 
-	spin_lock_irqsave(&rme9652->lock, flags);
+	spin_lock_irq(&rme9652->lock);
 
 	snd_pcm_set_sync(substream);
 
@@ -2468,7 +2387,7 @@
 	rme9652->capture_pid = current->pid;
 	rme9652->capture_substream = substream;
 
-	spin_unlock_irqrestore(&rme9652->lock, flags);
+	spin_unlock_irq(&rme9652->lock);
 
 	snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24);
 	snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, &hw_constraints_period_sizes);
@@ -2486,15 +2405,14 @@
 
 static int snd_rme9652_capture_release(snd_pcm_substream_t *substream)
 {
-	rme9652_t *rme9652 = _snd_pcm_substream_chip(substream);
-	unsigned long flags;
+	rme9652_t *rme9652 = snd_pcm_substream_chip(substream);
 
-	spin_lock_irqsave(&rme9652->lock, flags);
+	spin_lock_irq(&rme9652->lock);
 
 	rme9652->capture_pid = -1;
 	rme9652->capture_substream = NULL;
 
-	spin_unlock_irqrestore(&rme9652->lock, flags);
+	spin_unlock_irq(&rme9652->lock);
 	return 0;
 }
 
@@ -2576,12 +2494,9 @@
 
 	spin_lock_init(&rme9652->lock);
 
+	if ((err = pci_request_regions(pci, "rme9652")) < 0)
+		return err;
 	rme9652->port = pci_resource_start(pci, 0);
-	if ((rme9652->res_port = request_mem_region(rme9652->port, RME9652_IO_EXTENT, "rme9652")) == NULL) {
-		snd_printk("unable to grab memory region 0x%lx-0x%lx\n", rme9652->port, rme9652->port + RME9652_IO_EXTENT - 1);
-		return -EBUSY;
-	}
-
 	rme9652->iobase = (unsigned long) ioremap_nocache(rme9652->port, RME9652_IO_EXTENT);
 	if (rme9652->iobase == 0) {
 		snd_printk("unable to remap region 0x%lx-0x%lx\n", rme9652->port, rme9652->port + RME9652_IO_EXTENT - 1);
diff -Nru a/sound/pci/sonicvibes.c b/sound/pci/sonicvibes.c
--- a/sound/pci/sonicvibes.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/sonicvibes.c	2004-08-04 17:48:49 -07:00
@@ -44,8 +44,7 @@
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("S3 SonicVibes PCI");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{S3,SonicVibes PCI}}");
+MODULE_SUPPORTED_DEVICE("{{S3,SonicVibes PCI}}");
 
 #ifndef PCI_VENDOR_ID_S3
 #define PCI_VENDOR_ID_S3             0x5333
@@ -64,22 +63,16 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for S3 SonicVibes soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for S3 SonicVibes soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable S3 SonicVibes soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(reverb, bool, boot_devs, 0444);
 MODULE_PARM_DESC(reverb, "Enable reverb (SRAM is present) for S3 SonicVibes soundcard.");
-MODULE_PARM_SYNTAX(reverb, SNDRV_ENABLED "," SNDRV_ENABLE_DESC);
 module_param_array(mge, bool, boot_devs, 0444);
 MODULE_PARM_DESC(mge, "MIC Gain Enable for S3 SonicVibes soundcard.");
-MODULE_PARM_SYNTAX(mge, SNDRV_ENABLED "," SNDRV_ENABLE_DESC);
 module_param(dmaio, uint, 0444);
 MODULE_PARM_DESC(dmaio, "DDMA i/o base address for S3 SonicVibes soundcard.");
-MODULE_PARM_SYNTAX(dmaio, "global," SNDRV_PORT_DESC);
 
 /*
  * Enhanced port direct registers
@@ -207,7 +200,6 @@
  */
 
 typedef struct _snd_sonicvibes sonicvibes_t;
-#define chip_t sonicvibes_t
 
 struct _snd_sonicvibes {
 	unsigned long dma1size;
@@ -215,13 +207,9 @@
 	int irq;
 
 	unsigned long sb_port;
-	struct resource *res_sb_port;
 	unsigned long enh_port;
-	struct resource *res_enh_port;
 	unsigned long synth_port;
-	struct resource *res_synth_port;
 	unsigned long midi_port;
-	struct resource *res_midi_port;
 	unsigned long game_port;
 	unsigned int dmaa_port;
 	struct resource *res_dmaa;
@@ -599,7 +587,7 @@
 
 static irqreturn_t snd_sonicvibes_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	sonicvibes_t *sonic = snd_magic_cast(sonicvibes_t, dev_id, return IRQ_NONE);
+	sonicvibes_t *sonic = dev_id;
 	unsigned char status;
 
 	status = inb(SV_REG(sonic, STATUS));
@@ -689,7 +677,6 @@
 
 static int snd_sonicvibes_playback_prepare(snd_pcm_substream_t * substream)
 {
-	unsigned long flags;
 	sonicvibes_t *sonic = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
 	unsigned char fmt = 0;
@@ -704,17 +691,16 @@
 		fmt |= 2;
 	snd_sonicvibes_setfmt(sonic, ~3, fmt);
 	snd_sonicvibes_set_dac_rate(sonic, runtime->rate);
-	spin_lock_irqsave(&sonic->reg_lock, flags);
+	spin_lock_irq(&sonic->reg_lock);
 	snd_sonicvibes_setdmaa(sonic, runtime->dma_addr, size);
 	snd_sonicvibes_out1(sonic, SV_IREG_DMA_A_UPPER, count >> 8);
 	snd_sonicvibes_out1(sonic, SV_IREG_DMA_A_LOWER, count);
-	spin_unlock_irqrestore(&sonic->reg_lock, flags);
+	spin_unlock_irq(&sonic->reg_lock);
 	return 0;
 }
 
 static int snd_sonicvibes_capture_prepare(snd_pcm_substream_t * substream)
 {
-	unsigned long flags;
 	sonicvibes_t *sonic = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
 	unsigned char fmt = 0;
@@ -730,11 +716,11 @@
 		fmt |= 0x20;
 	snd_sonicvibes_setfmt(sonic, ~0x30, fmt);
 	snd_sonicvibes_set_adc_rate(sonic, runtime->rate);
-	spin_lock_irqsave(&sonic->reg_lock, flags);
+	spin_lock_irq(&sonic->reg_lock);
 	snd_sonicvibes_setdmac(sonic, runtime->dma_addr, size);
 	snd_sonicvibes_out1(sonic, SV_IREG_DMA_C_UPPER, count >> 8);
 	snd_sonicvibes_out1(sonic, SV_IREG_DMA_C_LOWER, count);
-	spin_unlock_irqrestore(&sonic->reg_lock, flags);
+	spin_unlock_irq(&sonic->reg_lock);
 	return 0;
 }
 
@@ -864,7 +850,7 @@
 
 static void snd_sonicvibes_pcm_free(snd_pcm_t *pcm)
 {
-	sonicvibes_t *sonic = snd_magic_cast(sonicvibes_t, pcm->private_data, return);
+	sonicvibes_t *sonic = pcm->private_data;
 	sonic->pcm = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
@@ -922,19 +908,17 @@
 static int snd_sonicvibes_get_mux(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
 	sonicvibes_t *sonic = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	
-	spin_lock_irqsave(&sonic->reg_lock, flags);
+	spin_lock_irq(&sonic->reg_lock);
 	ucontrol->value.enumerated.item[0] = ((snd_sonicvibes_in1(sonic, SV_IREG_LEFT_ADC) & SV_RECSRC_OUT) >> 5) - 1;
 	ucontrol->value.enumerated.item[1] = ((snd_sonicvibes_in1(sonic, SV_IREG_RIGHT_ADC) & SV_RECSRC_OUT) >> 5) - 1;
-	spin_unlock_irqrestore(&sonic->reg_lock, flags);
+	spin_unlock_irq(&sonic->reg_lock);
 	return 0;
 }
 
 static int snd_sonicvibes_put_mux(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
 	sonicvibes_t *sonic = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	unsigned short left, right, oval1, oval2;
 	int change;
 	
@@ -943,7 +927,7 @@
 		return -EINVAL;
 	left = (ucontrol->value.enumerated.item[0] + 1) << 5;
 	right = (ucontrol->value.enumerated.item[1] + 1) << 5;
-	spin_lock_irqsave(&sonic->reg_lock, flags);
+	spin_lock_irq(&sonic->reg_lock);
 	oval1 = snd_sonicvibes_in1(sonic, SV_IREG_LEFT_ADC);
 	oval2 = snd_sonicvibes_in1(sonic, SV_IREG_RIGHT_ADC);
 	left = (oval1 & ~SV_RECSRC_OUT) | left;
@@ -951,7 +935,7 @@
 	change = left != oval1 || right != oval2;
 	snd_sonicvibes_out1(sonic, SV_IREG_LEFT_ADC, left);
 	snd_sonicvibes_out1(sonic, SV_IREG_RIGHT_ADC, right);
-	spin_unlock_irqrestore(&sonic->reg_lock, flags);
+	spin_unlock_irq(&sonic->reg_lock);
 	return change;
 }
 
@@ -975,15 +959,14 @@
 static int snd_sonicvibes_get_single(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
 	sonicvibes_t *sonic = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	int reg = kcontrol->private_value & 0xff;
 	int shift = (kcontrol->private_value >> 8) & 0xff;
 	int mask = (kcontrol->private_value >> 16) & 0xff;
 	int invert = (kcontrol->private_value >> 24) & 0xff;
 	
-	spin_lock_irqsave(&sonic->reg_lock, flags);
+	spin_lock_irq(&sonic->reg_lock);
 	ucontrol->value.integer.value[0] = (snd_sonicvibes_in1(sonic, reg)>> shift) & mask;
-	spin_unlock_irqrestore(&sonic->reg_lock, flags);
+	spin_unlock_irq(&sonic->reg_lock);
 	if (invert)
 		ucontrol->value.integer.value[0] = mask - ucontrol->value.integer.value[0];
 	return 0;
@@ -992,7 +975,6 @@
 static int snd_sonicvibes_put_single(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
 	sonicvibes_t *sonic = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	int reg = kcontrol->private_value & 0xff;
 	int shift = (kcontrol->private_value >> 8) & 0xff;
 	int mask = (kcontrol->private_value >> 16) & 0xff;
@@ -1004,12 +986,12 @@
 	if (invert)
 		val = mask - val;
 	val <<= shift;
-	spin_lock_irqsave(&sonic->reg_lock, flags);
+	spin_lock_irq(&sonic->reg_lock);
 	oval = snd_sonicvibes_in1(sonic, reg);
 	val = (oval & ~(mask << shift)) | val;
 	change = val != oval;
 	snd_sonicvibes_out1(sonic, reg, val);
-	spin_unlock_irqrestore(&sonic->reg_lock, flags);
+	spin_unlock_irq(&sonic->reg_lock);
 	return change;
 }
 
@@ -1033,7 +1015,6 @@
 static int snd_sonicvibes_get_double(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
 	sonicvibes_t *sonic = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	int left_reg = kcontrol->private_value & 0xff;
 	int right_reg = (kcontrol->private_value >> 8) & 0xff;
 	int shift_left = (kcontrol->private_value >> 16) & 0x07;
@@ -1041,10 +1022,10 @@
 	int mask = (kcontrol->private_value >> 24) & 0xff;
 	int invert = (kcontrol->private_value >> 22) & 1;
 	
-	spin_lock_irqsave(&sonic->reg_lock, flags);
+	spin_lock_irq(&sonic->reg_lock);
 	ucontrol->value.integer.value[0] = (snd_sonicvibes_in1(sonic, left_reg) >> shift_left) & mask;
 	ucontrol->value.integer.value[1] = (snd_sonicvibes_in1(sonic, right_reg) >> shift_right) & mask;
-	spin_unlock_irqrestore(&sonic->reg_lock, flags);
+	spin_unlock_irq(&sonic->reg_lock);
 	if (invert) {
 		ucontrol->value.integer.value[0] = mask - ucontrol->value.integer.value[0];
 		ucontrol->value.integer.value[1] = mask - ucontrol->value.integer.value[1];
@@ -1055,7 +1036,6 @@
 static int snd_sonicvibes_put_double(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
 	sonicvibes_t *sonic = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	int left_reg = kcontrol->private_value & 0xff;
 	int right_reg = (kcontrol->private_value >> 8) & 0xff;
 	int shift_left = (kcontrol->private_value >> 16) & 0x07;
@@ -1073,7 +1053,7 @@
 	}
 	val1 <<= shift_left;
 	val2 <<= shift_right;
-	spin_lock_irqsave(&sonic->reg_lock, flags);
+	spin_lock_irq(&sonic->reg_lock);
 	oval1 = snd_sonicvibes_in1(sonic, left_reg);
 	oval2 = snd_sonicvibes_in1(sonic, right_reg);
 	val1 = (oval1 & ~(mask << shift_left)) | val1;
@@ -1081,12 +1061,10 @@
 	change = val1 != oval1 || val2 != oval2;
 	snd_sonicvibes_out1(sonic, left_reg, val1);
 	snd_sonicvibes_out1(sonic, right_reg, val2);
-	spin_unlock_irqrestore(&sonic->reg_lock, flags);
+	spin_unlock_irq(&sonic->reg_lock);
 	return change;
 }
 
-#define SONICVIBES_CONTROLS (sizeof(snd_sonicvibes_controls)/sizeof(snd_kcontrol_new_t))
-
 static snd_kcontrol_new_t snd_sonicvibes_controls[] __devinitdata = {
 SONICVIBES_DOUBLE("Capture Volume", 0, SV_IREG_LEFT_ADC, SV_IREG_RIGHT_ADC, 0, 0, 15, 0),
 SONICVIBES_DOUBLE("Aux Playback Switch", 0, SV_IREG_LEFT_AUX1, SV_IREG_RIGHT_AUX1, 7, 7, 1, 1),
@@ -1113,7 +1091,7 @@
 
 static void snd_sonicvibes_master_free(snd_kcontrol_t *kcontrol)
 {
-	sonicvibes_t *sonic = snd_magic_cast(sonicvibes_t, _snd_kcontrol_chip(kcontrol), return);
+	sonicvibes_t *sonic = snd_kcontrol_chip(kcontrol);
 	sonic->master_mute = NULL;
 	sonic->master_volume = NULL;
 }
@@ -1129,7 +1107,7 @@
 	card = sonic->card;
 	strcpy(card->mixername, "S3 SonicVibes");
 
-	for (idx = 0; idx < SONICVIBES_CONTROLS; idx++) {
+	for (idx = 0; idx < ARRAY_SIZE(snd_sonicvibes_controls); idx++) {
 		if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_sonicvibes_controls[idx], sonic))) < 0)
 			return err;
 		switch (idx) {
@@ -1147,7 +1125,7 @@
 static void snd_sonicvibes_proc_read(snd_info_entry_t *entry, 
 				     snd_info_buffer_t * buffer)
 {
-	sonicvibes_t *sonic = snd_magic_cast(sonicvibes_t, entry->private_data, return);
+	sonicvibes_t *sonic = entry->private_data;
 	unsigned char tmp;
 
 	tmp = sonic->srs_space & 0x0f;
@@ -1197,22 +1175,8 @@
 #endif
 	pci_write_config_dword(sonic->pci, 0x40, sonic->dmaa_port);
 	pci_write_config_dword(sonic->pci, 0x48, sonic->dmac_port);
-	if (sonic->res_sb_port) {
-		release_resource(sonic->res_sb_port);
-		kfree_nocheck(sonic->res_sb_port);
-	}
-	if (sonic->res_enh_port) {
-		release_resource(sonic->res_enh_port);
-		kfree_nocheck(sonic->res_enh_port);
-	}
-	if (sonic->res_synth_port) {
-		release_resource(sonic->res_synth_port);
-		kfree_nocheck(sonic->res_synth_port);
-	}
-	if (sonic->res_midi_port) {
-		release_resource(sonic->res_midi_port);
-		kfree_nocheck(sonic->res_midi_port);
-	}
+	if (sonic->irq >= 0)
+		free_irq(sonic->irq, (void *)sonic);
 	if (sonic->res_dmaa) {
 		release_resource(sonic->res_dmaa);
 		kfree_nocheck(sonic->res_dmaa);
@@ -1221,15 +1185,14 @@
 		release_resource(sonic->res_dmac);
 		kfree_nocheck(sonic->res_dmac);
 	}
-	if (sonic->irq >= 0)
-		free_irq(sonic->irq, (void *)sonic);
-	snd_magic_kfree(sonic);
+	pci_release_regions(sonic->pci);
+	kfree(sonic);
 	return 0;
 }
 
 static int snd_sonicvibes_dev_free(snd_device_t *device)
 {
-	sonicvibes_t *sonic = snd_magic_cast(sonicvibes_t, device->device_data, return -ENXIO);
+	sonicvibes_t *sonic = device->device_data;
 	return snd_sonicvibes_free(sonic);
 }
 
@@ -1257,38 +1220,25 @@
                 return -ENXIO;
         }
 
-	sonic = snd_magic_kcalloc(sonicvibes_t, 0, GFP_KERNEL);
+	sonic = kcalloc(1, sizeof(*sonic), GFP_KERNEL);
 	if (sonic == NULL)
 		return -ENOMEM;
 	spin_lock_init(&sonic->reg_lock);
 	sonic->card = card;
 	sonic->pci = pci;
 	sonic->irq = -1;
-	sonic->sb_port = pci_resource_start(pci, 0);
-	if ((sonic->res_sb_port = request_region(sonic->sb_port, 0x10, "S3 SonicVibes SB")) == NULL) {
-		snd_printk("unable to grab SB port at 0x%lx-0x%lx\n", sonic->sb_port, sonic->sb_port + 0x10 - 1);
-		snd_sonicvibes_free(sonic);
-		return -EBUSY;
+
+	if ((err = pci_request_regions(pci, "S3 SonicVibes")) < 0) {
+		kfree(sonic);
+		return err;
 	}
+
+	sonic->sb_port = pci_resource_start(pci, 0);
 	sonic->enh_port = pci_resource_start(pci, 1);
-	if ((sonic->res_enh_port = request_region(sonic->enh_port, 0x10, "S3 SonicVibes Enhanced")) == NULL) {
-		snd_printk("unable to grab PCM port at 0x%lx-0x%lx\n", sonic->enh_port, sonic->enh_port + 0x10 - 1);
-		snd_sonicvibes_free(sonic);
-		return -EBUSY;
-	}
 	sonic->synth_port = pci_resource_start(pci, 2);
-	if ((sonic->res_synth_port = request_region(sonic->synth_port, 4, "S3 SonicVibes Synth")) == NULL) {
-		snd_printk("unable to grab synth port at 0x%lx-0x%lx\n", sonic->synth_port, sonic->synth_port + 4 - 1);
-		snd_sonicvibes_free(sonic);
-		return -EBUSY;
-	}
 	sonic->midi_port = pci_resource_start(pci, 3);
-	if ((sonic->res_midi_port = request_region(sonic->midi_port, 4, "S3 SonicVibes Midi")) == NULL) {
-		snd_printk("unable to grab MIDI port at 0x%lx-0x%lx\n", sonic->midi_port, sonic->midi_port + 4 - 1);
-		snd_sonicvibes_free(sonic);
-		return -EBUSY;
-	}
 	sonic->game_port = pci_resource_start(pci, 4);
+
 	if (request_irq(pci->irq, snd_sonicvibes_interrupt, SA_INTERRUPT|SA_SHIRQ, "S3 SonicVibes", (void *)sonic)) {
 		snd_printk("unable to grab IRQ %d\n", pci->irq);
 		snd_sonicvibes_free(sonic);
@@ -1396,8 +1346,6 @@
  *  MIDI section
  */
 
-#define SONICVIBES_MIDI_CONTROLS (sizeof(snd_sonicvibes_midi_controls)/sizeof(snd_kcontrol_new_t))
-
 static snd_kcontrol_new_t snd_sonicvibes_midi_controls[] __devinitdata = {
 SONICVIBES_SINGLE("SonicVibes Wave Source RAM", 0, SV_IREG_WAVE_SOURCE, 0, 1, 0),
 SONICVIBES_SINGLE("SonicVibes Wave Source RAM+ROM", 0, SV_IREG_WAVE_SOURCE, 1, 1, 0),
@@ -1408,20 +1356,20 @@
 
 static int snd_sonicvibes_midi_input_open(mpu401_t * mpu)
 {
-	sonicvibes_t *sonic = snd_magic_cast(sonicvibes_t, mpu->private_data, return -EIO);
+	sonicvibes_t *sonic = mpu->private_data;
 	outb(sonic->irqmask &= ~SV_MIDI_MASK, SV_REG(sonic, IRQMASK));
 	return 0;
 }
 
 static void snd_sonicvibes_midi_input_close(mpu401_t * mpu)
 {
-	sonicvibes_t *sonic = snd_magic_cast(sonicvibes_t, mpu->private_data, return);
+	sonicvibes_t *sonic = mpu->private_data;
 	outb(sonic->irqmask |= SV_MIDI_MASK, SV_REG(sonic, IRQMASK));
 }
 
 static int __devinit snd_sonicvibes_midi(sonicvibes_t * sonic, snd_rawmidi_t * rmidi)
 {
-	mpu401_t * mpu = snd_magic_cast(mpu401_t, rmidi->private_data, return -ENXIO);
+	mpu401_t * mpu = rmidi->private_data;
 	snd_card_t *card = sonic->card;
 	snd_rawmidi_str_t *dir;
 	unsigned int idx;
@@ -1431,7 +1379,7 @@
 	mpu->open_input = snd_sonicvibes_midi_input_open;
 	mpu->close_input = snd_sonicvibes_midi_input_close;
 	dir = &rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT];
-	for (idx = 0; idx < SONICVIBES_MIDI_CONTROLS; idx++)
+	for (idx = 0; idx < ARRAY_SIZE(snd_sonicvibes_midi_controls); idx++)
 		if ((err = snd_ctl_add(card, snd_ctl_new1(&snd_sonicvibes_midi_controls[idx], sonic))) < 0)
 			return err;
 	return 0;
diff -Nru a/sound/pci/trident/trident.c b/sound/pci/trident/trident.c
--- a/sound/pci/trident/trident.c	2004-08-04 17:48:48 -07:00
+++ b/sound/pci/trident/trident.c	2004-08-04 17:48:48 -07:00
@@ -33,8 +33,7 @@
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>, <audio@tridentmicro.com>");
 MODULE_DESCRIPTION("Trident 4D-WaveDX/NX & SiS SI7018");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{Trident,4DWave DX},"
+MODULE_SUPPORTED_DEVICE("{{Trident,4DWave DX},"
 		"{Trident,4DWave NX},"
 		"{SiS,SI7018 PCI Audio},"
 		"{Best Union,Miss Melody 4DWave PCI},"
@@ -56,19 +55,14 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for Trident 4DWave PCI soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for Trident 4DWave PCI soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable Trident 4DWave PCI soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(pcm_channels, int, boot_devs, 0444);
 MODULE_PARM_DESC(pcm_channels, "Number of hardware channels assigned for PCM.");
-MODULE_PARM_SYNTAX(pcm_channels, SNDRV_ENABLED ",default:32,allows:{{1,32}}");
 module_param_array(wavetable_size, int, boot_devs, 0444);
 MODULE_PARM_DESC(wavetable_size, "Maximum memory size in kB for wavetable synth.");
-MODULE_PARM_SYNTAX(wavetable_size, SNDRV_ENABLED ",default:8192,skill:advanced");
 
 static struct pci_device_id snd_trident_ids[] = {
 	{ 0x1023, 0x2000, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },	/* Trident 4DWave DX PCI Audio */
diff -Nru a/sound/pci/trident/trident_main.c b/sound/pci/trident/trident_main.c
--- a/sound/pci/trident/trident_main.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/trident/trident_main.c	2004-08-04 17:48:49 -07:00
@@ -44,8 +44,6 @@
 
 #include <asm/io.h>
 
-#define chip_t trident_t
-
 static int snd_trident_pcm_mixer_build(trident_t *trident, snd_trident_voice_t * voice, snd_pcm_substream_t *substream);
 static int snd_trident_pcm_mixer_free(trident_t *trident, snd_trident_voice_t * voice, snd_pcm_substream_t *substream);
 static irqreturn_t snd_trident_interrupt(int irq, void *dev_id, struct pt_regs *regs);
@@ -119,7 +117,7 @@
 	unsigned int data = 0, treg;
 	unsigned short count = 0xffff;
 	unsigned long flags;
-	trident_t *trident = snd_magic_cast(trident_t, ac97->private_data, return -ENXIO);
+	trident_t *trident = ac97->private_data;
 
 	spin_lock_irqsave(&trident->reg_lock, flags);
 	if (trident->device == TRIDENT_DEVICE_ID_DX) {
@@ -178,7 +176,7 @@
 	unsigned int address, data;
 	unsigned short count = 0xffff;
 	unsigned long flags;
-	trident_t *trident = snd_magic_cast(trident_t, ac97->private_data, return);
+	trident_t *trident = ac97->private_data;
 
 	data = ((unsigned long) wdata) << 16;
 
@@ -908,7 +906,7 @@
 	snd_trident_voice_t *evoice = voice->extra;
 	snd_trident_pcm_mixer_t *mix = &trident->pcm_mixer[substream->number];
 
-	spin_lock(&trident->reg_lock);	
+	spin_lock_irq(&trident->reg_lock);	
 
 	/* set delta (rate) value */
 	voice->Delta = snd_trident_convert_rate(runtime->rate);
@@ -969,7 +967,7 @@
 		evoice->ESO = (runtime->period_size * 2) - 1;
 	}
 
-	spin_unlock(&trident->reg_lock);
+	spin_unlock_irq(&trident->reg_lock);
 
 	return 0;
 }
@@ -1010,7 +1008,7 @@
 	snd_trident_voice_t *voice = (snd_trident_voice_t *) runtime->private_data;
 	unsigned int val, ESO_bytes;
 
-	spin_lock(&trident->reg_lock);
+	spin_lock_irq(&trident->reg_lock);
 
 	// Initilize the channel and set channel Mode
 	outb(0, TRID_REG(trident, LEGACY_DMAR15));
@@ -1079,7 +1077,7 @@
 
 	snd_trident_write_voice_regs(trident, voice);
 
-	spin_unlock(&trident->reg_lock);
+	spin_unlock_irq(&trident->reg_lock);
 	return 0;
 }
 
@@ -1150,7 +1148,7 @@
 	snd_trident_voice_t *voice = (snd_trident_voice_t *) runtime->private_data;
 	snd_trident_voice_t *evoice = voice->extra;
 
-	spin_lock(&trident->reg_lock);
+	spin_lock_irq(&trident->reg_lock);
 
 	voice->LBA = runtime->dma_addr;
 	voice->Delta = snd_trident_convert_adc_rate(runtime->rate);
@@ -1199,7 +1197,7 @@
 		evoice->ESO = (runtime->period_size * 2) - 1;
 	}
 	
-	spin_unlock(&trident->reg_lock);
+	spin_unlock_irq(&trident->reg_lock);
 	return 0;
 }
 
@@ -1221,7 +1219,7 @@
 	snd_trident_voice_t *voice = (snd_trident_voice_t *) runtime->private_data;
 	snd_trident_voice_t *evoice = voice->extra;
 
-	spin_lock(&trident->reg_lock);
+	spin_lock_irq(&trident->reg_lock);
 
 	/* Set channel buffer Address */
 	if (voice->memblk)
@@ -1276,7 +1274,7 @@
 		evoice->ESO = (runtime->period_size * 2) - 1;
 	}
 
-	spin_unlock(&trident->reg_lock);
+	spin_unlock_irq(&trident->reg_lock);
 	return 0;
 }
 
@@ -1367,7 +1365,7 @@
 	unsigned int RESO, LBAO;
 	unsigned int temp;
 
-	spin_lock(&trident->reg_lock);
+	spin_lock_irq(&trident->reg_lock);
 
 	if (trident->device != TRIDENT_DEVICE_ID_SI7018) {
 
@@ -1479,7 +1477,7 @@
 		outl(temp, TRID_REG(trident, SI_SERIAL_INTF_CTRL));
 	}
 
-	spin_unlock(&trident->reg_lock);
+	spin_unlock_irq(&trident->reg_lock);
 
 	return 0;
 }
@@ -1526,7 +1524,7 @@
 	val = inl(TRID_REG(trident, T4D_STIMER)) & 0x00ffffff;
 	snd_pcm_group_for_each(pos, substream) {
 		s = snd_pcm_group_substream_entry(pos);
-		if ((trident_t *) _snd_pcm_chip(s->pcm) == trident) {
+		if ((trident_t *) snd_pcm_substream_chip(s) == trident) {
 			voice = (snd_trident_voice_t *) s->runtime->private_data;
 			evoice = voice->extra;
 			what |= 1 << (voice->number & 0x1f);
@@ -2127,21 +2125,21 @@
   ---------------------------------------------------------------------------*/
 static void snd_trident_pcm_free(snd_pcm_t *pcm)
 {
-	trident_t *trident = snd_magic_cast(trident_t, pcm->private_data, return);
+	trident_t *trident = pcm->private_data;
 	trident->pcm = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
 
 static void snd_trident_foldback_pcm_free(snd_pcm_t *pcm)
 {
-	trident_t *trident = snd_magic_cast(trident_t, pcm->private_data, return);
+	trident_t *trident = pcm->private_data;
 	trident->foldback = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
 
 static void snd_trident_spdif_pcm_free(snd_pcm_t *pcm)
 {
-	trident_t *trident = snd_magic_cast(trident_t, pcm->private_data, return);
+	trident_t *trident = pcm->private_data;
 	trident->spdif = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
@@ -2324,13 +2322,12 @@
 					 snd_ctl_elem_value_t * ucontrol)
 {
 	trident_t *trident = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	unsigned char val;
 
-	spin_lock_irqsave(&trident->reg_lock, flags);
+	spin_lock_irq(&trident->reg_lock);
 	val = trident->spdif_ctrl;
 	ucontrol->value.integer.value[0] = val == kcontrol->private_value;
-	spin_unlock_irqrestore(&trident->reg_lock, flags);
+	spin_unlock_irq(&trident->reg_lock);
 	return 0;
 }
 
@@ -2338,12 +2335,11 @@
 					 snd_ctl_elem_value_t * ucontrol)
 {
 	trident_t *trident = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	unsigned char val;
 	int change;
 
 	val = ucontrol->value.integer.value[0] ? (unsigned char) kcontrol->private_value : 0x00;
-	spin_lock_irqsave(&trident->reg_lock, flags);
+	spin_lock_irq(&trident->reg_lock);
 	/* S/PDIF C Channel bits 0-31 : 48khz, SCMS disabled */
 	change = trident->spdif_ctrl != val;
 	trident->spdif_ctrl = val;
@@ -2362,7 +2358,7 @@
 			outl(temp, TRID_REG(trident, SI_SERIAL_INTF_CTRL));
 		}
 	}
-	spin_unlock_irqrestore(&trident->reg_lock, flags);
+	spin_unlock_irq(&trident->reg_lock);
 	return change;
 }
 
@@ -2393,14 +2389,13 @@
 					 snd_ctl_elem_value_t * ucontrol)
 {
 	trident_t *trident = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 
-	spin_lock_irqsave(&trident->reg_lock, flags);
+	spin_lock_irq(&trident->reg_lock);
 	ucontrol->value.iec958.status[0] = (trident->spdif_bits >> 0) & 0xff;
 	ucontrol->value.iec958.status[1] = (trident->spdif_bits >> 8) & 0xff;
 	ucontrol->value.iec958.status[2] = (trident->spdif_bits >> 16) & 0xff;
 	ucontrol->value.iec958.status[3] = (trident->spdif_bits >> 24) & 0xff;
-	spin_unlock_irqrestore(&trident->reg_lock, flags);
+	spin_unlock_irq(&trident->reg_lock);
 	return 0;
 }
 
@@ -2408,7 +2403,6 @@
 					 snd_ctl_elem_value_t * ucontrol)
 {
 	trident_t *trident = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	unsigned int val;
 	int change;
 
@@ -2416,7 +2410,7 @@
 	      (ucontrol->value.iec958.status[1] << 8) |
 	      (ucontrol->value.iec958.status[2] << 16) |
 	      (ucontrol->value.iec958.status[3] << 24);
-	spin_lock_irqsave(&trident->reg_lock, flags);
+	spin_lock_irq(&trident->reg_lock);
 	change = trident->spdif_bits != val;
 	trident->spdif_bits = val;
 	if (trident->device != TRIDENT_DEVICE_ID_SI7018) {
@@ -2426,7 +2420,7 @@
 		if (trident->spdif == NULL)
 			outl(trident->spdif_bits, TRID_REG(trident, SI_SPDIF_CS));
 	}
-	spin_unlock_irqrestore(&trident->reg_lock, flags);
+	spin_unlock_irq(&trident->reg_lock);
 	return change;
 }
 
@@ -2488,14 +2482,13 @@
 					snd_ctl_elem_value_t * ucontrol)
 {
 	trident_t *trident = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 
-	spin_lock_irqsave(&trident->reg_lock, flags);
+	spin_lock_irq(&trident->reg_lock);
 	ucontrol->value.iec958.status[0] = (trident->spdif_pcm_bits >> 0) & 0xff;
 	ucontrol->value.iec958.status[1] = (trident->spdif_pcm_bits >> 8) & 0xff;
 	ucontrol->value.iec958.status[2] = (trident->spdif_pcm_bits >> 16) & 0xff;
 	ucontrol->value.iec958.status[3] = (trident->spdif_pcm_bits >> 24) & 0xff;
-	spin_unlock_irqrestore(&trident->reg_lock, flags);
+	spin_unlock_irq(&trident->reg_lock);
 	return 0;
 }
 
@@ -2503,7 +2496,6 @@
 					snd_ctl_elem_value_t * ucontrol)
 {
 	trident_t *trident = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	unsigned int val;
 	int change;
 
@@ -2511,7 +2503,7 @@
 	      (ucontrol->value.iec958.status[1] << 8) |
 	      (ucontrol->value.iec958.status[2] << 16) |
 	      (ucontrol->value.iec958.status[3] << 24);
-	spin_lock_irqsave(&trident->reg_lock, flags);
+	spin_lock_irq(&trident->reg_lock);
 	change = trident->spdif_pcm_bits != val;
 	trident->spdif_pcm_bits = val;
 	if (trident->spdif != NULL) {
@@ -2521,7 +2513,7 @@
 			outl(trident->spdif_bits, TRID_REG(trident, SI_SPDIF_CS));
 		}
 	}
-	spin_unlock_irqrestore(&trident->reg_lock, flags);
+	spin_unlock_irq(&trident->reg_lock);
 	return change;
 }
 
@@ -2554,13 +2546,12 @@
 					snd_ctl_elem_value_t * ucontrol)
 {
 	trident_t *trident = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	unsigned char val;
 
-	spin_lock_irqsave(&trident->reg_lock, flags);
+	spin_lock_irq(&trident->reg_lock);
 	val = trident->ac97_ctrl = inl(TRID_REG(trident, NX_ACR0_AC97_COM_STAT));
 	ucontrol->value.integer.value[0] = (val & (1 << kcontrol->private_value)) ? 1 : 0;
-	spin_unlock_irqrestore(&trident->reg_lock, flags);
+	spin_unlock_irq(&trident->reg_lock);
 	return 0;
 }
 
@@ -2568,11 +2559,10 @@
 					snd_ctl_elem_value_t * ucontrol)
 {
 	trident_t *trident = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	unsigned char val;
 	int change = 0;
 
-	spin_lock_irqsave(&trident->reg_lock, flags);
+	spin_lock_irq(&trident->reg_lock);
 	val = trident->ac97_ctrl = inl(TRID_REG(trident, NX_ACR0_AC97_COM_STAT));
 	val &= ~(1 << kcontrol->private_value);
 	if (ucontrol->value.integer.value[0])
@@ -2580,7 +2570,7 @@
 	change = val != trident->ac97_ctrl;
 	trident->ac97_ctrl = val;
 	outl(trident->ac97_ctrl = val, TRID_REG(trident, NX_ACR0_AC97_COM_STAT));
-	spin_unlock_irqrestore(&trident->reg_lock, flags);
+	spin_unlock_irq(&trident->reg_lock);
 	return change;
 }
 
@@ -2624,19 +2614,18 @@
 static int snd_trident_vol_control_put(snd_kcontrol_t * kcontrol,
 				       snd_ctl_elem_value_t * ucontrol)
 {
-	unsigned long flags;
 	trident_t *trident = snd_kcontrol_chip(kcontrol);
 	unsigned int val;
 	int change = 0;
 
-	spin_lock_irqsave(&trident->reg_lock, flags);
+	spin_lock_irq(&trident->reg_lock);
 	val = trident->musicvol_wavevol;
 	val &= ~(0xffff << kcontrol->private_value);
 	val |= ((255 - (ucontrol->value.integer.value[0] & 0xff)) |
 	        ((255 - (ucontrol->value.integer.value[1] & 0xff)) << 8)) << kcontrol->private_value;
 	change = val != trident->musicvol_wavevol;
 	outl(trident->musicvol_wavevol = val, TRID_REG(trident, T4D_MUSICVOL_WAVEVOL));
-	spin_unlock_irqrestore(&trident->reg_lock, flags);
+	spin_unlock_irq(&trident->reg_lock);
 	return change;
 }
 
@@ -2696,7 +2685,6 @@
 static int snd_trident_pcm_vol_control_put(snd_kcontrol_t * kcontrol,
 					   snd_ctl_elem_value_t * ucontrol)
 {
-	unsigned long flags;
 	trident_t *trident = snd_kcontrol_chip(kcontrol);
 	snd_trident_pcm_mixer_t *mix = &trident->pcm_mixer[snd_ctl_get_ioffnum(kcontrol, &ucontrol->id)];
 	unsigned int val;
@@ -2707,12 +2695,12 @@
 	} else {
 		val = (255 - (ucontrol->value.integer.value[0] & 255)) << 2;
 	}
-	spin_lock_irqsave(&trident->reg_lock, flags);
+	spin_lock_irq(&trident->reg_lock);
 	change = val != mix->vol;
 	mix->vol = val;
 	if (mix->voice != NULL)
 		snd_trident_write_vol_reg(trident, mix->voice, val);
-	spin_unlock_irqrestore(&trident->reg_lock, flags);
+	spin_unlock_irq(&trident->reg_lock);
 	return change;
 }
 
@@ -2760,7 +2748,6 @@
 static int snd_trident_pcm_pan_control_put(snd_kcontrol_t * kcontrol,
 					   snd_ctl_elem_value_t * ucontrol)
 {
-	unsigned long flags;
 	trident_t *trident = snd_kcontrol_chip(kcontrol);
 	snd_trident_pcm_mixer_t *mix = &trident->pcm_mixer[snd_ctl_get_ioffnum(kcontrol, &ucontrol->id)];
 	unsigned char val;
@@ -2770,12 +2757,12 @@
 		val = ucontrol->value.integer.value[0] & 0x3f;
 	else
 		val = (0x3f - (ucontrol->value.integer.value[0] & 0x3f)) | 0x40;
-	spin_lock_irqsave(&trident->reg_lock, flags);
+	spin_lock_irq(&trident->reg_lock);
 	change = val != mix->pan;
 	mix->pan = val;
 	if (mix->voice != NULL)
 		snd_trident_write_pan_reg(trident, mix->voice, val);
-	spin_unlock_irqrestore(&trident->reg_lock, flags);
+	spin_unlock_irq(&trident->reg_lock);
 	return change;
 }
 
@@ -2818,19 +2805,18 @@
 static int snd_trident_pcm_rvol_control_put(snd_kcontrol_t * kcontrol,
 					    snd_ctl_elem_value_t * ucontrol)
 {
-	unsigned long flags;
 	trident_t *trident = snd_kcontrol_chip(kcontrol);
 	snd_trident_pcm_mixer_t *mix = &trident->pcm_mixer[snd_ctl_get_ioffnum(kcontrol, &ucontrol->id)];
 	unsigned short val;
 	int change = 0;
 
 	val = 0x7f - (ucontrol->value.integer.value[0] & 0x7f);
-	spin_lock_irqsave(&trident->reg_lock, flags);
+	spin_lock_irq(&trident->reg_lock);
 	change = val != mix->rvol;
 	mix->rvol = val;
 	if (mix->voice != NULL)
 		snd_trident_write_rvol_reg(trident, mix->voice, val);
-	spin_unlock_irqrestore(&trident->reg_lock, flags);
+	spin_unlock_irq(&trident->reg_lock);
 	return change;
 }
 
@@ -2873,19 +2859,18 @@
 static int snd_trident_pcm_cvol_control_put(snd_kcontrol_t * kcontrol,
 					    snd_ctl_elem_value_t * ucontrol)
 {
-	unsigned long flags;
 	trident_t *trident = snd_kcontrol_chip(kcontrol);
 	snd_trident_pcm_mixer_t *mix = &trident->pcm_mixer[snd_ctl_get_ioffnum(kcontrol, &ucontrol->id)];
 	unsigned short val;
 	int change = 0;
 
 	val = 0x7f - (ucontrol->value.integer.value[0] & 0x7f);
-	spin_lock_irqsave(&trident->reg_lock, flags);
+	spin_lock_irq(&trident->reg_lock);
 	change = val != mix->cvol;
 	mix->cvol = val;
 	if (mix->voice != NULL)
 		snd_trident_write_cvol_reg(trident, mix->voice, val);
-	spin_unlock_irqrestore(&trident->reg_lock, flags);
+	spin_unlock_irq(&trident->reg_lock);
 	return change;
 }
 
@@ -2961,21 +2946,21 @@
 
 static int __devinit snd_trident_mixer(trident_t * trident, int pcm_spdif_device)
 {
-	ac97_bus_t _bus;
-	ac97_t _ac97;
+	ac97_template_t _ac97;
 	snd_card_t * card = trident->card;
 	snd_kcontrol_t *kctl;
 	snd_ctl_elem_value_t *uctl;
 	int idx, err, retries = 2;
+	static ac97_bus_ops_t ops = {
+		.write = snd_trident_codec_write,
+		.read = snd_trident_codec_read,
+	};
 
-	uctl = (snd_ctl_elem_value_t *)snd_kcalloc(sizeof(*uctl), GFP_KERNEL);
+	uctl = kcalloc(1, sizeof(*uctl), GFP_KERNEL);
 	if (!uctl)
 		return -ENOMEM;
 
-	memset(&_bus, 0, sizeof(_bus));
-	_bus.write = snd_trident_codec_write;
-	_bus.read = snd_trident_codec_read;
-	if ((err = snd_ac97_bus(trident->card, &_bus, &trident->ac97_bus)) < 0)
+	if ((err = snd_ac97_bus(trident->card, 0, &ops, NULL, &trident->ac97_bus)) < 0)
 		goto __out;
 
 	memset(&_ac97, 0, sizeof(_ac97));
@@ -3132,7 +3117,7 @@
 	trident_gameport_t *gp = (trident_gameport_t *)gameport;
 	trident_t *chip;
 	snd_assert(gp, return 0);
-	chip = snd_magic_cast(trident_t, gp->chip, return 0);
+	chip = gp->chip;
 	return inb(TRID_REG(chip, GAMEPORT_LEGACY));
 }
 
@@ -3141,7 +3126,7 @@
 	trident_gameport_t *gp = (trident_gameport_t *)gameport;
 	trident_t *chip;
 	snd_assert(gp, return);
-	chip = snd_magic_cast(trident_t, gp->chip, return);
+	chip = gp->chip;
 	outb(0xff, TRID_REG(chip, GAMEPORT_LEGACY));
 }
 
@@ -3152,7 +3137,7 @@
 	int i;
 
 	snd_assert(gp, return 0);
-	chip = snd_magic_cast(trident_t, gp->chip, return 0);
+	chip = gp->chip;
 
 	*buttons = (~inb(TRID_REG(chip, GAMEPORT_LEGACY)) >> 4) & 0xf;
 
@@ -3169,7 +3154,7 @@
 	trident_gameport_t *gp = (trident_gameport_t *)gameport;
 	trident_t *chip;
 	snd_assert(gp, return -1);
-	chip = snd_magic_cast(trident_t, gp->chip, return -1);
+	chip = gp->chip;
 
 	switch (mode) {
 		case GAMEPORT_MODE_COOKED:
@@ -3280,7 +3265,7 @@
 static void snd_trident_proc_read(snd_info_entry_t *entry, 
 				  snd_info_buffer_t * buffer)
 {
-	trident_t *trident = snd_magic_cast(trident_t, entry->private_data, return);
+	trident_t *trident = entry->private_data;
 	char *s;
 
 	switch (trident->device) {
@@ -3331,7 +3316,7 @@
 
 static int snd_trident_dev_free(snd_device_t *device)
 {
-	trident_t *trident = snd_magic_cast(trident_t, device->device_data, return -ENXIO);
+	trident_t *trident = device->device_data;
 	return snd_trident_free(trident);
 }
 
@@ -3354,7 +3339,8 @@
 	/* TLB array must be aligned to 16kB !!! so we allocate
 	   32kB region and correct offset when necessary */
 
-	if (snd_dma_alloc_pages(&trident->dma_dev, 2 * SNDRV_TRIDENT_MAX_PAGES * 4, &trident->tlb.buffer) < 0) {
+	if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(trident->pci),
+				2 * SNDRV_TRIDENT_MAX_PAGES * 4, &trident->tlb.buffer) < 0) {
 		snd_printk(KERN_ERR "trident: unable to allocate TLB buffer\n");
 		return -ENOMEM;
 	}
@@ -3367,7 +3353,8 @@
 		return -ENOMEM;
 	}
 	/* allocate and setup silent page and initialise TLB entries */
-	if (snd_dma_alloc_pages(&trident->dma_dev, SNDRV_TRIDENT_PAGE_SIZE, &trident->tlb.silent_page) < 0) {
+	if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(trident->pci),
+				SNDRV_TRIDENT_PAGE_SIZE, &trident->tlb.silent_page) < 0) {
 		snd_printk(KERN_ERR "trident: unable to allocate silent page\n");
 		return -ENOMEM;
 	}
@@ -3553,7 +3540,7 @@
 		return -ENXIO;
 	}
 	
-	trident = snd_magic_kcalloc(trident_t, 0, GFP_KERNEL);
+	trident = kcalloc(1, sizeof(*trident), GFP_KERNEL);
 	if (trident == NULL)
 		return -ENOMEM;
 	trident->device = (pci->vendor << 16) | pci->device;
@@ -3570,18 +3557,17 @@
 	if (max_wavetable_size < 0 )
 		max_wavetable_size = 0;
 	trident->synth.max_size = max_wavetable_size * 1024;
-	trident->port = pci_resource_start(pci, 0);
 	trident->irq = -1;
 
 	trident->midi_port = TRID_REG(trident, T4D_MPU401_BASE);
 	pci_set_master(pci);
-	trident->port = pci_resource_start(pci, 0);
 
-	if ((trident->res_port = request_region(trident->port, 0x100, "Trident Audio")) == NULL) {
-		snd_printk("unable to grab I/O region 0x%lx-0x%lx\n", trident->port, trident->port + 0x100 - 1);
-		snd_trident_free(trident);
-		return -EBUSY;
+	if ((err = pci_request_regions(pci, "Trident Audio")) < 0) {
+		kfree(trident);
+		return err;
 	}
+	trident->port = pci_resource_start(pci, 0);
+
 	if (request_irq(pci->irq, snd_trident_interrupt, SA_INTERRUPT|SA_SHIRQ, "Trident Audio", (void *) trident)) {
 		snd_printk("unable to grab IRQ %d\n", pci->irq);
 		snd_trident_free(trident);
@@ -3589,10 +3575,6 @@
 	}
 	trident->irq = pci->irq;
 
-	memset(&trident->dma_dev, 0, sizeof(trident->dma_dev));
-	trident->dma_dev.type = SNDRV_DMA_TYPE_DEV;
-	trident->dma_dev.dev = snd_dma_pci_data(pci);
-
 	/* allocate 16k-aligned TLB for NX cards */
 	trident->tlb.entries = NULL;
 	trident->tlb.buffer.area = NULL;
@@ -3692,18 +3674,15 @@
 		if (trident->tlb.memhdr)
 			snd_util_memhdr_free(trident->tlb.memhdr);
 		if (trident->tlb.silent_page.area)
-			snd_dma_free_pages(&trident->dma_dev, &trident->tlb.silent_page);
+			snd_dma_free_pages(&trident->tlb.silent_page);
 		if (trident->tlb.shadow_entries)
 			vfree(trident->tlb.shadow_entries);
-		snd_dma_free_pages(&trident->dma_dev, &trident->tlb.buffer);
+		snd_dma_free_pages(&trident->tlb.buffer);
 	}
 	if (trident->irq >= 0)
 		free_irq(trident->irq, (void *)trident);
-	if (trident->res_port) {
-		release_resource(trident->res_port);
-		kfree_nocheck(trident->res_port);
-	}
-	snd_magic_kfree(trident);
+	pci_release_regions(trident->pci);
+	kfree(trident);
 	return 0;
 }
 
@@ -3727,7 +3706,7 @@
 
 static irqreturn_t snd_trident_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	trident_t *trident = snd_magic_cast(trident_t, dev_id, return IRQ_NONE);
+	trident_t *trident = dev_id;
 	unsigned int audio_int, chn_int, stimer, channel, mask, tmp;
 	int delta;
 	snd_trident_voice_t *voice;
@@ -3950,7 +3929,7 @@
 #ifdef CONFIG_PM
 static int snd_trident_suspend(snd_card_t *card, unsigned int state)
 {
-	trident_t *trident = snd_magic_cast(trident_t, card->pm_private_data, return -EINVAL);
+	trident_t *trident = card->pm_private_data;
 
 	trident->in_suspend = 1;
 	snd_pcm_suspend_all(trident->pcm);
@@ -3976,7 +3955,7 @@
 
 static int snd_trident_resume(snd_card_t *card, unsigned int state)
 {
-	trident_t *trident = snd_magic_cast(trident_t, card->pm_private_data, return -EINVAL);
+	trident_t *trident = card->pm_private_data;
 
 	pci_enable_device(trident->pci);
 	if (pci_set_dma_mask(trident->pci, 0x3fffffff) < 0 ||
diff -Nru a/sound/pci/trident/trident_memory.c b/sound/pci/trident/trident_memory.c
--- a/sound/pci/trident/trident_memory.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/trident/trident_memory.c	2004-08-04 17:48:49 -07:00
@@ -25,6 +25,7 @@
 
 #include <sound/driver.h>
 #include <asm/io.h>
+#include <linux/pci.h>
 #include <linux/time.h>
 #include <sound/core.h>
 #include <sound/trident.h>
@@ -189,7 +190,7 @@
 	snd_util_memblk_t *blk;
 	snd_pcm_runtime_t *runtime = substream->runtime;
 	int idx, page;
-	struct snd_sg_buf *sgbuf = runtime->dma_private;
+	struct snd_sg_buf *sgbuf = snd_pcm_substream_sgbuf(substream);
 
 	snd_assert(runtime->dma_bytes > 0 && runtime->dma_bytes <= SNDRV_TRIDENT_MAX_PAGES * SNDRV_TRIDENT_PAGE_SIZE, return NULL);
 	hdr = trident->tlb.memhdr;
@@ -274,7 +275,7 @@
 {
 	snd_assert(trident != NULL, return NULL);
 	snd_assert(substream != NULL, return NULL);
-	if (substream->dma_device.type == SNDRV_DMA_TYPE_DEV_SG)
+	if (substream->dma_buffer.dev.type == SNDRV_DMA_TYPE_DEV_SG)
 		return snd_trident_alloc_sg_pages(trident, substream);
 	else
 		return snd_trident_alloc_cont_pages(trident, substream);
@@ -367,10 +368,12 @@
 	set_silent_tlb(trident, page);
 	if (ptr) {
 		struct snd_dma_buffer dmab;
+		dmab.dev.type = SNDRV_DMA_TYPE_DEV;
+		dmab.dev.dev = snd_dma_pci_data(trident->pci);
 		dmab.area = ptr;
 		dmab.addr = addr;
 		dmab.bytes = ALIGN_PAGE_SIZE;
-		snd_dma_free_pages(&trident->dma_dev, &dmab);
+		snd_dma_free_pages(&dmab);
 	}
 }
 
@@ -412,10 +415,11 @@
 	 * fortunately Trident page size and kernel PAGE_SIZE is identical!
 	 */
 	for (page = first_page; page <= last_page; page++) {
-		if (snd_dma_alloc_pages(&hw->dma_dev, ALIGN_PAGE_SIZE, &dmab) < 0)
+		if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(hw->pci),
+					ALIGN_PAGE_SIZE, &dmab) < 0)
 			goto __fail;
 		if (! is_valid_page(dmab.addr)) {
-			snd_dma_free_pages(&hw->dma_dev, &dmab);
+			snd_dma_free_pages(&dmab);
 			goto __fail;
 		}
 		set_tlb_bus(hw, page, (unsigned long)dmab.area, dmab.addr);
diff -Nru a/sound/pci/trident/trident_synth.c b/sound/pci/trident/trident_synth.c
--- a/sound/pci/trident/trident_synth.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/trident/trident_synth.c	2004-08-04 17:48:49 -07:00
@@ -23,6 +23,7 @@
 #include <asm/io.h>
 #include <linux/init.h>
 #include <linux/slab.h>
+#include <linux/pci.h>
 #include <sound/core.h>
 #include <sound/trident.h>
 #include <sound/seq_device.h>
@@ -506,7 +507,7 @@
 static int snd_trident_simple_put_sample(void *private_data, simple_instrument_t * instr,
 					 char __user *data, long len, int atomic)
 {
-	trident_t *trident = snd_magic_cast(trident_t, private_data, return -ENXIO);
+	trident_t *trident = private_data;
 	int size = instr->size;
 	int shift = 0;
 
@@ -540,12 +541,12 @@
 		instr->address.memory = memblk->offset;
 	} else {
 		struct snd_dma_buffer dmab;
-
-		if (snd_dma_alloc_pages(&trident->dma_dev, size, &dmab) < 0)
+		if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(trident->pci),
+					size, &dmab) < 0)
 			return -ENOMEM;
 
 		if (copy_from_user(dmab.area, data, size)) {
-			snd_dma_free_pages(&trident->dma_dev, &dmab);
+			snd_dma_free_pages(&dmab);
 			return -EFAULT;
 		}
 		instr->address.ptr = dmab.area;
@@ -559,7 +560,7 @@
 static int snd_trident_simple_get_sample(void *private_data, simple_instrument_t * instr,
 					 char __user *data, long len, int atomic)
 {
-	//trident_t *trident = snd_magic_cast(trident_t, private_data, return -ENXIO);
+	//trident_t *trident = private_data;
 	int size = instr->size;
 	int shift = 0;
 
@@ -580,9 +581,14 @@
 static int snd_trident_simple_remove_sample(void *private_data, simple_instrument_t * instr,
 					    int atomic)
 {
-	trident_t *trident = snd_magic_cast(trident_t, private_data, return -ENXIO);
+	trident_t *trident = private_data;
 	int size = instr->size;
 
+	if (instr->format & SIMPLE_WAVE_16BIT)
+		size <<= 1;
+	if (instr->format & SIMPLE_WAVE_STEREO)
+		size <<= 1;
+
 	if (trident->tlb.entries) {
 		snd_util_memblk_t *memblk = (snd_util_memblk_t*)instr->address.ptr;
 		if (memblk)
@@ -590,14 +596,15 @@
 		else
 			return -EFAULT;
 	} else {
-		kfree(instr->address.ptr);
+		struct snd_dma_buffer dmab;
+		dmab.dev.type = SNDRV_DMA_TYPE_DEV;
+		dmab.dev.dev = snd_dma_pci_data(trident->pci);
+		dmab.area = instr->address.ptr;
+		dmab.addr = instr->address.memory;
+		dmab.bytes = size;
+		snd_dma_free_pages(&dmab);
 	}
 
-	if (instr->format & SIMPLE_WAVE_16BIT)
-		size <<= 1;
-	if (instr->format & SIMPLE_WAVE_STEREO)
-		size <<= 1;
-
 	trident->synth.current_size -= size;
 	if (trident->synth.current_size < 0)	/* shouldn't need this check... */
 		trident->synth.current_size = 0;
@@ -838,7 +845,7 @@
 					   int what)
 {
 	int idx;
-	trident_t *trident = snd_magic_cast(trident_t, private_data, return);
+	trident_t *trident = private_data;
 	snd_trident_voice_t *pvoice;
 	unsigned long flags;
 
diff -Nru a/sound/pci/via82xx.c b/sound/pci/via82xx.c
--- a/sound/pci/via82xx.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/via82xx.c	2004-08-04 17:48:49 -07:00
@@ -67,8 +67,7 @@
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("VIA VT82xx audio");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{VIA,VT82C686A/B/C,pci},{VIA,VT8233A/C,8235}}");
+MODULE_SUPPORTED_DEVICE("{{VIA,VT82C686A/B/C,pci},{VIA,VT8233A/C,8235}}");
 
 #if defined(CONFIG_GAMEPORT) || (defined(MODULE) && defined(CONFIG_GAMEPORT_MODULE))
 #define SUPPORT_JOYSTICK 1
@@ -88,30 +87,22 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for VIA 82xx bridge.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for VIA 82xx bridge.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable audio part of VIA 82xx bridge.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(mpu_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(mpu_port, "MPU-401 port. (VT82C686x only)");
-MODULE_PARM_SYNTAX(mpu_port, SNDRV_PORT_DESC);
 #ifdef SUPPORT_JOYSTICK
 module_param_array(joystick, bool, boot_devs, 0444);
 MODULE_PARM_DESC(joystick, "Enable joystick. (VT82C686x only)");
-MODULE_PARM_SYNTAX(joystick, SNDRV_ENABLE_DESC "," SNDRV_BOOLEAN_FALSE_DESC);
 #endif
 module_param_array(ac97_clock, int, boot_devs, 0444);
 MODULE_PARM_DESC(ac97_clock, "AC'97 codec clock (default 48000Hz).");
-MODULE_PARM_SYNTAX(ac97_clock, SNDRV_ENABLED ",default:48000");
 module_param_array(ac97_quirk, int, boot_devs, 0444);
 MODULE_PARM_DESC(ac97_quirk, "AC'97 workaround for strange hardware.");
-MODULE_PARM_SYNTAX(ac97_quirk, SNDRV_ENABLED ",allows:{{-1,4}},dialog:list,default:-1");
 module_param_array(dxs_support, int, boot_devs, 0444);
 MODULE_PARM_DESC(dxs_support, "Support for DXS channels (0 = auto, 1 = enable, 2 = disable, 3 = 48k only, 4 = no VRA)");
-MODULE_PARM_SYNTAX(dxs_support, SNDRV_ENABLED ",allows:{{0,4}},dialog:list");
 
 
 /* pci ids */
@@ -318,7 +309,6 @@
 
 typedef struct _snd_via82xx via82xx_t;
 typedef struct via_dev viadev_t;
-#define chip_t via82xx_t
 
 /*
  * pcm stream
@@ -362,7 +352,6 @@
 	int irq;
 
 	unsigned long port;
-	struct resource *res_port;
 	struct resource *mpu_res;
 	int chip_type;
 	unsigned char revision;
@@ -375,7 +364,6 @@
 	unsigned char spdif_ctrl_saved;
 	unsigned char capture_src_saved[2];
 	unsigned int mpu_port_saved;
-	u32 pci_state[16];
 #endif
 
 	unsigned char playback_volume[4][2]; /* for VIA8233/C/8235; default = 0 */
@@ -405,8 +393,6 @@
 	spinlock_t ac97_lock;
 	snd_info_entry_t *proc_entry;
 
-	struct snd_dma_device dma_dev;
-
 #ifdef SUPPORT_JOYSTICK
 	struct gameport gameport;
 	struct resource *res_joystick;
@@ -441,7 +427,9 @@
 		/* the start of each lists must be aligned to 8 bytes,
 		 * but the kernel pages are much bigger, so we don't care
 		 */
-		if (snd_dma_alloc_pages(&chip->dma_dev, PAGE_ALIGN(VIA_TABLE_SIZE * 2 * 8), &dev->table) < 0)
+		if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(chip->pci),
+					PAGE_ALIGN(VIA_TABLE_SIZE * 2 * 8),
+					&dev->table) < 0)
 			return -ENOMEM;
 	}
 	if (! dev->idx_table) {
@@ -497,9 +485,8 @@
 static int clean_via_table(viadev_t *dev, snd_pcm_substream_t *substream,
 			   struct pci_dev *pci)
 {
-	via82xx_t *chip = snd_pcm_substream_chip(substream);
 	if (dev->table.area) {
-		snd_dma_free_pages(&chip->dma_dev, &dev->table);
+		snd_dma_free_pages(&dev->table);
 		dev->table.area = NULL;
 	}
 	if (dev->idx_table) {
@@ -556,7 +543,7 @@
  
 static void snd_via82xx_codec_wait(ac97_t *ac97)
 {
-	via82xx_t *chip = snd_magic_cast(via82xx_t, ac97->private_data, return);
+	via82xx_t *chip = ac97->private_data;
 	int err;
 	err = snd_via82xx_codec_ready(chip, ac97->num);
 	/* here we need to wait fairly for long time.. */
@@ -568,7 +555,7 @@
 				    unsigned short reg,
 				    unsigned short val)
 {
-	via82xx_t *chip = snd_magic_cast(via82xx_t, ac97->private_data, return);
+	via82xx_t *chip = ac97->private_data;
 	unsigned int xval;
 	
 	xval = !ac97->num ? VIA_REG_AC97_CODEC_ID_PRIMARY : VIA_REG_AC97_CODEC_ID_SECONDARY;
@@ -583,7 +570,7 @@
 
 static unsigned short snd_via82xx_codec_read(ac97_t *ac97, unsigned short reg)
 {
-	via82xx_t *chip = snd_magic_cast(via82xx_t, ac97->private_data, return ~0);
+	via82xx_t *chip = ac97->private_data;
 	unsigned int xval, val = 0xffff;
 	int again = 0;
 
@@ -632,11 +619,10 @@
 
 static irqreturn_t snd_via82xx_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	via82xx_t *chip = snd_magic_cast(via82xx_t, dev_id, return IRQ_NONE);
+	via82xx_t *chip = dev_id;
 	unsigned int status;
 	unsigned int i;
 
-	spin_lock(&chip->reg_lock);
 #if 0
 	/* FIXME: does it work on via823x? */
 	if (chip->chip_type != TYPE_VIA686)
@@ -644,7 +630,6 @@
 #endif
 	status = inl(VIAREG(chip, SGD_SHADOW));
 	if (! (status & chip->intr_mask)) {
-		spin_unlock(&chip->reg_lock);
 		if (chip->rmidi)
 			/* check mpu401 interrupt */
 			return snd_mpu401_uart_interrupt(irq, chip->rmidi->private_data, regs);
@@ -653,6 +638,7 @@
 // _skip_sgd:
 
 	/* check status for each stream */
+	spin_lock(&chip->reg_lock);
 	for (i = 0; i < chip->num_devs; i++) {
 		viadev_t *viadev = &chip->devs[i];
 		unsigned char c_status = inb(VIADEV_REG(viadev, OFFSET_STATUS));
@@ -720,6 +706,10 @@
 /*
  * calculate the linear position at the given sg-buffer index and the rest count
  */
+
+#define check_invalid_pos(viadev,pos) \
+	((pos) < viadev->lastpos && ((pos) >= viadev->bufsize2 || viadev->lastpos < viadev->bufsize2))
+
 static inline unsigned int calc_linear_pos(viadev_t *viadev, unsigned int idx, unsigned int count)
 {
 	unsigned int size, res;
@@ -728,17 +718,24 @@
 	res = viadev->idx_table[idx].offset + size - count;
 
 	/* check the validity of the calculated position */
-	if (size < count || (res < viadev->lastpos && (res >= viadev->bufsize2 || viadev->lastpos < viadev->bufsize2))) {
+	if (size < count) {
+		snd_printd(KERN_ERR "invalid via82xx_cur_ptr (size = %d, count = %d)\n", (int)size, (int)count);
+		res = viadev->lastpos;
+	} else if (check_invalid_pos(viadev, res)) {
 #ifdef POINTER_DEBUG
 		printk("fail: idx = %i/%i, lastpos = 0x%x, bufsize2 = 0x%x, offsize = 0x%x, size = 0x%x, count = 0x%x\n", idx, viadev->tbl_entries, viadev->lastpos, viadev->bufsize2, viadev->idx_table[idx].offset, viadev->idx_table[idx].size, count);
 #endif
-		/* count register returns full size when end of buffer is reached */
-		if (size != count) {
+		if (count && size < count) {
 			snd_printd(KERN_ERR "invalid via82xx_cur_ptr, using last valid pointer\n");
 			res = viadev->lastpos;
 		} else {
-			res = viadev->idx_table[idx].offset + size;
-			if (res < viadev->lastpos && (res >= viadev->bufsize2 || viadev->lastpos < viadev->bufsize2)) {
+			if (! count)
+				/* bogus count 0 on the DMA boundary? */
+				res = viadev->idx_table[idx].offset;
+			else
+				/* count register returns full size when end of buffer is reached */
+				res = viadev->idx_table[idx].offset + size;
+			if (check_invalid_pos(viadev, res)) {
 				snd_printd(KERN_ERR "invalid via82xx_cur_ptr (2), using last valid pointer\n");
 				res = viadev->lastpos;
 			}
@@ -904,7 +901,7 @@
 {
 	int changed = 0;
 
-	spin_lock(&rec->lock);
+	spin_lock_irq(&rec->lock);
 	if (rec->rate != rate) {
 		if (rec->rate && rec->used > 1) /* already set */
 			changed = -EINVAL;
@@ -913,7 +910,7 @@
 			changed = 1;
 		}
 	}
-	spin_unlock(&rec->lock);
+	spin_unlock_irq(&rec->lock);
 	return changed;
 }
 
@@ -1035,6 +1032,7 @@
 	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
 				 SNDRV_PCM_INFO_BLOCK_TRANSFER |
 				 SNDRV_PCM_INFO_MMAP_VALID |
+				 SNDRV_PCM_INFO_RESUME |
 				 SNDRV_PCM_INFO_PAUSE),
 	.formats =		SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S16_LE,
 	.rates =		SNDRV_PCM_RATE_48000,
@@ -1058,32 +1056,18 @@
 {
 	snd_pcm_runtime_t *runtime = substream->runtime;
 	int err;
-	unsigned long flags;
 	struct via_rate_lock *ratep;
-	struct ratetbl {
-		int rate;
-		unsigned int bit;
-	} ratebits[] = {
-		{8000, SNDRV_PCM_RATE_8000},
-		{11025, SNDRV_PCM_RATE_11025},
-		{16000, SNDRV_PCM_RATE_16000},
-		{22050, SNDRV_PCM_RATE_22050},
-		{32000, SNDRV_PCM_RATE_32000},
-		{44100, SNDRV_PCM_RATE_44100},
-		{48000, SNDRV_PCM_RATE_48000},
-	};
-	int i;
 
 	runtime->hw = snd_via82xx_hw;
 	
 	/* set the hw rate condition */
 	ratep = &chip->rates[viadev->direction];
-	spin_lock_irqsave(&ratep->lock, flags);
+	spin_lock_irq(&ratep->lock);
 	ratep->used++;
-	if (chip->spdif_on) {
-		runtime->hw.rates = SNDRV_PCM_RATE_32000|SNDRV_PCM_RATE_44100|SNDRV_PCM_RATE_48000;
-		runtime->hw.rate_min = 32000;
-		runtime->hw.rate_max = 48000;
+	if (chip->spdif_on && viadev->reg_offset == 0x30) {
+		/* DXS#3 and spdif is on */
+		runtime->hw.rates = chip->ac97->rates[AC97_RATES_SPDIF];
+		snd_pcm_limit_hw_rates(runtime);
 	} else if (chip->dxs_fixed && viadev->reg_offset < 0x40) {
 		/* fixed DXS playback rate */
 		runtime->hw.rates = SNDRV_PCM_RATE_48000;
@@ -1091,30 +1075,13 @@
 	} else if (! ratep->rate) {
 		int idx = viadev->direction ? AC97_RATES_ADC : AC97_RATES_FRONT_DAC;
 		runtime->hw.rates = chip->ac97->rates[idx];
-		for (i = 0; i < (int)ARRAY_SIZE(ratebits); i++) {
-			if (runtime->hw.rates & ratebits[i].bit) {
-				runtime->hw.rate_min = ratebits[i].rate;
-				break;
-			}
-		}
-		for (i = ARRAY_SIZE(ratebits) - 1; i >= 0; i--) {
-			if (runtime->hw.rates & ratebits[i].bit) {
-				runtime->hw.rate_max = ratebits[i].rate;
-				break;
-			}
-		}
+		snd_pcm_limit_hw_rates(runtime);
 	} else {
 		/* a fixed rate */
 		runtime->hw.rates = SNDRV_PCM_RATE_KNOT;
-		for (i = 0; i < (int)ARRAY_SIZE(ratebits); i++) {
-			if (ratep->rate == ratebits[i].rate) {
-				runtime->hw.rates = ratebits[i].bit;
-				break;
-			}
-		}
 		runtime->hw.rate_max = runtime->hw.rate_min = ratep->rate;
 	}
-	spin_unlock_irqrestore(&ratep->lock, flags);
+	spin_unlock_irq(&ratep->lock);
 
 	/* we may remove following constaint when we modify table entries
 	   in interrupt */
@@ -1188,16 +1155,15 @@
 {
 	via82xx_t *chip = snd_pcm_substream_chip(substream);
 	viadev_t *viadev = (viadev_t *)substream->runtime->private_data;
-	unsigned long flags;
 	struct via_rate_lock *ratep;
 
 	/* release the rate lock */
 	ratep = &chip->rates[viadev->direction];
-	spin_lock_irqsave(&ratep->lock, flags);
+	spin_lock_irq(&ratep->lock);
 	ratep->used--;
 	if (! ratep->used)
 		ratep->rate = 0;
-	spin_unlock_irqrestore(&ratep->lock, flags);
+	spin_unlock_irq(&ratep->lock);
 
 	viadev->substream = NULL;
 	return 0;
@@ -1363,6 +1329,10 @@
 							 snd_dma_pci_data(chip->pci), 64*1024, 128*1024)) < 0)
 		return err;
 
+	/* SPDIF supported? */
+	if (! ac97_can_spdif(chip->ac97))
+		return 0;
+
 	/* PCM #1:  DXS3 playback (for spdif) */
 	err = snd_pcm_new(chip->card, chip->card->shortname, 1, 1, 0, &pcm);
 	if (err < 0)
@@ -1446,17 +1416,16 @@
 {
 	via82xx_t *chip = snd_kcontrol_chip(kcontrol);
 	unsigned long port = chip->port + (kcontrol->id.index ? (VIA_REG_CAPTURE_CHANNEL + 0x10) : VIA_REG_CAPTURE_CHANNEL);
-	unsigned long flags;
 	u8 val, oval;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	oval = inb(port);
 	val = oval & ~VIA_REG_CAPTURE_CHANNEL_MIC;
 	if (ucontrol->value.enumerated.item[0])
 		val |= VIA_REG_CAPTURE_CHANNEL_MIC;
 	if (val != oval)
 		outb(val, port);
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	return val != oval;
 }
 
@@ -1567,13 +1536,13 @@
 
 static void snd_via82xx_mixer_free_ac97_bus(ac97_bus_t *bus)
 {
-	via82xx_t *chip = snd_magic_cast(via82xx_t, bus->private_data, return);
+	via82xx_t *chip = bus->private_data;
 	chip->ac97_bus = NULL;
 }
 
 static void snd_via82xx_mixer_free_ac97(ac97_t *ac97)
 {
-	via82xx_t *chip = snd_magic_cast(via82xx_t, ac97->private_data, return);
+	via82xx_t *chip = ac97->private_data;
 	chip->ac97 = NULL;
 }
 
@@ -1585,6 +1554,18 @@
 		.type = AC97_TUNE_HP_ONLY
 	},
 	{
+		.vendor = 0x1019,
+		.device = 0x0a81,
+		.name = "ECS K7VTA3",
+		.type = AC97_TUNE_HP_ONLY
+	},
+	{
+		.vendor = 0x1019,
+		.device = 0x0a85,
+		.name = "ECS L7VMM2",
+		.type = AC97_TUNE_HP_ONLY
+	},
+	{
 		.vendor = 0x1849,
 		.device = 0x3059,
 		.name = "ASRock K7VM2",
@@ -1613,19 +1594,18 @@
 
 static int __devinit snd_via82xx_mixer_new(via82xx_t *chip, int ac97_quirk)
 {
-	ac97_bus_t bus;
-	ac97_t ac97;
+	ac97_template_t ac97;
 	int err;
+	static ac97_bus_ops_t ops = {
+		.write = snd_via82xx_codec_write,
+		.read = snd_via82xx_codec_read,
+		.wait = snd_via82xx_codec_wait,
+	};
 
-	memset(&bus, 0, sizeof(bus));
-	bus.write = snd_via82xx_codec_write;
-	bus.read = snd_via82xx_codec_read;
-	bus.wait = snd_via82xx_codec_wait;
-	bus.private_data = chip;
-	bus.private_free = snd_via82xx_mixer_free_ac97_bus;
-	bus.clock = chip->ac97_clock;
-	if ((err = snd_ac97_bus(chip->card, &bus, &chip->ac97_bus)) < 0)
+	if ((err = snd_ac97_bus(chip->card, 0, &ops, chip, &chip->ac97_bus)) < 0)
 		return err;
+	chip->ac97_bus->private_free = snd_via82xx_mixer_free_ac97_bus;
+	chip->ac97_bus->clock = chip->ac97_clock;
 
 	memset(&ac97, 0, sizeof(ac97));
 	ac97.private_data = chip;
@@ -1660,9 +1640,11 @@
 		if (err < 0)
 			return err;
 	}
-	err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_via8233_dxs3_spdif_control, chip));
-	if (err < 0)
-		return err;
+	if (ac97_can_spdif(chip->ac97)) {
+		err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_via8233_dxs3_spdif_control, chip));
+		if (err < 0)
+			return err;
+	}
 	if (chip->chip_type != TYPE_VIA8233A) {
 		err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_via8233_dxs_volume_control, chip));
 		if (err < 0)
@@ -1672,6 +1654,7 @@
 	/* select spdif data slot 10/11 */
 	pci_read_config_byte(chip->pci, VIA8233_SPDIF_CTRL, &val);
 	val = (val & ~VIA8233_SPDIF_SLOT_MASK) | VIA8233_SPDIF_SLOT_1011;
+	val &= ~VIA8233_SPDIF_DX3; /* SPDIF off as default */
 	pci_write_config_byte(chip->pci, VIA8233_SPDIF_CTRL, val);
 
 	return 0;
@@ -1766,7 +1749,7 @@
  */
 static void snd_via82xx_proc_read(snd_info_entry_t *entry, snd_info_buffer_t *buffer)
 {
-	via82xx_t *chip = snd_magic_cast(via82xx_t, entry->private_data, return);
+	via82xx_t *chip = entry->private_data;
 	int i;
 	
 	snd_iprintf(buffer, "%s\n\n", chip->card->longname);
@@ -1903,7 +1886,7 @@
  */
 static int snd_via82xx_suspend(snd_card_t *card, unsigned int state)
 {
-	via82xx_t *chip = snd_magic_cast(via82xx_t, card->pm_private_data, return -EINVAL);
+	via82xx_t *chip = card->pm_private_data;
 	int i;
 
 	for (i = 0; i < 2; i++)
@@ -1921,7 +1904,6 @@
 		chip->capture_src_saved[1] = inb(chip->port + VIA_REG_CAPTURE_CHANNEL + 0x10);
 	}
 
-	pci_save_state(chip->pci, chip->pci_state);
 	pci_set_power_state(chip->pci, 3);
 	pci_disable_device(chip->pci);
 	snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
@@ -1930,11 +1912,10 @@
 
 static int snd_via82xx_resume(snd_card_t *card, unsigned int state)
 {
-	via82xx_t *chip = snd_magic_cast(via82xx_t, card->pm_private_data, return -EINVAL);
+	via82xx_t *chip = card->pm_private_data;
 	int idx, i;
 
 	pci_enable_device(chip->pci);
-	pci_restore_state(chip->pci, chip->pci_state);
 	pci_set_power_state(chip->pci, 0);
 
 	snd_via82xx_chip_init(chip);
@@ -1976,16 +1957,13 @@
 		snd_via82xx_channel_reset(chip, &chip->devs[i]);
 	synchronize_irq(chip->irq);
       __end_hw:
+	if (chip->irq >= 0)
+		free_irq(chip->irq, (void *)chip);
 	if (chip->mpu_res) {
 		release_resource(chip->mpu_res);
 		kfree_nocheck(chip->mpu_res);
 	}
-	if (chip->res_port) {
-		release_resource(chip->res_port);
-		kfree_nocheck(chip->res_port);
-	}
-	if (chip->irq >= 0)
-		free_irq(chip->irq, (void *)chip);
+	pci_release_regions(chip->pci);
 	if (chip->chip_type == TYPE_VIA686) {
 #ifdef SUPPORT_JOYSTICK
 		if (chip->res_joystick) {
@@ -1997,13 +1975,13 @@
 		pci_write_config_byte(chip->pci, VIA_FUNC_ENABLE, chip->old_legacy);
 		pci_write_config_byte(chip->pci, VIA_PNP_CONTROL, chip->old_legacy_cfg);
 	}
-	snd_magic_kfree(chip);
+	kfree(chip);
 	return 0;
 }
 
 static int snd_via82xx_dev_free(snd_device_t *device)
 {
-	via82xx_t *chip = snd_magic_cast(via82xx_t, device->device_data, return -ENXIO);
+	via82xx_t *chip = device->device_data;
 	return snd_via82xx_free(chip);
 }
 
@@ -2023,7 +2001,7 @@
 	if ((err = pci_enable_device(pci)) < 0)
 		return err;
 
-	if ((chip = snd_magic_kcalloc(via82xx_t, 0, GFP_KERNEL)) == NULL)
+	if ((chip = kcalloc(1, sizeof(*chip), GFP_KERNEL)) == NULL)
 		return -ENOMEM;
 
 	chip->chip_type = chip_type;
@@ -2037,19 +2015,14 @@
 	chip->pci = pci;
 	chip->irq = -1;
 
-	memset(&chip->dma_dev, 0, sizeof(chip->dma_dev));
-	chip->dma_dev.type = SNDRV_DMA_TYPE_DEV;
-	chip->dma_dev.dev = snd_dma_pci_data(pci);
-
 	pci_read_config_byte(pci, VIA_FUNC_ENABLE, &chip->old_legacy);
 	pci_read_config_byte(pci, VIA_PNP_CONTROL, &chip->old_legacy_cfg);
 
-	chip->port = pci_resource_start(pci, 0);
-	if ((chip->res_port = request_region(chip->port, 256, card->driver)) == NULL) {
-		snd_printk("unable to grab ports 0x%lx-0x%lx\n", chip->port, chip->port + 256 - 1);
-		snd_via82xx_free(chip);
-		return -EBUSY;
+	if ((err = pci_request_regions(pci, card->driver)) < 0) {
+		kfree(chip);
+		return err;
 	}
+	chip->port = pci_resource_start(pci, 0);
 	if (request_irq(pci->irq, snd_via82xx_interrupt, SA_INTERRUPT|SA_SHIRQ,
 			card->driver, (void *)chip)) {
 		snd_printk("unable to grab IRQ %d\n", pci->irq);
@@ -2111,9 +2084,12 @@
 		{ .vendor = 0x1005, .device = 0x4710, .action = VIA_DXS_ENABLE }, /* Avance Logic Mobo */
 		{ .vendor = 0x1019, .device = 0x0996, .action = VIA_DXS_48K },
 		{ .vendor = 0x1019, .device = 0x0a81, .action = VIA_DXS_NO_VRA }, /* ECS K7VTA3 v8.0 */
+		{ .vendor = 0x1019, .device = 0x0a85, .action = VIA_DXS_NO_VRA }, /* ECS L7VMM2 */
+		{ .vendor = 0x1025, .device = 0x0033, .action = VIA_DXS_NO_VRA }, /* Acer Inspire 1353LM */
 		{ .vendor = 0x1043, .device = 0x8095, .action = VIA_DXS_NO_VRA }, /* ASUS A7V8X (FIXME: possibly VIA_DXS_ENABLE?)*/
 		{ .vendor = 0x1043, .device = 0x80a1, .action = VIA_DXS_NO_VRA }, /* ASUS A7V8-X */
 		{ .vendor = 0x1043, .device = 0x80b0, .action = VIA_DXS_NO_VRA }, /* ASUS A7V600 & K8V*/ 
+		{ .vendor = 0x1071, .device = 0x8375, .action = VIA_DXS_NO_VRA }, /* Vobis/Yakumo/Mitac notebook */
 		{ .vendor = 0x10cf, .device = 0x118e, .action = VIA_DXS_ENABLE }, /* FSC laptop */
 		{ .vendor = 0x1106, .device = 0x4161, .action = VIA_DXS_NO_VRA }, /* ASRock K7VT2 */
 		{ .vendor = 0x1106, .device = 0xaa01, .action = VIA_DXS_NO_VRA }, /* EPIA MII */
diff -Nru a/sound/pci/vx222/vx222.c b/sound/pci/vx222/vx222.c
--- a/sound/pci/vx222/vx222.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/vx222/vx222.c	2004-08-04 17:48:49 -07:00
@@ -28,15 +28,12 @@
 #include <sound/initval.h>
 #include "vx222.h"
 
-#define chip_t vx_core_t
-
 #define CARD_NAME "VX222"
 
 MODULE_AUTHOR("Takashi Iwai <tiwai@suse.de>");
 MODULE_DESCRIPTION("Digigram VX222 V2/Mic");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{Digigram," CARD_NAME "}}");
+MODULE_SUPPORTED_DEVICE("{{Digigram," CARD_NAME "}}");
 
 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;	/* Index 0-MAX */
 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;	/* ID for this card */
@@ -47,19 +44,14 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for Digigram " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for Digigram " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable Digigram " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(mic, bool, boot_devs, 0444);
 MODULE_PARM_DESC(mic, "Enable Microphone.");
-MODULE_PARM_SYNTAX(mic, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC);
 module_param_array(ibl, int, boot_devs, 0444);
 MODULE_PARM_DESC(ibl, "Capture IBL size.");
-MODULE_PARM_SYNTAX(ibl, SNDRV_ENABLED);
 
 /*
  */
@@ -119,24 +111,19 @@
  */
 static int snd_vx222_free(vx_core_t *chip)
 {
-	int i;
 	struct snd_vx222 *vx = (struct snd_vx222 *)chip;
 
 	if (chip->irq >= 0)
 		free_irq(chip->irq, (void*)chip);
-	for (i = 0; i < 2; i++) {
-		if (vx->port_res[i]) {
-			release_resource(vx->port_res[i]);
-			kfree_nocheck(vx->port_res[i]);
-		}
-	}
-	snd_magic_kfree(chip);
+	if (vx->port[0])
+		pci_release_regions(vx->pci);
+	kfree(chip);
 	return 0;
 }
 
 static int snd_vx222_dev_free(snd_device_t *device)
 {
-	vx_core_t *chip = snd_magic_cast(vx_core_t, device->device_data, return -ENXIO);
+	vx_core_t *chip = device->device_data;
 	return snd_vx222_free(chip);
 }
 
@@ -164,21 +151,14 @@
 	if (! chip)
 		return -ENOMEM;
 	vx = (struct snd_vx222 *)chip;
+	vx->pci = pci;
 
-	for (i = 0; i < 2; i++) {
-		if (!(pci_resource_flags(pci, i + 1) & IORESOURCE_IO)) {
-			snd_printk(KERN_ERR "invalid i/o resource %d\n", i + 1);
-			snd_vx222_free(chip);
-			return -ENOMEM;
-		}
-		vx->port[i] = pci_resource_start(pci, i + 1);
-		if ((vx->port_res[i] = request_region(vx->port[i], 0x60,
-						      CARD_NAME)) == NULL) {
-			snd_printk(KERN_ERR "unable to grab port 0x%lx\n", vx->port[i]);
-			snd_vx222_free(chip);
-			return -EBUSY;
-		}
+	if ((err = pci_request_regions(pci, CARD_NAME)) < 0) {
+		snd_vx222_free(chip);
+		return err;
 	}
+	for (i = 0; i < 2; i++)
+		vx->port[i] = pci_resource_start(pci, i + 1);
 
 	if (request_irq(pci->irq, snd_vx_irq_handler, SA_INTERRUPT|SA_SHIRQ,
 			CARD_NAME, (void *) chip)) {
diff -Nru a/sound/pci/vx222/vx222.h b/sound/pci/vx222/vx222.h
--- a/sound/pci/vx222/vx222.h	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/vx222/vx222.h	2004-08-04 17:48:49 -07:00
@@ -28,8 +28,8 @@
 	vx_core_t core;
 
 	/* h/w config; for PLX and for DSP */
+	struct pci_dev *pci;
 	unsigned long port[2];
-	struct resource *port_res[2];
 
 	unsigned int regCDSP;	/* current CDSP register */
 	unsigned int regCFG;	/* current CFG register */
diff -Nru a/sound/pci/vx222/vx222_ops.c b/sound/pci/vx222/vx222_ops.c
--- a/sound/pci/vx222/vx222_ops.c	2004-08-04 17:48:48 -07:00
+++ b/sound/pci/vx222/vx222_ops.c	2004-08-04 17:48:48 -07:00
@@ -27,8 +27,6 @@
 #include <asm/io.h>
 #include "vx222.h"
 
-#define chip_t vx_core_t
-
 
 static int vx2_reg_offset[VX_REG_MAX] = {
 	[VX_ICR]    = 0x00,
diff -Nru a/sound/pci/ymfpci/ymfpci.c b/sound/pci/ymfpci/ymfpci.c
--- a/sound/pci/ymfpci/ymfpci.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/ymfpci/ymfpci.c	2004-08-04 17:48:49 -07:00
@@ -33,8 +33,7 @@
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("Yamaha DS-XG PCI");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{Yamaha,YMF724},"
+MODULE_SUPPORTED_DEVICE("{{Yamaha,YMF724},"
 		"{Yamaha,YMF724F},"
 		"{Yamaha,YMF740},"
 		"{Yamaha,YMF740C},"
@@ -54,27 +53,20 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for the Yamaha DS-XG PCI soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for the Yamaha DS-XG PCI soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable Yamaha DS-XG soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(mpu_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(mpu_port, "MPU-401 Port.");
-MODULE_PARM_SYNTAX(mpu_port, SNDRV_ENABLED);
 module_param_array(fm_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(fm_port, "FM OPL-3 Port.");
-MODULE_PARM_SYNTAX(fm_port, SNDRV_ENABLED);
 #ifdef SUPPORT_JOYSTICK
 module_param_array(joystick_port, long, boot_devs, 0444);
 MODULE_PARM_DESC(joystick_port, "Joystick port address");
-MODULE_PARM_SYNTAX(joystick_port, SNDRV_ENABLED);
 #endif
 module_param_array(rear_switch, bool, boot_devs, 0444);
 MODULE_PARM_DESC(rear_switch, "Enable shared rear/line-in switch");
-MODULE_PARM_SYNTAX(rear_switch, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC);
 
 static struct pci_device_id snd_ymfpci_ids[] = {
         { 0x1073, 0x0004, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },   /* YMF724 */
diff -Nru a/sound/pci/ymfpci/ymfpci_main.c b/sound/pci/ymfpci/ymfpci_main.c
--- a/sound/pci/ymfpci/ymfpci_main.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pci/ymfpci/ymfpci_main.c	2004-08-04 17:48:49 -07:00
@@ -42,8 +42,6 @@
 
 #include <asm/io.h>
 
-#define chip_t ymfpci_t
-
 /*
  *  constants
  */
@@ -102,7 +100,7 @@
 
 static void snd_ymfpci_codec_write(ac97_t *ac97, u16 reg, u16 val)
 {
-	ymfpci_t *chip = snd_magic_cast(ymfpci_t, ac97->private_data, return);
+	ymfpci_t *chip = ac97->private_data;
 	u32 cmd;
 	
 	snd_ymfpci_codec_ready(chip, 0);
@@ -112,7 +110,7 @@
 
 static u16 snd_ymfpci_codec_read(ac97_t *ac97, u16 reg)
 {
-	ymfpci_t *chip = snd_magic_cast(ymfpci_t, ac97->private_data, return -ENXIO);
+	ymfpci_t *chip = ac97->private_data;
 
 	if (snd_ymfpci_codec_ready(chip, 0))
 		return ~0;
@@ -330,7 +328,7 @@
 static void snd_ymfpci_pcm_capture_interrupt(snd_pcm_substream_t *substream)
 {
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	ymfpci_pcm_t *ypcm = snd_magic_cast(ymfpci_pcm_t, runtime->private_data, return);
+	ymfpci_pcm_t *ypcm = runtime->private_data;
 	ymfpci_t *chip = ypcm->chip;
 	u32 pos, delta;
 	
@@ -358,7 +356,7 @@
 				       int cmd)
 {
 	ymfpci_t *chip = snd_pcm_substream_chip(substream);
-	ymfpci_pcm_t *ypcm = snd_magic_cast(ymfpci_pcm_t, substream->runtime->private_data, return -ENXIO);
+	ymfpci_pcm_t *ypcm = substream->runtime->private_data;
 	int result = 0;
 
 	spin_lock(&chip->reg_lock);
@@ -395,7 +393,7 @@
 				      int cmd)
 {
 	ymfpci_t *chip = snd_pcm_substream_chip(substream);
-	ymfpci_pcm_t *ypcm = snd_magic_cast(ymfpci_pcm_t, substream->runtime->private_data, return -ENXIO);
+	ymfpci_pcm_t *ypcm = substream->runtime->private_data;
 	int result = 0;
 	u32 tmp;
 
@@ -541,7 +539,8 @@
 
 static int __devinit snd_ymfpci_ac3_init(ymfpci_t *chip)
 {
-	if (snd_dma_alloc_pages(&chip->dma_dev, 4096, &chip->ac3_tmp_base) < 0)
+	if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(chip->pci),
+				4096, &chip->ac3_tmp_base) < 0)
 		return -ENOMEM;
 
 	chip->bank_effect[3][0]->base =
@@ -568,7 +567,7 @@
 	spin_unlock_irq(&chip->reg_lock);
 	// snd_ymfpci_irq_wait(chip);
 	if (chip->ac3_tmp_base.area) {
-		snd_dma_free_pages(&chip->dma_dev, &chip->ac3_tmp_base);
+		snd_dma_free_pages(&chip->ac3_tmp_base);
 		chip->ac3_tmp_base.area = NULL;
 	}
 	return 0;
@@ -578,7 +577,7 @@
 					 snd_pcm_hw_params_t * hw_params)
 {
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	ymfpci_pcm_t *ypcm = snd_magic_cast(ymfpci_pcm_t, runtime->private_data, return -ENXIO);
+	ymfpci_pcm_t *ypcm = runtime->private_data;
 	int err;
 
 	if ((err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params))) < 0)
@@ -596,7 +595,7 @@
 	
 	if (runtime->private_data == NULL)
 		return 0;
-	ypcm = snd_magic_cast(ymfpci_pcm_t, runtime->private_data, return -ENXIO);
+	ypcm = runtime->private_data;
 
 	/* wait, until the PCI operations are not finished */
 	snd_ymfpci_irq_wait(chip);
@@ -616,7 +615,7 @@
 {
 	// ymfpci_t *chip = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	ymfpci_pcm_t *ypcm = snd_magic_cast(ymfpci_pcm_t, runtime->private_data, return -ENXIO);
+	ymfpci_pcm_t *ypcm = runtime->private_data;
 	unsigned int nvoice;
 
 	ypcm->period_size = runtime->period_size;
@@ -654,7 +653,7 @@
 {
 	ymfpci_t *chip = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	ymfpci_pcm_t *ypcm = snd_magic_cast(ymfpci_pcm_t, runtime->private_data, return -ENXIO);
+	ymfpci_pcm_t *ypcm = runtime->private_data;
 	snd_ymfpci_capture_bank_t * bank;
 	int nbank;
 	u32 rate, format;
@@ -698,7 +697,7 @@
 {
 	ymfpci_t *chip = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	ymfpci_pcm_t *ypcm = snd_magic_cast(ymfpci_pcm_t, runtime->private_data, return -ENXIO);
+	ymfpci_pcm_t *ypcm = runtime->private_data;
 	ymfpci_voice_t *voice = ypcm->voices[0];
 
 	if (!(ypcm->running && voice))
@@ -710,7 +709,7 @@
 {
 	ymfpci_t *chip = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	ymfpci_pcm_t *ypcm = snd_magic_cast(ymfpci_pcm_t, runtime->private_data, return -ENXIO);
+	ymfpci_pcm_t *ypcm = runtime->private_data;
 
 	if (!ypcm->running)
 		return 0;
@@ -736,7 +735,7 @@
 
 static irqreturn_t snd_ymfpci_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	ymfpci_t *chip = snd_magic_cast(ymfpci_t, dev_id, return IRQ_NONE);
+	ymfpci_t *chip = dev_id;
 	u32 status, nvoice, mode;
 	ymfpci_voice_t *voice;
 
@@ -830,10 +829,10 @@
 
 static void snd_ymfpci_pcm_free_substream(snd_pcm_runtime_t *runtime)
 {
-	ymfpci_pcm_t *ypcm = snd_magic_cast(ymfpci_pcm_t, runtime->private_data, return);
+	ymfpci_pcm_t *ypcm = runtime->private_data;
 	
 	if (ypcm)
-		snd_magic_kfree(ypcm);
+		kfree(ypcm);
 }
 
 static int snd_ymfpci_playback_open_1(snd_pcm_substream_t * substream)
@@ -842,7 +841,7 @@
 	snd_pcm_runtime_t *runtime = substream->runtime;
 	ymfpci_pcm_t *ypcm;
 
-	ypcm = snd_magic_kcalloc(ymfpci_pcm_t, 0, GFP_KERNEL);
+	ypcm = kcalloc(1, sizeof(*ypcm), GFP_KERNEL);
 	if (ypcm == NULL)
 		return -ENOMEM;
 	ypcm->chip = chip;
@@ -886,20 +885,19 @@
 	ymfpci_t *chip = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
 	ymfpci_pcm_t *ypcm;
-	unsigned long flags;
 	int err;
 	
 	if ((err = snd_ymfpci_playback_open_1(substream)) < 0)
 		return err;
-	ypcm = snd_magic_cast(ymfpci_pcm_t, runtime->private_data, return 0);
+	ypcm = runtime->private_data;
 	ypcm->output_front = 1;
 	ypcm->output_rear = chip->mode_dup4ch ? 1 : 0;
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	if (ypcm->output_rear) {
 		ymfpci_open_extension(chip);
 		chip->rear_opened++;
 	}
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	return 0;
 }
 
@@ -908,22 +906,21 @@
 	ymfpci_t *chip = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
 	ymfpci_pcm_t *ypcm;
-	unsigned long flags;
 	int err;
 	
 	if ((err = snd_ymfpci_playback_open_1(substream)) < 0)
 		return err;
-	ypcm = snd_magic_cast(ymfpci_pcm_t, runtime->private_data, return 0);
+	ypcm = runtime->private_data;
 	ypcm->output_front = 0;
 	ypcm->output_rear = 1;
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	snd_ymfpci_writew(chip, YDSXGR_SPDIFOUTCTRL,
 			  snd_ymfpci_readw(chip, YDSXGR_SPDIFOUTCTRL) | 2);
 	ymfpci_open_extension(chip);
 	chip->spdif_pcm_bits = chip->spdif_bits;
 	snd_ymfpci_writew(chip, YDSXGR_SPDIFOUTSTATUS, chip->spdif_pcm_bits);
 	chip->spdif_opened++;
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 
 	chip->spdif_pcm_ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE;
 	snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE |
@@ -936,18 +933,17 @@
 	ymfpci_t *chip = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
 	ymfpci_pcm_t *ypcm;
-	unsigned long flags;
 	int err;
 	
 	if ((err = snd_ymfpci_playback_open_1(substream)) < 0)
 		return err;
-	ypcm = snd_magic_cast(ymfpci_pcm_t, runtime->private_data, return 0);
+	ypcm = runtime->private_data;
 	ypcm->output_front = 0;
 	ypcm->output_rear = 1;
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	ymfpci_open_extension(chip);
 	chip->rear_opened++;
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	return 0;
 }
 
@@ -958,7 +954,7 @@
 	snd_pcm_runtime_t *runtime = substream->runtime;
 	ymfpci_pcm_t *ypcm;
 
-	ypcm = snd_magic_kcalloc(ymfpci_pcm_t, 0, GFP_KERNEL);
+	ypcm = kcalloc(1, sizeof(*ypcm), GFP_KERNEL);
 	if (ypcm == NULL)
 		return -ENOMEM;
 	ypcm->chip = chip;
@@ -993,30 +989,28 @@
 static int snd_ymfpci_playback_close(snd_pcm_substream_t * substream)
 {
 	ymfpci_t *chip = snd_pcm_substream_chip(substream);
-	ymfpci_pcm_t *ypcm = snd_magic_cast(ymfpci_pcm_t, substream->runtime->private_data, return -ENXIO);
-	unsigned long flags;
+	ymfpci_pcm_t *ypcm = substream->runtime->private_data;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	if (ypcm->output_rear && chip->rear_opened > 0) {
 		chip->rear_opened--;
 		ymfpci_close_extension(chip);
 	}
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	return snd_ymfpci_playback_close_1(substream);
 }
 
 static int snd_ymfpci_playback_spdif_close(snd_pcm_substream_t * substream)
 {
 	ymfpci_t *chip = snd_pcm_substream_chip(substream);
-	unsigned long flags;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	chip->spdif_opened = 0;
 	ymfpci_close_extension(chip);
 	snd_ymfpci_writew(chip, YDSXGR_SPDIFOUTCTRL,
 			  snd_ymfpci_readw(chip, YDSXGR_SPDIFOUTCTRL) & ~2);
 	snd_ymfpci_writew(chip, YDSXGR_SPDIFOUTSTATUS, chip->spdif_bits);
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	chip->spdif_pcm_ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE;
 	snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE |
 		       SNDRV_CTL_EVENT_MASK_INFO, &chip->spdif_pcm_ctl->id);
@@ -1026,14 +1020,13 @@
 static int snd_ymfpci_playback_4ch_close(snd_pcm_substream_t * substream)
 {
 	ymfpci_t *chip = snd_pcm_substream_chip(substream);
-	unsigned long flags;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	if (chip->rear_opened > 0) {
 		chip->rear_opened--;
 		ymfpci_close_extension(chip);
 	}
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	return snd_ymfpci_playback_close_1(substream);
 }
 
@@ -1041,7 +1034,7 @@
 {
 	ymfpci_t *chip = snd_pcm_substream_chip(substream);
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	ymfpci_pcm_t *ypcm = snd_magic_cast(ymfpci_pcm_t, runtime->private_data, return -ENXIO);
+	ymfpci_pcm_t *ypcm = runtime->private_data;
 
 	if (ypcm != NULL) {
 		chip->capture_substream[ypcm->capture_bank_number] = NULL;
@@ -1074,7 +1067,7 @@
 
 static void snd_ymfpci_pcm_free(snd_pcm_t *pcm)
 {
-	ymfpci_t *chip = snd_magic_cast(ymfpci_t, pcm->private_data, return);
+	ymfpci_t *chip = pcm->private_data;
 	chip->pcm = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
@@ -1120,7 +1113,7 @@
 
 static void snd_ymfpci_pcm2_free(snd_pcm_t *pcm)
 {
-	ymfpci_t *chip = snd_magic_cast(ymfpci_t, pcm->private_data, return);
+	ymfpci_t *chip = pcm->private_data;
 	chip->pcm2 = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
@@ -1166,7 +1159,7 @@
 
 static void snd_ymfpci_pcm_spdif_free(snd_pcm_t *pcm)
 {
-	ymfpci_t *chip = snd_magic_cast(ymfpci_t, pcm->private_data, return);
+	ymfpci_t *chip = pcm->private_data;
 	chip->pcm_spdif = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
@@ -1211,7 +1204,7 @@
 
 static void snd_ymfpci_pcm_4ch_free(snd_pcm_t *pcm)
 {
-	ymfpci_t *chip = snd_magic_cast(ymfpci_t, pcm->private_data, return);
+	ymfpci_t *chip = pcm->private_data;
 	chip->pcm_4ch = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
@@ -1254,12 +1247,11 @@
 					snd_ctl_elem_value_t * ucontrol)
 {
 	ymfpci_t *chip = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	ucontrol->value.iec958.status[0] = (chip->spdif_bits >> 0) & 0xff;
 	ucontrol->value.iec958.status[1] = (chip->spdif_bits >> 8) & 0xff;
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	return 0;
 }
 
@@ -1267,18 +1259,17 @@
 					 snd_ctl_elem_value_t * ucontrol)
 {
 	ymfpci_t *chip = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	unsigned int val;
 	int change;
 
 	val = ((ucontrol->value.iec958.status[0] & 0x3e) << 0) |
 	      (ucontrol->value.iec958.status[1] << 8);
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	change = chip->spdif_bits != val;
 	chip->spdif_bits = val;
 	if ((snd_ymfpci_readw(chip, YDSXGR_SPDIFOUTCTRL) & 1) && chip->pcm_spdif == NULL)
 		snd_ymfpci_writew(chip, YDSXGR_SPDIFOUTSTATUS, chip->spdif_bits);
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	return change;
 }
 
@@ -1302,12 +1293,11 @@
 				      snd_ctl_elem_value_t * ucontrol)
 {
 	ymfpci_t *chip = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	ucontrol->value.iec958.status[0] = 0x3e;
 	ucontrol->value.iec958.status[1] = 0xff;
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	return 0;
 }
 
@@ -1331,12 +1321,11 @@
 					snd_ctl_elem_value_t * ucontrol)
 {
 	ymfpci_t *chip = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	ucontrol->value.iec958.status[0] = (chip->spdif_pcm_bits >> 0) & 0xff;
 	ucontrol->value.iec958.status[1] = (chip->spdif_pcm_bits >> 8) & 0xff;
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	return 0;
 }
 
@@ -1344,18 +1333,17 @@
 					snd_ctl_elem_value_t * ucontrol)
 {
 	ymfpci_t *chip = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	unsigned int val;
 	int change;
 
 	val = ((ucontrol->value.iec958.status[0] & 0x3e) << 0) |
 	      (ucontrol->value.iec958.status[1] << 8);
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	change = chip->spdif_pcm_bits != val;
 	chip->spdif_pcm_bits = val;
 	if ((snd_ymfpci_readw(chip, YDSXGR_SPDIFOUTCTRL) & 2))
 		snd_ymfpci_writew(chip, YDSXGR_SPDIFOUTSTATUS, chip->spdif_pcm_bits);
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	return change;
 }
 
@@ -1385,12 +1373,11 @@
 static int snd_ymfpci_drec_source_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *value)
 {
 	ymfpci_t *chip = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	u16 reg;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	reg = snd_ymfpci_readw(chip, YDSXGR_GLOBALCTRL);
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	if (!(reg & 0x100))
 		value->value.enumerated.item[0] = 0;
 	else
@@ -1401,17 +1388,16 @@
 static int snd_ymfpci_drec_source_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *value)
 {
 	ymfpci_t *chip = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	u16 reg, old_reg;
 
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	old_reg = snd_ymfpci_readw(chip, YDSXGR_GLOBALCTRL);
 	if (value->value.enumerated.item[0] == 0)
 		reg = old_reg & ~0x100;
 	else
 		reg = (old_reg & ~0x300) | 0x100 | ((value->value.enumerated.item[0] == 2) << 9);
 	snd_ymfpci_writew(chip, YDSXGR_GLOBALCTRL, reg);
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	return reg != old_reg;
 }
 
@@ -1470,7 +1456,6 @@
 static int snd_ymfpci_put_single(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
 	ymfpci_t *chip = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	int reg = kcontrol->private_value;
 	unsigned int shift = 0, mask = 1, invert = 0;
 	int change;
@@ -1485,12 +1470,12 @@
 	if (invert)
 		val = mask - val;
 	val <<= shift;
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	oval = snd_ymfpci_readl(chip, reg);
 	val = (oval & ~(mask << shift)) | val;
 	change = val != oval;
 	snd_ymfpci_writel(chip, reg, val);
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	return change;
 }
 
@@ -1517,16 +1502,15 @@
 static int snd_ymfpci_get_double(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
 	ymfpci_t *chip = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	unsigned int reg = kcontrol->private_value;
 	unsigned int shift_left = 0, shift_right = 16, mask = 16383, invert = 0;
 	unsigned int val;
 	
 	if (reg < 0x80 || reg >= 0xc0)
 		return -EINVAL;
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	val = snd_ymfpci_readl(chip, reg);
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	ucontrol->value.integer.value[0] = (val >> shift_left) & mask;
 	ucontrol->value.integer.value[1] = (val >> shift_right) & mask;
 	if (invert) {
@@ -1539,7 +1523,6 @@
 static int snd_ymfpci_put_double(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
 {
 	ymfpci_t *chip = snd_kcontrol_chip(kcontrol);
-	unsigned long flags;
 	unsigned int reg = kcontrol->private_value;
 	unsigned int shift_left = 0, shift_right = 16, mask = 16383, invert = 0;
 	int change;
@@ -1555,12 +1538,12 @@
 	}
 	val1 <<= shift_left;
 	val2 <<= shift_right;
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	oval = snd_ymfpci_readl(chip, reg);
 	val1 = (oval & ~((mask << shift_left) | (mask << shift_right))) | val1 | val2;
 	change = val1 != oval;
 	snd_ymfpci_writel(chip, reg, val1);
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 	return change;
 }
 
@@ -1594,8 +1577,6 @@
 }
 
 
-#define YMFPCI_CONTROLS (sizeof(snd_ymfpci_controls)/sizeof(snd_kcontrol_new_t))
-
 static snd_kcontrol_new_t snd_ymfpci_controls[] __devinitdata = {
 YMFPCI_DOUBLE("Wave Playback Volume", 0, YDSXGR_NATIVEDACOUTVOL),
 YMFPCI_DOUBLE("Wave Capture Volume", 0, YDSXGR_NATIVEDACLOOPVOL),
@@ -1709,31 +1690,30 @@
 
 static void snd_ymfpci_mixer_free_ac97_bus(ac97_bus_t *bus)
 {
-	ymfpci_t *chip = snd_magic_cast(ymfpci_t, bus->private_data, return);
+	ymfpci_t *chip = bus->private_data;
 	chip->ac97_bus = NULL;
 }
 
 static void snd_ymfpci_mixer_free_ac97(ac97_t *ac97)
 {
-	ymfpci_t *chip = snd_magic_cast(ymfpci_t, ac97->private_data, return);
+	ymfpci_t *chip = ac97->private_data;
 	chip->ac97 = NULL;
 }
 
 int __devinit snd_ymfpci_mixer(ymfpci_t *chip, int rear_switch)
 {
-	ac97_bus_t bus;
-	ac97_t ac97;
+	ac97_template_t ac97;
 	snd_kcontrol_t *kctl;
 	unsigned int idx;
 	int err;
+	static ac97_bus_ops_t ops = {
+		.write = snd_ymfpci_codec_write,
+		.read = snd_ymfpci_codec_read,
+	};
 
-	memset(&bus, 0, sizeof(bus));
-	bus.write = snd_ymfpci_codec_write;
-	bus.read = snd_ymfpci_codec_read;
-	bus.private_data = chip;
-	bus.private_free = snd_ymfpci_mixer_free_ac97_bus;
-	if ((err = snd_ac97_bus(chip->card, &bus, &chip->ac97_bus)) < 0)
+	if ((err = snd_ac97_bus(chip->card, 0, &ops, chip, &chip->ac97_bus)) < 0)
 		return err;
+	chip->ac97_bus->private_free = snd_ymfpci_mixer_free_ac97_bus;
 
 	memset(&ac97, 0, sizeof(ac97));
 	ac97.private_data = chip;
@@ -1741,7 +1721,7 @@
 	if ((err = snd_ac97_mixer(chip->ac97_bus, &ac97, &chip->ac97)) < 0)
 		return err;
 
-	for (idx = 0; idx < YMFPCI_CONTROLS; idx++) {
+	for (idx = 0; idx < ARRAY_SIZE(snd_ymfpci_controls); idx++) {
 		if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_ymfpci_controls[idx], chip))) < 0)
 			return err;
 	}
@@ -1854,7 +1834,7 @@
 static void snd_ymfpci_proc_read(snd_info_entry_t *entry, 
 				 snd_info_buffer_t * buffer)
 {
-	ymfpci_t *chip = snd_magic_cast(ymfpci_t, entry->private_data, return);
+	ymfpci_t *chip = entry->private_data;
 	int i;
 	
 	snd_iprintf(buffer, "YMFPCI\n\n");
@@ -1975,7 +1955,8 @@
 	       chip->work_size;
 	/* work_ptr must be aligned to 256 bytes, but it's already
 	   covered with the kernel page allocation mechanism */
-	if (snd_dma_alloc_pages(&chip->dma_dev, size, &chip->work_ptr) < 0) 
+	if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(chip->pci),
+				size, &chip->work_ptr) < 0) 
 		return -ENOMEM;
 	ptr = chip->work_ptr.area;
 	ptr_addr = chip->work_ptr.addr;
@@ -2106,7 +2087,7 @@
 	if (chip->reg_area_virt)
 		iounmap((void *)chip->reg_area_virt);
 	if (chip->work_ptr.area)
-		snd_dma_free_pages(&chip->dma_dev, &chip->work_ptr);
+		snd_dma_free_pages(&chip->work_ptr);
 	
 	if (chip->irq >= 0)
 		free_irq(chip->irq, (void *)chip);
@@ -2117,13 +2098,13 @@
 
 	pci_write_config_word(chip->pci, 0x40, chip->old_legacy_ctrl);
 	
-	snd_magic_kfree(chip);
+	kfree(chip);
 	return 0;
 }
 
 static int snd_ymfpci_dev_free(snd_device_t *device)
 {
-	ymfpci_t *chip = snd_magic_cast(ymfpci_t, device->device_data, return -ENXIO);
+	ymfpci_t *chip = device->device_data;
 	return snd_ymfpci_free(chip);
 }
 
@@ -2159,7 +2140,7 @@
 
 static int snd_ymfpci_suspend(snd_card_t *card, unsigned int state)
 {
-	ymfpci_t *chip = snd_magic_cast(ymfpci_t, card->pm_private_data, return -EINVAL);
+	ymfpci_t *chip = card->pm_private_data;
 	unsigned int i;
 	
 	snd_pcm_suspend_all(chip->pcm);
@@ -2178,7 +2159,7 @@
 
 static int snd_ymfpci_resume(snd_card_t *card, unsigned int state)
 {
-	ymfpci_t *chip = snd_magic_cast(ymfpci_t, card->pm_private_data, return -EINVAL);
+	ymfpci_t *chip = card->pm_private_data;
 	unsigned int i;
 
 	pci_enable_device(chip->pci);
@@ -2195,11 +2176,10 @@
 
 	/* start hw again */
 	if (chip->start_count > 0) {
-		unsigned long flags;
-		spin_lock_irqsave(&chip->reg_lock, flags);
+		spin_lock_irq(&chip->reg_lock);
 		snd_ymfpci_writel(chip, YDSXGR_MODE, chip->saved_ydsxgr_mode);
 		chip->active_bank = snd_ymfpci_readl(chip, YDSXGR_CTRLSELECT);
-		spin_unlock_irqrestore(&chip->reg_lock, flags);
+		spin_unlock_irq(&chip->reg_lock);
 	}
 	snd_power_change_state(card, SNDRV_CTL_POWER_D0);
 	return 0;
@@ -2223,7 +2203,7 @@
 	if ((err = pci_enable_device(pci)) < 0)
 		return err;
 
-	chip = snd_magic_kcalloc(ymfpci_t, 0, GFP_KERNEL);
+	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
 	if (chip == NULL)
 		return -ENOMEM;
 	chip->old_legacy_ctrl = old_legacy_ctrl;
@@ -2251,10 +2231,6 @@
 		return -EBUSY;
 	}
 	chip->irq = pci->irq;
-
-	memset(&chip->dma_dev, 0, sizeof(chip->dma_dev));
-	chip->dma_dev.type = SNDRV_DMA_TYPE_DEV;
-	chip->dma_dev.dev = snd_dma_pci_data(pci);
 
 	snd_ymfpci_aclink_reset(pci);
 	if (snd_ymfpci_codec_ready(chip, 0) < 0) {
diff -Nru a/sound/pcmcia/pdaudiocf/pdaudiocf.c b/sound/pcmcia/pdaudiocf/pdaudiocf.c
--- a/sound/pcmcia/pdaudiocf/pdaudiocf.c	2004-08-04 17:48:48 -07:00
+++ b/sound/pcmcia/pdaudiocf/pdaudiocf.c	2004-08-04 17:48:48 -07:00
@@ -37,8 +37,7 @@
 MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
 MODULE_DESCRIPTION("Sound Core " CARD_NAME);
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{Sound Core," CARD_NAME "}}");
+MODULE_SUPPORTED_DEVICE("{{Sound Core," CARD_NAME "}}");
 
 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;	/* Index 0-MAX */
 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;	/* ID for this card */
@@ -49,13 +48,10 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param(irq_mask, int, 0444);
 MODULE_PARM_DESC(irq_mask, "IRQ bitmask for " CARD_NAME " soundcard.");
 module_param_array(irq_list, int, boot_devs, 0444);
@@ -103,13 +99,13 @@
 	card_list[pdacf->index] = NULL;
 	pdacf->card = NULL;
 
-	snd_magic_kfree(pdacf);
+	kfree(pdacf);
 	return 0;
 }
 
 static int snd_pdacf_dev_free(snd_device_t *device)
 {
-	pdacf_t *chip = snd_magic_cast(pdacf_t, device->device_data, return -ENXIO);
+	pdacf_t *chip = device->device_data;
 	return snd_pdacf_free(chip);
 }
 
@@ -152,7 +148,7 @@
 		return NULL;
 
 	if (snd_device_new(card, SNDRV_DEV_LOWLEVEL, pdacf, &ops) < 0) {
-		snd_magic_kfree(pdacf);
+		kfree(pdacf);
 		snd_card_free(card);
 		return NULL;
 	}
@@ -258,7 +254,7 @@
  */
 static void snd_pdacf_detach(dev_link_t *link)
 {
-	pdacf_t *chip = snd_magic_cast(pdacf_t, link->priv, return);
+	pdacf_t *chip = link->priv;
 
 	snd_printdd(KERN_DEBUG "pdacf_detach called\n");
 	/* Remove the interface data from the linked list */
@@ -297,7 +293,7 @@
 static void pdacf_config(dev_link_t *link)
 {
 	client_handle_t handle = link->handle;
-	pdacf_t *pdacf = snd_magic_cast(pdacf_t, link->priv, return);
+	pdacf_t *pdacf = link->priv;
 	tuple_t tuple;
 	cisparse_t parse;
 	config_info_t conf;
diff -Nru a/sound/pcmcia/pdaudiocf/pdaudiocf_core.c b/sound/pcmcia/pdaudiocf/pdaudiocf_core.c
--- a/sound/pcmcia/pdaudiocf/pdaudiocf_core.c	2004-08-04 17:48:48 -07:00
+++ b/sound/pcmcia/pdaudiocf/pdaudiocf_core.c	2004-08-04 17:48:48 -07:00
@@ -30,7 +30,7 @@
  */
 unsigned char pdacf_ak4117_read(void *private_data, unsigned char reg)
 {
-	pdacf_t *chip = snd_magic_cast(pdacf_t, private_data, return 0);
+	pdacf_t *chip = private_data;
 	unsigned long timeout;
 	unsigned long flags;
 	unsigned char res;
@@ -62,7 +62,7 @@
 
 void pdacf_ak4117_write(void *private_data, unsigned char reg, unsigned char val)
 {
-	pdacf_t *chip = snd_magic_cast(pdacf_t, private_data, return);
+	pdacf_t *chip = private_data;
 	unsigned long timeout;
 	unsigned long flags;
 
@@ -130,7 +130,7 @@
 static void pdacf_proc_read(snd_info_entry_t * entry,
                             snd_info_buffer_t * buffer)
 {
-	pdacf_t *chip = snd_magic_cast(pdacf_t, entry->private_data, return);
+	pdacf_t *chip = entry->private_data;
 	u16 tmp;
 
 	snd_iprintf(buffer, "PDAudioCF\n\n");
@@ -151,7 +151,7 @@
 {
 	pdacf_t *chip;
 
-	chip = snd_magic_kcalloc(pdacf_t, 0, GFP_KERNEL);
+	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
 	if (chip == NULL)
 		return NULL;
 	chip->card = card;
@@ -257,7 +257,7 @@
 
 int snd_pdacf_suspend(snd_card_t *card, unsigned int state)
 {
-	pdacf_t *chip = snd_magic_cast(pdacf_t, card->pm_private_data, return -EINVAL);
+	pdacf_t *chip = card->pm_private_data;
 	u16 val;
 	
 	snd_pcm_suspend_all(chip->pcm);
@@ -278,7 +278,7 @@
 
 int snd_pdacf_resume(snd_card_t *card, unsigned int state)
 {
-	pdacf_t *chip = snd_magic_cast(pdacf_t, card->pm_private_data, return -EINVAL);
+	pdacf_t *chip = card->pm_private_data;
 	int timeout = 40;
 
 	pdacf_reinit(chip, 1);
diff -Nru a/sound/pcmcia/pdaudiocf/pdaudiocf_irq.c b/sound/pcmcia/pdaudiocf/pdaudiocf_irq.c
--- a/sound/pcmcia/pdaudiocf/pdaudiocf_irq.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pcmcia/pdaudiocf/pdaudiocf_irq.c	2004-08-04 17:48:49 -07:00
@@ -28,7 +28,7 @@
  */
 irqreturn_t pdacf_interrupt(int irq, void *dev, struct pt_regs *regs)
 {
-	pdacf_t *chip = snd_magic_cast(pdacf_t, dev, return IRQ_NONE);
+	pdacf_t *chip = dev;
 	unsigned short stat;
 
 	if ((chip->chip_status & (PDAUDIOCF_STAT_IS_STALE|
@@ -258,7 +258,7 @@
 
 void pdacf_tasklet(unsigned long private_data)
 {
-	pdacf_t *chip = snd_magic_cast(pdacf_t, (void *)private_data, return);
+	pdacf_t *chip = (pdacf_t *) private_data;
 	int size, off, cont, rdp, wdp;
 
 	if ((chip->chip_status & (PDAUDIOCF_STAT_IS_STALE|PDAUDIOCF_STAT_IS_CONFIGURED)) != PDAUDIOCF_STAT_IS_CONFIGURED)
diff -Nru a/sound/pcmcia/pdaudiocf/pdaudiocf_pcm.c b/sound/pcmcia/pdaudiocf/pdaudiocf_pcm.c
--- a/sound/pcmcia/pdaudiocf/pdaudiocf_pcm.c	2004-08-04 17:48:49 -07:00
+++ b/sound/pcmcia/pdaudiocf/pdaudiocf_pcm.c	2004-08-04 17:48:49 -07:00
@@ -28,8 +28,6 @@
 #include <sound/asoundef.h>
 #include "pdaudiocf.h"
 
-#define chip_t	pdacf_t
-
 
 /*
  * we use a vmalloc'ed (sg-)buffer
@@ -331,7 +329,7 @@
  */
 static void snd_pdacf_pcm_free(snd_pcm_t *pcm)
 {
-	pdacf_t *chip = snd_magic_cast(pdacf_t, pcm->private_data, return);
+	pdacf_t *chip = pcm->private_data;
 	chip->pcm = NULL;
 }
 
diff -Nru a/sound/pcmcia/vx/vx_entry.c b/sound/pcmcia/vx/vx_entry.c
--- a/sound/pcmcia/vx/vx_entry.c	2004-08-04 17:48:48 -07:00
+++ b/sound/pcmcia/vx/vx_entry.c	2004-08-04 17:48:48 -07:00
@@ -69,13 +69,13 @@
 		hw->card_list[vxp->index] = NULL;
 	chip->card = NULL;
 
-	snd_magic_kfree(chip);
+	kfree(chip);
 	return 0;
 }
 
 static int snd_vxpocket_dev_free(snd_device_t *device)
 {
-	vx_core_t *chip = snd_magic_cast(vx_core_t, device->device_data, return -ENXIO);
+	vx_core_t *chip = device->device_data;
 	return snd_vxpocket_free(chip);
 }
 
@@ -121,7 +121,7 @@
 		return NULL;
 
 	if (snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops) < 0) {
-		snd_magic_kfree(chip);
+		kfree(chip);
 		snd_card_free(card);
 		return NULL;
 	}
@@ -226,7 +226,7 @@
  */
 void snd_vxpocket_detach(struct snd_vxp_entry *hw, dev_link_t *link)
 {
-	vx_core_t *chip = snd_magic_cast(vx_core_t, link->priv, return);
+	vx_core_t *chip = link->priv;
 
 	snd_printdd(KERN_DEBUG "vxpocket_detach called\n");
 	/* Remove the interface data from the linked list */
@@ -263,7 +263,7 @@
 static void vxpocket_config(dev_link_t *link)
 {
 	client_handle_t handle = link->handle;
-	vx_core_t *chip = snd_magic_cast(vx_core_t, link->priv, return);
+	vx_core_t *chip = link->priv;
 	struct snd_vxpocket *vxp = (struct snd_vxpocket *)chip;
 	tuple_t tuple;
 	cisparse_t parse;
diff -Nru a/sound/pcmcia/vx/vxp_mixer.c b/sound/pcmcia/vx/vxp_mixer.c
--- a/sound/pcmcia/vx/vxp_mixer.c	2004-08-04 17:48:48 -07:00
+++ b/sound/pcmcia/vx/vxp_mixer.c	2004-08-04 17:48:48 -07:00
@@ -25,8 +25,6 @@
 #include <sound/control.h>
 #include "vxpocket.h"
 
-#define chip_t vx_core_t
-
 #define MIC_LEVEL_MIN	0
 #define MIC_LEVEL_MAX	8
 
diff -Nru a/sound/pcmcia/vx/vxp_ops.c b/sound/pcmcia/vx/vxp_ops.c
--- a/sound/pcmcia/vx/vxp_ops.c	2004-08-04 17:48:48 -07:00
+++ b/sound/pcmcia/vx/vxp_ops.c	2004-08-04 17:48:48 -07:00
@@ -26,8 +26,6 @@
 #include <asm/io.h>
 #include "vxpocket.h"
 
-#define chip_t vx_core_t
-
 
 static int vxp_reg_offset[VX_REG_MAX] = {
 	[VX_ICR]	= 0x00,		// ICR
diff -Nru a/sound/pcmcia/vx/vxpocket.c b/sound/pcmcia/vx/vxpocket.c
--- a/sound/pcmcia/vx/vxpocket.c	2004-08-04 17:48:48 -07:00
+++ b/sound/pcmcia/vx/vxpocket.c	2004-08-04 17:48:48 -07:00
@@ -50,8 +50,7 @@
 MODULE_AUTHOR("Takashi Iwai <tiwai@suse.de>");
 MODULE_DESCRIPTION("Digigram " CARD_NAME);
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{Digigram," CARD_NAME "}}");
+MODULE_SUPPORTED_DEVICE("{{Digigram," CARD_NAME "}}");
 
 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;	/* Index 0-MAX */
 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;	/* ID for this card */
@@ -63,20 +62,16 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param(irq_mask, int, 0444);
 MODULE_PARM_DESC(irq_mask, "IRQ bitmask for " CARD_NAME " soundcard.");
 module_param_array(irq_list, int, boot_devs, 0444);
 MODULE_PARM_DESC(irq_list, "List of Available interrupts for " CARD_NAME " soundcard.");
 module_param_array(ibl, int, boot_devs, 0444);
 MODULE_PARM_DESC(ibl, "Capture IBL size for " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(ibl, SNDRV_ENABLED);
  
 
 /*
diff -Nru a/sound/ppc/Makefile b/sound/ppc/Makefile
--- a/sound/ppc/Makefile	2004-08-04 17:48:49 -07:00
+++ b/sound/ppc/Makefile	2004-08-04 17:48:49 -07:00
@@ -3,7 +3,7 @@
 # Copyright (c) 2001 by Jaroslav Kysela <perex@suse.cz>
 #
 
-snd-powermac-objs := powermac.o pmac.o awacs.o burgundy.o daca.o tumbler.o keywest.o
+snd-powermac-objs := powermac.o pmac.o awacs.o burgundy.o daca.o tumbler.o keywest.o beep.o
 
 # Toplevel Module Dependency
 obj-$(CONFIG_SND_POWERMAC) += snd-powermac.o
diff -Nru a/sound/ppc/awacs.c b/sound/ppc/awacs.c
--- a/sound/ppc/awacs.c	2004-08-04 17:48:49 -07:00
+++ b/sound/ppc/awacs.c	2004-08-04 17:48:49 -07:00
@@ -29,8 +29,6 @@
 #include <sound/core.h>
 #include "pmac.h"
 
-#define chip_t pmac_t
-
 
 #ifdef CONFIG_ADB_CUDA
 #define PMAC_AMP_AVAIL
@@ -574,11 +572,22 @@
 	AWACS_VOLUME("Master Playback Volume", 2, 6, 1),
 	AWACS_SWITCH("Master Capture Switch", 1, SHIFT_LOOPTHRU, 0),
 	AWACS_VOLUME("Capture Volume", 0, 4, 0),
-	AWACS_SWITCH("Line Capture Switch", 0, SHIFT_MUX_LINE, 0),
 	AWACS_SWITCH("CD Capture Switch", 0, SHIFT_MUX_CD, 0),
+};
+
+/* FIXME: is this correct order?
+ * screamer (powerbook G3 pismo) seems to have different bits...
+ */
+static snd_kcontrol_new_t snd_pmac_awacs_mixers2[] __initdata = {
+	AWACS_SWITCH("Line Capture Switch", 0, SHIFT_MUX_LINE, 0),
 	AWACS_SWITCH("Mic Capture Switch", 0, SHIFT_MUX_MIC, 0),
 };
 
+static snd_kcontrol_new_t snd_pmac_screamer_mixers2[] __initdata = {
+	AWACS_SWITCH("Line Capture Switch", 0, SHIFT_MUX_MIC, 0),
+	AWACS_SWITCH("Mic Capture Switch", 0, SHIFT_MUX_LINE, 0),
+};
+
 static snd_kcontrol_new_t snd_pmac_awacs_master_sw __initdata =
 AWACS_SWITCH("Master Playback Switch", 1, SHIFT_HDMUTE, 1);
 
@@ -602,8 +611,6 @@
 AWACS_SWITCH("PC Speaker Playback Switch", 1, SHIFT_SPKMUTE, 1);
 
 
-#define num_controls(ary) (sizeof(ary) / sizeof(snd_kcontrol_new_t))
-
 /*
  * add new mixer elements to the card
  */
@@ -818,9 +825,17 @@
 	 */
 	strcpy(chip->card->mixername, "PowerMac AWACS");
 
-	if ((err = build_mixers(chip, num_controls(snd_pmac_awacs_mixers),
+	if ((err = build_mixers(chip, ARRAY_SIZE(snd_pmac_awacs_mixers),
 				snd_pmac_awacs_mixers)) < 0)
 		return err;
+	if (chip->model == PMAC_SCREAMER)
+		err = build_mixers(chip, num_controls(snd_pmac_screamer_mixers2),
+				   snd_pmac_screamer_mixers2);
+	else
+		err = build_mixers(chip, num_controls(snd_pmac_awacs_mixers2),
+				   snd_pmac_awacs_mixers2);
+	if (err < 0)
+		return err;
 	chip->master_sw_ctl = snd_ctl_new1(&snd_pmac_awacs_master_sw, chip);
 	if ((err = snd_ctl_add(chip->card, chip->master_sw_ctl)) < 0)
 		return err;
@@ -832,7 +847,7 @@
 		 * screamer registers.
 		 * in this case, it seems the route C is not used.
 		 */
-		if ((err = build_mixers(chip, num_controls(snd_pmac_awacs_amp_vol),
+		if ((err = build_mixers(chip, ARRAY_SIZE(snd_pmac_awacs_amp_vol),
 					snd_pmac_awacs_amp_vol)) < 0)
 			return err;
 		/* overwrite */
@@ -846,7 +861,7 @@
 #endif /* PMAC_AMP_AVAIL */
 	{
 		/* route A = headphone, route C = speaker */
-		if ((err = build_mixers(chip, num_controls(snd_pmac_awacs_speaker_vol),
+		if ((err = build_mixers(chip, ARRAY_SIZE(snd_pmac_awacs_speaker_vol),
 					snd_pmac_awacs_speaker_vol)) < 0)
 			return err;
 		chip->speaker_sw_ctl = snd_ctl_new1(&snd_pmac_awacs_speaker_sw, chip);
@@ -855,11 +870,11 @@
 	}
 
 	if (chip->model == PMAC_SCREAMER) {
-		if ((err = build_mixers(chip, num_controls(snd_pmac_screamer_mic_boost),
+		if ((err = build_mixers(chip, ARRAY_SIZE(snd_pmac_screamer_mic_boost),
 					snd_pmac_screamer_mic_boost)) < 0)
 			return err;
 	} else {
-		if ((err = build_mixers(chip, num_controls(snd_pmac_awacs_mic_boost),
+		if ((err = build_mixers(chip, ARRAY_SIZE(snd_pmac_awacs_mic_boost),
 					snd_pmac_awacs_mic_boost)) < 0)
 			return err;
 	}
diff -Nru a/sound/ppc/beep.c b/sound/ppc/beep.c
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/sound/ppc/beep.c	2004-08-04 17:48:49 -07:00
@@ -0,0 +1,262 @@
+/*
+ * Beep using pcm
+ *
+ * Copyright (c) by Takashi Iwai <tiwai@suse.de>
+ *
+ *   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 <asm/irq.h>
+#include <linux/init.h>
+#include <linux/slab.h>
+#include <linux/input.h>
+#include <sound/core.h>
+#include <sound/control.h>
+#include "pmac.h"
+
+struct snd_pmac_beep {
+	int running;	/* boolean */
+	int volume;	/* mixer volume: 0-100 */
+	int volume_play;	/* currently playing volume */
+	int hz;
+	int nsamples;
+	short *buf;		/* allocated wave buffer */
+	unsigned long addr;	/* physical address of buffer */
+	struct input_dev dev;
+};
+
+/*
+ * stop beep if running
+ */
+void snd_pmac_beep_stop(pmac_t *chip)
+{
+	pmac_beep_t *beep = chip->beep;
+	if (beep && beep->running) {
+		beep->running = 0;
+		snd_pmac_beep_dma_stop(chip);
+	}
+}
+
+/*
+ * Stuff for outputting a beep.  The values range from -327 to +327
+ * so we can multiply by an amplitude in the range 0..100 to get a
+ * signed short value to put in the output buffer.
+ */
+static short beep_wform[256] = {
+	0,	40,	79,	117,	153,	187,	218,	245,
+	269,	288,	304,	316,	323,	327,	327,	324,
+	318,	310,	299,	288,	275,	262,	249,	236,
+	224,	213,	204,	196,	190,	186,	183,	182,
+	182,	183,	186,	189,	192,	196,	200,	203,
+	206,	208,	209,	209,	209,	207,	204,	201,
+	197,	193,	188,	183,	179,	174,	170,	166,
+	163,	161,	160,	159,	159,	160,	161,	162,
+	164,	166,	168,	169,	171,	171,	171,	170,
+	169,	167,	163,	159,	155,	150,	144,	139,
+	133,	128,	122,	117,	113,	110,	107,	105,
+	103,	103,	103,	103,	104,	104,	105,	105,
+	105,	103,	101,	97,	92,	86,	78,	68,
+	58,	45,	32,	18,	3,	-11,	-26,	-41,
+	-55,	-68,	-79,	-88,	-95,	-100,	-102,	-102,
+	-99,	-93,	-85,	-75,	-62,	-48,	-33,	-16,
+	0,	16,	33,	48,	62,	75,	85,	93,
+	99,	102,	102,	100,	95,	88,	79,	68,
+	55,	41,	26,	11,	-3,	-18,	-32,	-45,
+	-58,	-68,	-78,	-86,	-92,	-97,	-101,	-103,
+	-105,	-105,	-105,	-104,	-104,	-103,	-103,	-103,
+	-103,	-105,	-107,	-110,	-113,	-117,	-122,	-128,
+	-133,	-139,	-144,	-150,	-155,	-159,	-163,	-167,
+	-169,	-170,	-171,	-171,	-171,	-169,	-168,	-166,
+	-164,	-162,	-161,	-160,	-159,	-159,	-160,	-161,
+	-163,	-166,	-170,	-174,	-179,	-183,	-188,	-193,
+	-197,	-201,	-204,	-207,	-209,	-209,	-209,	-208,
+	-206,	-203,	-200,	-196,	-192,	-189,	-186,	-183,
+	-182,	-182,	-183,	-186,	-190,	-196,	-204,	-213,
+	-224,	-236,	-249,	-262,	-275,	-288,	-299,	-310,
+	-318,	-324,	-327,	-327,	-323,	-316,	-304,	-288,
+	-269,	-245,	-218,	-187,	-153,	-117,	-79,	-40,
+};
+
+#define BEEP_SRATE	22050	/* 22050 Hz sample rate */
+#define BEEP_BUFLEN	512
+#define BEEP_VOLUME	15	/* 0 - 100 */
+
+static int snd_pmac_beep_event(struct input_dev *dev, unsigned int type, unsigned int code, int hz)
+{
+	pmac_t *chip;
+	pmac_beep_t *beep;
+	unsigned long flags;
+	int beep_speed = 0;
+	int srate;
+	int period, ncycles, nsamples;
+	int i, j, f;
+	short *p;
+
+	if (type != EV_SND)
+		return -1;
+
+	switch (code) {
+	case SND_BELL: if (hz) hz = 1000;
+	case SND_TONE: break;
+	default: return -1;
+	}
+
+	chip = dev->private;
+	if (! chip || (beep = chip->beep) == NULL)
+		return -1;
+
+	if (! hz) {
+		spin_lock_irqsave(&chip->reg_lock, flags);
+		if (beep->running)
+			snd_pmac_beep_stop(chip);
+		spin_unlock_irqrestore(&chip->reg_lock, flags);
+		return 0;
+	}
+
+	beep_speed = snd_pmac_rate_index(chip, &chip->playback, BEEP_SRATE);
+	srate = chip->freq_table[beep_speed];
+
+	if (hz <= srate / BEEP_BUFLEN || hz > srate / 2)
+		hz = 1000;
+
+	spin_lock_irqsave(&chip->reg_lock, flags);
+	if (chip->playback.running || chip->capture.running || beep->running) {
+		spin_unlock_irqrestore(&chip->reg_lock, flags);
+		return 0;
+	}
+	beep->running = 1;
+	spin_unlock_irqrestore(&chip->reg_lock, flags);
+
+	if (hz == beep->hz && beep->volume == beep->volume_play) {
+		nsamples = beep->nsamples;
+	} else {
+		period = srate * 256 / hz;	/* fixed point */
+		ncycles = BEEP_BUFLEN * 256 / period;
+		nsamples = (period * ncycles) >> 8;
+		f = ncycles * 65536 / nsamples;
+		j = 0;
+		p = beep->buf;
+		for (i = 0; i < nsamples; ++i, p += 2) {
+			p[0] = p[1] = beep_wform[j >> 8] * beep->volume;
+			j = (j + f) & 0xffff;
+		}
+		beep->hz = hz;
+		beep->volume_play = beep->volume;
+		beep->nsamples = nsamples;
+	}
+
+	spin_lock_irqsave(&chip->reg_lock, flags);
+	snd_pmac_beep_dma_start(chip, beep->nsamples * 4, beep->addr, beep_speed);
+	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	return 0;
+}
+
+/*
+ * beep volume mixer
+ */
+
+#define chip_t pmac_t
+
+static int snd_pmac_info_beep(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;
+	uinfo->value.integer.max = 100;
+	return 0;
+}
+
+static int snd_pmac_get_beep(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	pmac_t *chip = snd_kcontrol_chip(kcontrol);
+	snd_assert(chip->beep, return -ENXIO);
+	ucontrol->value.integer.value[0] = chip->beep->volume;
+	return 0;
+}
+
+static int snd_pmac_put_beep(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	pmac_t *chip = snd_kcontrol_chip(kcontrol);
+	int oval;
+	snd_assert(chip->beep, return -ENXIO);
+	oval = chip->beep->volume;
+	chip->beep->volume = ucontrol->value.integer.value[0];
+	return oval != chip->beep->volume;
+}
+
+static snd_kcontrol_new_t snd_pmac_beep_mixer = {
+	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+	.name = "Beep Playback Volume",
+	.info = snd_pmac_info_beep,
+	.get = snd_pmac_get_beep,
+	.put = snd_pmac_put_beep,
+};
+
+/* Initialize beep stuff */
+int __init snd_pmac_attach_beep(pmac_t *chip)
+{
+	pmac_beep_t *beep;
+	int err;
+
+	beep = kmalloc(sizeof(*beep), GFP_KERNEL);
+	if (! beep)
+		return -ENOMEM;
+
+	memset(beep, 0, sizeof(*beep));
+	beep->buf = (short *) kmalloc(BEEP_BUFLEN * 4, GFP_KERNEL);
+	if (! beep->buf) {
+		kfree(beep);
+		return -ENOMEM;
+	}
+	beep->addr = virt_to_bus(beep->buf);
+
+	beep->dev.evbit[0] = BIT(EV_SND);
+	beep->dev.sndbit[0] = BIT(SND_BELL) | BIT(SND_TONE);
+	beep->dev.event = snd_pmac_beep_event;
+	beep->dev.private = chip;
+
+	/* FIXME: set more better values */
+	beep->dev.name = "PowerMac Beep";
+	beep->dev.phys = "powermac/beep";
+	beep->dev.id.bustype = BUS_ADB;
+	beep->dev.id.vendor = 0x001f;
+	beep->dev.id.product = 0x0001;
+	beep->dev.id.version = 0x0100;
+
+	beep->volume = BEEP_VOLUME;
+	beep->running = 0;
+	if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_pmac_beep_mixer, chip))) < 0) {
+		kfree(beep->buf);
+		kfree(beep);
+		return err;
+	}
+
+	chip->beep = beep;
+	input_register_device(&beep->dev);
+
+	return 0;
+}
+
+void snd_pmac_detach_beep(pmac_t *chip)
+{
+	if (chip->beep) {
+		input_unregister_device(&chip->beep->dev);
+		kfree(chip->beep->buf);
+		kfree(chip->beep);
+		chip->beep = NULL;
+	}
+}
diff -Nru a/sound/ppc/burgundy.c b/sound/ppc/burgundy.c
--- a/sound/ppc/burgundy.c	2004-08-04 17:48:48 -07:00
+++ b/sound/ppc/burgundy.c	2004-08-04 17:48:48 -07:00
@@ -28,8 +28,6 @@
 #include "pmac.h"
 #include "burgundy.h"
 
-#define chip_t pmac_t
-
 
 /* Waits for busy flag to clear */
 inline static void
@@ -324,8 +322,6 @@
 static snd_kcontrol_new_t snd_pmac_burgundy_speaker_sw __initdata = 
 BURGUNDY_OUTPUT_SWITCH("PC Speaker Playback Switch", 0, BURGUNDY_OUTPUT_INTERN, 0, 0);
 
-#define num_controls(ary) (sizeof(ary) / sizeof(snd_kcontrol_new_t))
-
 
 #ifdef PMAC_SUPPORT_AUTOMUTE
 /*
@@ -420,7 +416,7 @@
 	 */
 	strcpy(chip->card->mixername, "PowerMac Burgundy");
 
-	for (i = 0; i < num_controls(snd_pmac_burgundy_mixers); i++) {
+	for (i = 0; i < ARRAY_SIZE(snd_pmac_burgundy_mixers); i++) {
 		if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_pmac_burgundy_mixers[i], chip))) < 0)
 			return err;
 	}
diff -Nru a/sound/ppc/daca.c b/sound/ppc/daca.c
--- a/sound/ppc/daca.c	2004-08-04 17:48:48 -07:00
+++ b/sound/ppc/daca.c	2004-08-04 17:48:48 -07:00
@@ -28,8 +28,6 @@
 #include <sound/core.h>
 #include "pmac.h"
 
-#define chip_t pmac_t
-
 /* i2c address */
 #define DACA_I2C_ADDR	0x4d
 
@@ -217,8 +215,6 @@
 	},
 };
 
-#define num_controls(ary) (sizeof(ary) / sizeof(snd_kcontrol_new_t))
-
 
 #ifdef CONFIG_PMAC_PBOOK
 static void daca_resume(pmac_t *chip)
@@ -272,7 +268,7 @@
 	 */
 	strcpy(chip->card->mixername, "PowerMac DACA");
 
-	for (i = 0; i < num_controls(daca_mixers); i++) {
+	for (i = 0; i < ARRAY_SIZE(daca_mixers); i++) {
 		if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&daca_mixers[i], chip))) < 0)
 			return err;
 	}
diff -Nru a/sound/ppc/pmac.c b/sound/ppc/pmac.c
--- a/sound/ppc/pmac.c	2004-08-04 17:48:49 -07:00
+++ b/sound/ppc/pmac.c	2004-08-04 17:48:49 -07:00
@@ -36,8 +36,6 @@
 #include <asm/feature.h>
 #endif
 
-#define chip_t pmac_t
-
 
 #if defined(CONFIG_PM) && defined(CONFIG_PMAC_PBOOK)
 static int snd_pmac_register_sleep_notifier(pmac_t *chip);
@@ -86,7 +84,7 @@
  * look up frequency table
  */
 
-static unsigned int snd_pmac_rate_index(pmac_t *chip, pmac_stream_t *rec, unsigned int rate)
+unsigned int snd_pmac_rate_index(pmac_t *chip, pmac_stream_t *rec, unsigned int rate)
 {
 	int i, ok, found;
 
@@ -203,7 +201,6 @@
 {
 	int i;
 	volatile struct dbdma_cmd *cp;
-	unsigned long flags;
 	snd_pcm_runtime_t *runtime = subs->runtime;
 	int rate_index;
 	long offset;
@@ -226,15 +223,17 @@
 	/* We really want to execute a DMA stop command, after the AWACS
 	 * is initialized.
 	 * For reasons I don't understand, it stops the hissing noise
-	 * common to many PowerBook G3 systems (like mine :-).
+	 * common to many PowerBook G3 systems and random noise otherwise
+	 * captured on iBook2's about every third time. -ReneR
 	 */
-	spin_lock_irqsave(&chip->reg_lock, flags);
+	spin_lock_irq(&chip->reg_lock);
 	snd_pmac_dma_stop(rec);
-	if (rec->stream == SNDRV_PCM_STREAM_PLAYBACK) {
-		st_le16(&chip->extra_dma.cmds->command, DBDMA_STOP);
-		snd_pmac_dma_set_command(rec, &chip->extra_dma);
-		snd_pmac_dma_run(rec, RUN);
-	}
+	st_le16(&chip->extra_dma.cmds->command, DBDMA_STOP);
+	snd_pmac_dma_set_command(rec, &chip->extra_dma);
+	snd_pmac_dma_run(rec, RUN);
+	spin_unlock_irq(&chip->reg_lock);
+	mdelay(5);
+	spin_lock_irq(&chip->reg_lock);
 	/* continuous DMA memory type doesn't provide the physical address,
 	 * so we need to resolve the address here...
 	 */
@@ -252,7 +251,7 @@
 
 	snd_pmac_dma_stop(rec);
 	snd_pmac_dma_set_command(rec, &rec->cmd);
-	spin_unlock_irqrestore(&chip->reg_lock, flags);
+	spin_unlock_irq(&chip->reg_lock);
 
 	return 0;
 }
@@ -264,7 +263,6 @@
 static int snd_pmac_pcm_trigger(pmac_t *chip, pmac_stream_t *rec,
 				snd_pcm_substream_t *subs, int cmd)
 {
-	unsigned long flags;
 	volatile struct dbdma_cmd *cp;
 	int i, command;
 
@@ -275,7 +273,7 @@
 			return -EBUSY;
 		command = (subs->stream == SNDRV_PCM_STREAM_PLAYBACK ?
 			   OUTPUT_MORE : INPUT_MORE) + INTR_ALWAYS;
-		spin_lock_irqsave(&chip->reg_lock, flags);
+		spin_lock(&chip->reg_lock);
 		snd_pmac_beep_stop(chip);
 		snd_pmac_pcm_set_format(chip);
 		for (i = 0, cp = rec->cmd.cmds; i < rec->nperiods; i++, cp++)
@@ -284,18 +282,18 @@
 		(void)in_le32(&rec->dma->status);
 		snd_pmac_dma_run(rec, RUN|WAKE);
 		rec->running = 1;
-		spin_unlock_irqrestore(&chip->reg_lock, flags);
+		spin_unlock(&chip->reg_lock);
 		break;
 
 	case SNDRV_PCM_TRIGGER_STOP:
 	case SNDRV_PCM_TRIGGER_SUSPEND:
-		spin_lock_irqsave(&chip->reg_lock, flags);
+		spin_lock(&chip->reg_lock);
 		rec->running = 0;
 		/*printk("stopped!!\n");*/
 		snd_pmac_dma_stop(rec);
 		for (i = 0, cp = rec->cmd.cmds; i < rec->nperiods; i++, cp++)
 			out_le16(&cp->command, DBDMA_STOP);
-		spin_unlock_irqrestore(&chip->reg_lock, flags);
+		spin_unlock(&chip->reg_lock);
 		break;
 
 	default:
@@ -651,7 +649,7 @@
 
 	pcm->private_data = chip;
 	pcm->private_free = pmac_pcm_free;
-	pcm->info_flags = 0;
+	pcm->info_flags = SNDRV_PCM_INFO_JOINT_DUPLEX;
 	strcpy(pcm->name, chip->card->shortname);
 	chip->pcm = pcm;
 
@@ -683,12 +681,41 @@
 
 
 /*
+ * handling beep
+ */
+void snd_pmac_beep_dma_start(pmac_t *chip, int bytes, unsigned long addr, int speed)
+{
+	pmac_stream_t *rec = &chip->playback;
+
+	snd_pmac_dma_stop(rec);
+	st_le16(&chip->extra_dma.cmds->req_count, bytes);
+	st_le16(&chip->extra_dma.cmds->xfer_status, 0);
+	st_le32(&chip->extra_dma.cmds->cmd_dep, chip->extra_dma.addr);
+	st_le32(&chip->extra_dma.cmds->phy_addr, addr);
+	st_le16(&chip->extra_dma.cmds->command, OUTPUT_MORE + BR_ALWAYS);
+	out_le32(&chip->awacs->control,
+		 (in_le32(&chip->awacs->control) & ~0x1f00)
+		 | (speed << 8));
+	out_le32(&chip->awacs->byteswap, 0);
+	snd_pmac_dma_set_command(rec, &chip->extra_dma);
+	snd_pmac_dma_run(rec, RUN);
+}
+
+void snd_pmac_beep_dma_stop(pmac_t *chip)
+{
+	snd_pmac_dma_stop(&chip->playback);
+	st_le16(&chip->extra_dma.cmds->command, DBDMA_STOP);
+	snd_pmac_pcm_set_format(chip); /* reset format */
+}
+
+
+/*
  * interrupt handlers
  */
 static irqreturn_t
 snd_pmac_tx_intr(int irq, void *devid, struct pt_regs *regs)
 {
-	pmac_t *chip = snd_magic_cast(pmac_t, devid, return IRQ_NONE);
+	pmac_t *chip = devid;
 	snd_pmac_pcm_update(chip, &chip->playback);
 	return IRQ_HANDLED;
 }
@@ -697,7 +724,7 @@
 static irqreturn_t
 snd_pmac_rx_intr(int irq, void *devid, struct pt_regs *regs)
 {
-	pmac_t *chip = snd_magic_cast(pmac_t, devid, return IRQ_NONE);
+	pmac_t *chip = devid;
 	snd_pmac_pcm_update(chip, &chip->capture);
 	return IRQ_HANDLED;
 }
@@ -706,7 +733,7 @@
 static irqreturn_t
 snd_pmac_ctrl_intr(int irq, void *devid, struct pt_regs *regs)
 {
-	pmac_t *chip = snd_magic_cast(pmac_t, devid, return IRQ_NONE);
+	pmac_t *chip = devid;
 	int ctrl = in_le32(&chip->awacs->control);
 
 	/*printk("pmac: control interrupt.. 0x%x\n", ctrl);*/
@@ -776,6 +803,8 @@
 	if (chip->mixer_free)
 		chip->mixer_free(chip);
 
+	snd_pmac_detach_beep(chip);
+
 	/* release resources */
 	if (chip->irq >= 0)
 		free_irq(chip->irq, (void*)chip);
@@ -802,7 +831,7 @@
 				release_OF_resource(chip->node, i);
 		}
 	}
-	snd_magic_kfree(chip);
+	kfree(chip);
 	return 0;
 }
 
@@ -812,7 +841,7 @@
  */
 static int snd_pmac_dev_free(snd_device_t *device)
 {
-	pmac_t *chip = snd_magic_cast(pmac_t, device->device_data, return -ENXIO);
+	pmac_t *chip = device->device_data;
 	return snd_pmac_free(chip);
 }
 
@@ -1069,7 +1098,7 @@
 	snd_runtime_check(chip_return, return -EINVAL);
 	*chip_return = NULL;
 
-	chip = snd_magic_kcalloc(pmac_t, 0, GFP_KERNEL);
+	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
 	if (chip == NULL)
 		return -ENOMEM;
 	chip->card = card;
@@ -1206,7 +1235,7 @@
 
 static int snd_pmac_suspend(snd_card_t *card, unsigned int state)
 {
-	pmac_t *chip = snd_magic_cast(pmac_t, card->pm_private_data, return -EINVAL);
+	pmac_t *chip = card->pm_private_data;
 	unsigned long flags;
 
 	if (chip->suspend)
@@ -1228,7 +1257,7 @@
 
 static int snd_pmac_resume(snd_card_t *card, unsigned int state)
 {
-	pmac_t *chip = snd_magic_cast(pmac_t, card->pm_private_data, return -EINVAL);
+	pmac_t *chip = card->pm_private_data;
 
 	snd_pmac_sound_feature(chip, 1);
 	if (chip->resume)
diff -Nru a/sound/ppc/pmac.h b/sound/ppc/pmac.h
--- a/sound/ppc/pmac.h	2004-08-04 17:48:49 -07:00
+++ b/sound/ppc/pmac.h	2004-08-04 17:48:49 -07:00
@@ -84,7 +84,7 @@
 
 	snd_pcm_substream_t *substream;
 
-	unsigned int cur_freqs;		/* currently available frequences */
+	unsigned int cur_freqs;		/* currently available frequencies */
 	unsigned int cur_formats;	/* currently available formats */
 };
 
@@ -173,6 +173,12 @@
 int snd_pmac_new(snd_card_t *card, pmac_t **chip_return);
 int snd_pmac_pcm_new(pmac_t *chip);
 int snd_pmac_attach_beep(pmac_t *chip);
+void snd_pmac_detach_beep(pmac_t *chip);
+void snd_pmac_beep_stop(pmac_t *chip);
+unsigned int snd_pmac_rate_index(pmac_t *chip, pmac_stream_t *rec, unsigned int rate);
+
+void snd_pmac_beep_dma_start(pmac_t *chip, int bytes, unsigned long addr, int speed);
+void snd_pmac_beep_dma_stop(pmac_t *chip);
 
 /* initialize mixer */
 int snd_pmac_awacs_init(pmac_t *chip);
@@ -205,10 +211,5 @@
 	set_current_state(TASK_UNINTERRUPTIBLE);\
 	schedule_timeout(((msec) * HZ + 999) / 1000);\
 } while (0)
-
-#ifndef PMAC_SUPPORT_PCM_BEEP
-#define snd_pmac_attach_beep(chip) 0
-#define snd_pmac_beep_stop(chip)  /**/
-#endif
 
 #endif /* __PMAC_H */
diff -Nru a/sound/ppc/powermac.c b/sound/ppc/powermac.c
--- a/sound/ppc/powermac.c	2004-08-04 17:48:49 -07:00
+++ b/sound/ppc/powermac.c	2004-08-04 17:48:49 -07:00
@@ -30,31 +30,19 @@
 #define CHIP_NAME "PMac"
 
 MODULE_DESCRIPTION("PowerMac");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{Apple,PowerMac}}");
+MODULE_SUPPORTED_DEVICE("{{Apple,PowerMac}}");
 MODULE_LICENSE("GPL");
 
 static int index = SNDRV_DEFAULT_IDX1;		/* Index 0-MAX */
 static char *id = SNDRV_DEFAULT_STR1;		/* ID for this card */
-/* static int enable = 1; */
-#ifdef PMAC_SUPPORT_PCM_BEEP
 static int enable_beep = 1;
-#endif
 
 module_param(index, int, 0444);
 MODULE_PARM_DESC(index, "Index value for " CHIP_NAME " soundchip.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param(id, charp, 0444);
 MODULE_PARM_DESC(id, "ID string for " CHIP_NAME " soundchip.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
-/* module_param(enable, bool, 0444);
-   MODULE_PARM_DESC(enable, "Enable this soundchip.");
-   MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); */
-#ifdef PMAC_SUPPORT_PCM_BEEP
 module_param(enable_beep, bool, 0444);
 MODULE_PARM_DESC(enable_beep, "Enable beep using PCM.");
-MODULE_PARM_SYNTAX(enable_beep, SNDRV_ENABLED "," SNDRV_BOOLEAN_TRUE_DESC);
-#endif
 
 
 /*
@@ -133,10 +121,8 @@
 		goto __error;
 
 	chip->initialized = 1;
-#ifdef PMAC_SUPPORT_PCM_BEEP
 	if (enable_beep)
 		snd_pmac_attach_beep(chip);
-#endif
 
 	if ((err = snd_card_register(card)) < 0)
 		goto __error;
@@ -151,18 +137,14 @@
 
 
 /*
- * MODULE sutff
+ * MODULE stuff
  */
 
 static int __init alsa_card_pmac_init(void)
 {
 	int err;
-	if ((err = snd_pmac_probe()) < 0) {
-#ifdef MODULE
-		printk(KERN_ERR "no PMac soundchip found\n");
-#endif
+	if ((err = snd_pmac_probe()) < 0)
 		return err;
-	}
 	return 0;
 
 }
diff -Nru a/sound/ppc/tumbler.c b/sound/ppc/tumbler.c
--- a/sound/ppc/tumbler.c	2004-08-04 17:48:48 -07:00
+++ b/sound/ppc/tumbler.c	2004-08-04 17:48:48 -07:00
@@ -36,8 +36,6 @@
 #include "pmac.h"
 #include "tumbler_volume.h"
 
-#define chip_t pmac_t
-
 /* i2c address for tumbler */
 #define TAS_I2C_ADDR	0x34
 
@@ -872,7 +870,7 @@
 /* interrupt - headphone plug changed */
 static irqreturn_t headphone_intr(int irq, void *devid, struct pt_regs *regs)
 {
-	pmac_t *chip = snd_magic_cast(pmac_t, devid, return IRQ_NONE);
+	pmac_t *chip = devid;
 	if (chip->update_automute && chip->initialized) {
 		chip->update_automute(chip, 1);
 		return IRQ_HANDLED;
diff -Nru a/sound/sparc/amd7930.c b/sound/sparc/amd7930.c
--- a/sound/sparc/amd7930.c	2004-08-04 17:48:48 -07:00
+++ b/sound/sparc/amd7930.c	2004-08-04 17:48:48 -07:00
@@ -54,18 +54,14 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for Sun AMD7930 soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for Sun AMD7930 soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable Sun AMD7930 soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 MODULE_AUTHOR("Thomas K. Dyas and David S. Miller");
 MODULE_DESCRIPTION("Sun AMD7930");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{Sun,AMD7930}}");
+MODULE_SUPPORTED_DEVICE("{{Sun,AMD7930}}");
 
 /* Device register layout.  */
 
@@ -345,7 +341,6 @@
 	unsigned int		regs_size;
 	struct snd_amd7930	*next;
 } amd7930_t;
-#define chip_t amd7930_t
 
 static amd7930_t *amd7930_list;
 
@@ -475,7 +470,6 @@
 	0x000b, /* 16.9 dB */
 	0x000f  /* 18. dB */
 };
-#define NR_GER_COEFFS (sizeof(ger_coeff) / sizeof(ger_coeff[0]))
 
 /* Update amd7930_map settings and program them into the hardware.
  * The amd->lock is held and local interrupts are disabled.
@@ -487,7 +481,7 @@
 
 	map->gx = gx_coeff[amd->rgain];
 	map->stgr = gx_coeff[amd->mgain];
-	level = (amd->pgain * (256 + NR_GER_COEFFS)) >> 8;
+	level = (amd->pgain * (256 + ARRAY_SIZE(ger_coeff))) >> 8;
 	if (level >= 256) {
 		map->ger = ger_coeff[level - 256];
 		map->gr = gx_coeff[255];
@@ -764,7 +758,7 @@
 
 static void snd_amd7930_pcm_free(snd_pcm_t *pcm)
 {
-	amd7930_t *amd = snd_magic_cast(amd7930_t, pcm->private_data, return);
+	amd7930_t *amd = pcm->private_data;
 
 	amd->pcm = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
@@ -916,8 +910,6 @@
 	},
 };
 
-#define NUM_AMD7930_CONTROLS (sizeof(amd7930_controls)/sizeof(snd_kcontrol_new_t))
-
 static int __init snd_amd7930_mixer(amd7930_t *amd)
 {
 	snd_card_t *card;
@@ -928,7 +920,7 @@
 	card = amd->card;
 	strcpy(card->mixername, card->shortname);
 
-	for (idx = 0; idx < NUM_AMD7930_CONTROLS; idx++) {
+	for (idx = 0; idx < ARRAY_SIZE(amd7930_controls); idx++) {
 		if ((err = snd_ctl_add(card,
 				       snd_ctl_new1(&amd7930_controls[idx], amd))) < 0)
 			return err;
@@ -947,14 +939,14 @@
 	if (amd->regs)
 		sbus_iounmap(amd->regs, amd->regs_size);
 
-	snd_magic_kfree(amd);
+	kfree(amd);
 
 	return 0;
 }
 
 static int snd_amd7930_dev_free(snd_device_t *device)
 {
-	amd7930_t *amd = snd_magic_cast(amd7930_t, device->device_data, return -ENXIO);
+	amd7930_t *amd = device->device_data;
 
 	return snd_amd7930_free(amd);
 }
@@ -976,7 +968,7 @@
 	int err;
 
 	*ramd = NULL;
-	amd = snd_magic_kcalloc(amd7930_t, 0, GFP_KERNEL);
+	amd = kcalloc(1, sizeof(*amd), 0, GFP_KERNEL);
 	if (amd == NULL)
 		return -ENOMEM;
 
diff -Nru a/sound/sparc/cs4231.c b/sound/sparc/cs4231.c
--- a/sound/sparc/cs4231.c	2004-08-04 17:48:48 -07:00
+++ b/sound/sparc/cs4231.c	2004-08-04 17:48:48 -07:00
@@ -53,18 +53,14 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for Sun CS4231 soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for Sun CS4231 soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable Sun CS4231 soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 MODULE_AUTHOR("Jaroslav Kysela, Derrick J. Brashear and David S. Miller");
 MODULE_DESCRIPTION("Sun CS4231");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{Sun,CS4231}}");
+MODULE_SUPPORTED_DEVICE("{{Sun,CS4231}}");
 
 typedef struct snd_cs4231 {
 	spinlock_t		lock;
@@ -112,7 +108,6 @@
 	unsigned int		regs_size;
 	struct snd_cs4231	*next;
 } cs4231_t;
-#define chip_t cs4231_t
 
 static cs4231_t *cs4231_list;
 
@@ -1232,7 +1227,7 @@
 #ifdef SBUS_SUPPORT
 static irqreturn_t snd_cs4231_sbus_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	cs4231_t *chip = snd_magic_cast(cs4231_t, dev_id, return);
+	cs4231_t *chip = dev_id;
 	u32 csr;
 
 	csr = sbus_readl(chip->port + APCCSR);
@@ -1256,7 +1251,7 @@
 #ifdef EBUS_SUPPORT
 static void snd_cs4231_ebus_play_callback(struct ebus_dma_info *p, int event, void *cookie)
 {
-	cs4231_t *chip = snd_magic_cast(cs4231_t, cookie, return);
+	cs4231_t *chip = cookie;
 
 	if (chip->image[CS4231_IFACE_CTRL] & CS4231_PLAYBACK_ENABLE) {
 		snd_pcm_period_elapsed(chip->playback_substream);
@@ -1267,7 +1262,7 @@
 
 static void snd_cs4231_ebus_capture_callback(struct ebus_dma_info *p, int event, void *cookie)
 {
-	cs4231_t *chip = snd_magic_cast(cs4231_t, cookie, return);
+	cs4231_t *chip = cookie;
 
 	if (chip->image[CS4231_IFACE_CTRL] & CS4231_RECORD_ENABLE) {
 		snd_pcm_period_elapsed(chip->capture_substream);
@@ -1547,7 +1542,7 @@
 
 static void snd_cs4231_pcm_free(snd_pcm_t *pcm)
 {
-	cs4231_t *chip = snd_magic_cast(cs4231_t, pcm->private_data, return);
+	cs4231_t *chip = pcm->private_data;
 	chip->pcm = NULL;
 	snd_pcm_lib_preallocate_free_for_all(pcm);
 }
@@ -1592,7 +1587,7 @@
 
 static void snd_cs4231_timer_free(snd_timer_t *timer)
 {
-	cs4231_t *chip = snd_magic_cast(cs4231_t, timer->private_data, return);
+	cs4231_t *chip = timer->private_data;
 	chip->timer = NULL;
 }
 
@@ -1821,8 +1816,6 @@
 	return change;
 }
 
-#define CS4231_CONTROLS (sizeof(snd_cs4231_controls)/sizeof(snd_kcontrol_new_t))
-
 #define CS4231_SINGLE(xname, xindex, reg, shift, mask, invert) \
 { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .index = xindex, \
   .info = snd_cs4231_info_single, \
@@ -1875,7 +1868,7 @@
 
 	strcpy(card->mixername, chip->pcm->name);
 
-	for (idx = 0; idx < CS4231_CONTROLS; idx++) {
+	for (idx = 0; idx < ARRAY_SIZE(snd_cs4231_controls); idx++) {
 		if ((err = snd_ctl_add(card,
 				       snd_ctl_new1(&snd_cs4231_controls[idx],
 						    chip))) < 0)
@@ -1950,14 +1943,14 @@
 	if (chip->timer)
 		snd_device_free(chip->card, chip->timer);
 
-	snd_magic_kfree(chip);
+	kfree(chip);
 
 	return 0;
 }
 
 static int snd_cs4231_sbus_dev_free(snd_device_t *device)
 {
-	cs4231_t *cp = snd_magic_cast(cs4231_t, device->device_data, return -ENXIO);
+	cs4231_t *cp = device->device_data;
 
 	return snd_cs4231_sbus_free(cp);
 }
@@ -1975,7 +1968,7 @@
 	int err;
 
 	*rchip = NULL;
-	chip = snd_magic_kcalloc(cs4231_t, 0, GFP_KERNEL);
+	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
 	if (chip == NULL)
 		return -ENOMEM;
 
@@ -2064,14 +2057,14 @@
 	if (chip->timer)
 		snd_device_free(chip->card, chip->timer);
 
-	snd_magic_kfree(chip);
+	kfree(chip);
 
 	return 0;
 }
 
 static int snd_cs4231_ebus_dev_free(snd_device_t *device)
 {
-	cs4231_t *cp = snd_magic_cast(cs4231_t, device->device_data, return -ENXIO);
+	cs4231_t *cp = device->device_data;
 
 	return snd_cs4231_ebus_free(cp);
 }
@@ -2089,7 +2082,7 @@
 	int err;
 
 	*rchip = NULL;
-	chip = snd_magic_kcalloc(cs4231_t, 0, GFP_KERNEL);
+	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
 	if (chip == NULL)
 		return -ENOMEM;
 
diff -Nru a/sound/synth/emux/emux.c b/sound/synth/emux/emux.c
--- a/sound/synth/emux/emux.c	2004-08-04 17:48:49 -07:00
+++ b/sound/synth/emux/emux.c	2004-08-04 17:48:49 -07:00
@@ -39,7 +39,7 @@
 	snd_emux_t *emu;
 
 	*remu = NULL;
-	emu = snd_magic_kcalloc(snd_emux_t, 0, GFP_KERNEL);
+	emu = kcalloc(1, sizeof(*emu), GFP_KERNEL);
 	if (emu == NULL)
 		return -ENOMEM;
 
@@ -77,7 +77,7 @@
 
 	emu->card = card;
 	emu->name = snd_kmalloc_strdup(name, GFP_KERNEL);
-	emu->voices = snd_kcalloc(sizeof(snd_emux_voice_t) * emu->max_voices, GFP_KERNEL);
+	emu->voices = kcalloc(emu->max_voices, sizeof(snd_emux_voice_t), GFP_KERNEL);
 	if (emu->voices == NULL)
 		return -ENOMEM;
 
@@ -143,7 +143,7 @@
 	if (emu->name)
 		kfree(emu->name);
 
-	snd_magic_kfree(emu);
+	kfree(emu);
 	return 0;
 }
 
diff -Nru a/sound/synth/emux/emux_effect.c b/sound/synth/emux/emux_effect.c
--- a/sound/synth/emux/emux_effect.c	2004-08-04 17:48:49 -07:00
+++ b/sound/synth/emux/emux_effect.c	2004-08-04 17:48:49 -07:00
@@ -278,7 +278,7 @@
 snd_emux_create_effect(snd_emux_port_t *p)
 {
 	int i;
-	p->effect = snd_kcalloc(sizeof(snd_emux_effect_table_t) * p->chset.max_channels, GFP_KERNEL);
+	p->effect = kcalloc(p->chset.max_channels, sizeof(snd_emux_effect_table_t), GFP_KERNEL);
 	if (p->effect) {
 		for (i = 0; i < p->chset.max_channels; i++)
 			p->chset.channels[i].private = p->effect + i;
diff -Nru a/sound/synth/emux/emux_hwdep.c b/sound/synth/emux/emux_hwdep.c
--- a/sound/synth/emux/emux_hwdep.c	2004-08-04 17:48:49 -07:00
+++ b/sound/synth/emux/emux_hwdep.c	2004-08-04 17:48:49 -07:00
@@ -104,7 +104,7 @@
 static int
 snd_emux_hwdep_ioctl(snd_hwdep_t * hw, struct file *file, unsigned int cmd, unsigned long arg)
 {
-	snd_emux_t *emu = snd_magic_cast(snd_emux_t, hw->private_data, return -ENXIO);
+	snd_emux_t *emu = hw->private_data;
 
 	switch (cmd) {
 	case SNDRV_EMUX_IOCTL_VERSION:
diff -Nru a/sound/synth/emux/emux_nrpn.c b/sound/synth/emux/emux_nrpn.c
--- a/sound/synth/emux/emux_nrpn.c	2004-08-04 17:48:48 -07:00
+++ b/sound/synth/emux/emux_nrpn.c	2004-08-04 17:48:48 -07:00
@@ -22,8 +22,6 @@
 #include "emux_voice.h"
 #include <sound/asoundef.h>
 
-#define NELEM(arr) (sizeof(arr)/sizeof((arr)[0]))
-
 /*
  * conversion from NRPN/control parameters to Emu8000 raw parameters
  */
@@ -214,8 +212,6 @@
 	{26, EMUX_FX_REVERB,		fx_reverb},
 };
 
-static int num_awe_effects = NELEM(awe_effects);
-
 
 /*
  * GS(SC88) NRPN effects; still experimental
@@ -281,8 +277,6 @@
 	{10, EMUX_FX_LFO1_DELAY, gs_vib_delay},
 };
 
-static int num_gs_effects = NELEM(gs_effects);
-
 
 /*
  * NRPN events
@@ -292,7 +286,7 @@
 {
 	snd_emux_port_t *port;
 
-	port = snd_magic_cast(snd_emux_port_t, p, return);
+	port = p;
 	snd_assert(port != NULL, return);
 	snd_assert(chan != NULL, return);
 
@@ -305,7 +299,7 @@
 			chan->control[MIDI_CTL_LSB_DATA_ENTRY]; 
 		val -= 8192;
 		send_converted_effect
-			(awe_effects, num_awe_effects,
+			(awe_effects, ARRAY_SIZE(awe_effects),
 			 port, chan, chan->control[MIDI_CTL_NONREG_PARM_NUM_LSB],
 			 val, EMUX_FX_FLAG_SET);
 		return;
@@ -318,7 +312,7 @@
 		/* only MSB is valid */
 		val = chan->control[MIDI_CTL_MSB_DATA_ENTRY];
 		send_converted_effect
-			(gs_effects, num_gs_effects,
+			(gs_effects, ARRAY_SIZE(gs_effects),
 			 port, chan, chan->control[MIDI_CTL_NONREG_PARM_NUM_LSB],
 			 val, EMUX_FX_FLAG_ADD);
 		return;
@@ -362,12 +356,10 @@
 	{73, EMUX_FX_ENV2_ATTACK, xg_attack},
 };
 
-static int num_xg_effects = NELEM(xg_effects);
-
 int
 snd_emux_xg_control(snd_emux_port_t *port, snd_midi_channel_t *chan, int param)
 {
-	return send_converted_effect(xg_effects, num_xg_effects,
+	return send_converted_effect(xg_effects, ARRAY_SIZE(xg_effects),
 				     port, chan, param,
 				     chan->control[param],
 				     EMUX_FX_FLAG_ADD);
@@ -382,7 +374,7 @@
 	snd_emux_port_t *port;
 	snd_emux_t *emu;
 
-	port = snd_magic_cast(snd_emux_port_t, p, return);
+	port = p;
 	snd_assert(port != NULL, return);
 	snd_assert(chset != NULL, return);
 	emu = port->emu;
diff -Nru a/sound/synth/emux/emux_oss.c b/sound/synth/emux/emux_oss.c
--- a/sound/synth/emux/emux_oss.c	2004-08-04 17:48:48 -07:00
+++ b/sound/synth/emux/emux_oss.c	2004-08-04 17:48:48 -07:00
@@ -108,7 +108,7 @@
 	snd_seq_port_callback_t callback;
 	char tmpname[64];
 
-	emu = snd_magic_cast(snd_emux_t, closure, return -EINVAL);
+	emu = closure;
 	snd_assert(arg != NULL && emu != NULL, return -ENXIO);
 
 	down(&emu->register_mutex);
@@ -179,7 +179,7 @@
 	snd_emux_port_t *p;
 
 	snd_assert(arg != NULL, return -ENXIO);
-	p = snd_magic_cast(snd_emux_port_t, arg->private_data, return -EINVAL);
+	p = arg->private_data;
 	snd_assert(p != NULL, return -ENXIO);
 
 	emu = p->emu;
@@ -208,7 +208,7 @@
 	int rc;
 
 	snd_assert(arg != NULL, return -ENXIO);
-	p = snd_magic_cast(snd_emux_port_t, arg->private_data, return -EINVAL);
+	p = arg->private_data;
 	snd_assert(p != NULL, return -ENXIO);
 
 	emu = p->emu;
@@ -248,7 +248,7 @@
 	snd_emux_t *emu;
 
 	snd_assert(arg != NULL, return -ENXIO);
-	p = snd_magic_cast(snd_emux_port_t, arg->private_data, return -EINVAL);
+	p = arg->private_data;
 	snd_assert(p != NULL, return -ENXIO);
 
 	emu = p->emu;
@@ -278,7 +278,7 @@
 	snd_emux_port_t *p;
 
 	snd_assert(arg != NULL, return -ENXIO);
-	p = snd_magic_cast(snd_emux_port_t, arg->private_data, return -EINVAL);
+	p = arg->private_data;
 	snd_assert(p != NULL, return -ENXIO);
 	snd_emux_reset_port(p);
 	return 0;
@@ -296,7 +296,7 @@
 	snd_emux_port_t *p;
 	unsigned char cmd, *data;
 
-	p = snd_magic_cast(snd_emux_port_t, private_data, return -EINVAL);
+	p = private_data;
 	snd_assert(p != NULL, return -EINVAL);
 	emu = p->emu;
 	snd_assert(emu != NULL, return -EINVAL);
diff -Nru a/sound/synth/emux/emux_proc.c b/sound/synth/emux/emux_proc.c
--- a/sound/synth/emux/emux_proc.c	2004-08-04 17:48:49 -07:00
+++ b/sound/synth/emux/emux_proc.c	2004-08-04 17:48:49 -07:00
@@ -36,7 +36,7 @@
 	snd_emux_t *emu;
 	int i;
 
-	emu = snd_magic_cast(snd_emux_t, entry->private_data, return);
+	emu = entry->private_data;
 	down(&emu->register_mutex);
 	if (emu->name)
 		snd_iprintf(buf, "Device: %s\n", emu->name);
diff -Nru a/sound/synth/emux/emux_seq.c b/sound/synth/emux/emux_seq.c
--- a/sound/synth/emux/emux_seq.c	2004-08-04 17:48:49 -07:00
+++ b/sound/synth/emux/emux_seq.c	2004-08-04 17:48:49 -07:00
@@ -146,14 +146,14 @@
 	int i, type, cap;
 
 	/* Allocate structures for this channel */
-	if ((p = snd_magic_kcalloc(snd_emux_port_t, 0, GFP_KERNEL)) == NULL) {
+	if ((p = kcalloc(1, sizeof(*p), GFP_KERNEL)) == NULL) {
 		snd_printk("no memory\n");
 		return NULL;
 	}
-	p->chset.channels = snd_kcalloc(max_channels * sizeof(snd_midi_channel_t), GFP_KERNEL);
+	p->chset.channels = kcalloc(max_channels, sizeof(snd_midi_channel_t), GFP_KERNEL);
 	if (p->chset.channels == NULL) {
 		snd_printk("no memory\n");
-		snd_magic_kfree(p);
+		kfree(p);
 		return NULL;
 	}
 	for (i = 0; i < max_channels; i++)
@@ -192,14 +192,14 @@
 {
 	snd_emux_port_t *p;
 
-	p = snd_magic_cast(snd_emux_port_t, private_data, return);
+	p = private_data;
 	if (p) {
 #ifdef SNDRV_EMUX_USE_RAW_EFFECT
 		snd_emux_delete_effect(p);
 #endif
 		if (p->chset.channels)
 			kfree(p->chset.channels);
-		snd_magic_kfree(p);
+		kfree(p);
 	}
 }
 
@@ -257,7 +257,7 @@
 {
 	snd_emux_port_t *port;
 
-	port = snd_magic_cast(snd_emux_port_t, private_data, return -EINVAL);
+	port = private_data;
 	snd_assert(port != NULL && ev != NULL, return -EINVAL);
 
 	snd_midi_process_event(&emux_ops, ev, &port->chset);
@@ -308,7 +308,7 @@
 	snd_emux_port_t *p;
 	snd_emux_t *emu;
 
-	p = snd_magic_cast(snd_emux_port_t, private_data, return -EINVAL);
+	p = private_data;
 	snd_assert(p != NULL, return -EINVAL);
 	emu = p->emu;
 	snd_assert(emu != NULL, return -EINVAL);
@@ -329,7 +329,7 @@
 	snd_emux_port_t *p;
 	snd_emux_t *emu;
 
-	p = snd_magic_cast(snd_emux_port_t, private_data, return -EINVAL);
+	p = private_data;
 	snd_assert(p != NULL, return -EINVAL);
 	emu = p->emu;
 	snd_assert(emu != NULL, return -EINVAL);
@@ -383,7 +383,7 @@
 	if (emu->midi_ports <= 0)
 		return 0;
 
-	emu->vmidi = snd_kcalloc(sizeof(snd_rawmidi_t*) * emu->midi_ports, GFP_KERNEL);
+	emu->vmidi = kcalloc(emu->midi_ports, sizeof(snd_rawmidi_t*), GFP_KERNEL);
 	if (emu->vmidi == NULL)
 		return -ENOMEM;
 
@@ -392,7 +392,7 @@
 		snd_virmidi_dev_t *rdev;
 		if (snd_virmidi_new(card, emu->midi_devidx + i, &rmidi) < 0)
 			goto __error;
-		rdev = snd_magic_cast(snd_virmidi_dev_t, rmidi->private_data, continue);
+		rdev = rmidi->private_data;
 		sprintf(rmidi->name, "%s Synth MIDI", emu->name);
 		rdev->seq_mode = SNDRV_VIRMIDI_SEQ_ATTACH;
 		rdev->client = emu->client;
diff -Nru a/sound/synth/emux/emux_synth.c b/sound/synth/emux/emux_synth.c
--- a/sound/synth/emux/emux_synth.c	2004-08-04 17:48:49 -07:00
+++ b/sound/synth/emux/emux_synth.c	2004-08-04 17:48:49 -07:00
@@ -61,7 +61,7 @@
 	unsigned long flags;
 	snd_emux_port_t *port;
 
-	port = snd_magic_cast(snd_emux_port_t, p, return);
+	port = p;
 	snd_assert(port != NULL && chan != NULL, return);
 
 	emu = port->emu;
@@ -160,7 +160,7 @@
 	unsigned long flags;
 	snd_emux_port_t *port;
 
-	port = snd_magic_cast(snd_emux_port_t, p, return);
+	port = p;
 	snd_assert(port != NULL && chan != NULL, return);
 
 	emu = port->emu;
@@ -201,7 +201,7 @@
  */
 void snd_emux_timer_callback(unsigned long data)
 {
-	snd_emux_t *emu = snd_magic_cast(snd_emux_t, (void*)data, return);
+	snd_emux_t *emu = (snd_emux_t*) data;
 	snd_emux_voice_t *vp;
 	int ch, do_again = 0;
 
@@ -238,7 +238,7 @@
 	unsigned long flags;
 	snd_emux_port_t *port;
 
-	port = snd_magic_cast(snd_emux_port_t, p, return);
+	port = p;
 	snd_assert(port != NULL && chan != NULL, return);
 
 	emu = port->emu;
@@ -322,7 +322,7 @@
 {
 	snd_emux_port_t *port;
 
-	port = snd_magic_cast(snd_emux_port_t, p, return);
+	port = p;
 	snd_assert(port != NULL && chan != NULL, return);
 
 	switch (type) {
@@ -402,7 +402,7 @@
 	snd_emux_t *emu;
 	snd_emux_port_t *port;
 
-	port = snd_magic_cast(snd_emux_port_t, p, return);
+	port = p;
 	snd_assert(port != NULL && chan != NULL, return);
 
 	emu = port->emu;
diff -Nru a/sound/synth/emux/soundfont.c b/sound/synth/emux/soundfont.c
--- a/sound/synth/emux/soundfont.c	2004-08-04 17:48:49 -07:00
+++ b/sound/synth/emux/soundfont.c	2004-08-04 17:48:49 -07:00
@@ -261,7 +261,7 @@
 	}
 
 	/* not found -- create a new one */
-	sf = (snd_soundfont_t*)snd_kcalloc(sizeof(*sf), GFP_KERNEL);
+	sf = kcalloc(1, sizeof(*sf), GFP_KERNEL);
 	if (sf == NULL)
 		return NULL;
 	sf->id = sflist->fonts_size;
@@ -337,7 +337,7 @@
 {
 	snd_sf_zone_t *zp;
 
-	if ((zp = snd_kcalloc(sizeof(*zp), GFP_KERNEL)) == NULL)
+	if ((zp = kcalloc(1, sizeof(*zp), GFP_KERNEL)) == NULL)
 		return NULL;
 	zp->next = sf->zones;
 	sf->zones = zp;
@@ -368,7 +368,7 @@
 {
 	snd_sf_sample_t *sp;
 
-	if ((sp = snd_kcalloc(sizeof(*sp), GFP_KERNEL)) == NULL)
+	if ((sp = kcalloc(1, sizeof(*sp), GFP_KERNEL)) == NULL)
 		return NULL;
 
 	sp->next = sf->samples;
@@ -1347,7 +1347,7 @@
 {
 	snd_sf_list_t *sflist;
 
-	if ((sflist = snd_kcalloc(sizeof(snd_sf_list_t), GFP_KERNEL)) == NULL)
+	if ((sflist = kcalloc(1, sizeof(*sflist), GFP_KERNEL)) == NULL)
 		return NULL;
 
 	init_MUTEX(&sflist->presets_mutex);
diff -Nru a/sound/synth/util_mem.c b/sound/synth/util_mem.c
--- a/sound/synth/util_mem.c	2004-08-04 17:48:48 -07:00
+++ b/sound/synth/util_mem.c	2004-08-04 17:48:48 -07:00
@@ -38,7 +38,7 @@
 {
 	snd_util_memhdr_t *hdr;
 
-	hdr = snd_kcalloc(sizeof(*hdr), GFP_KERNEL);
+	hdr = kcalloc(1, sizeof(*hdr), GFP_KERNEL);
 	if (hdr == NULL)
 		return NULL;
 	hdr->size = memsize;
diff -Nru a/sound/usb/Kconfig b/sound/usb/Kconfig
--- a/sound/usb/Kconfig	2004-08-04 17:48:49 -07:00
+++ b/sound/usb/Kconfig	2004-08-04 17:48:49 -07:00
@@ -11,5 +11,15 @@
 	help
 	  Say 'Y' or 'M' to include support for USB audio and USB MIDI devices.
 
+config SND_USB_USX2Y
+	tristate "Tascam US-122, US-224 and US-428 USB driver"
+	depends on SND && USB
+	select SND_HWDEP
+	select SND_RAWMIDI
+	select SND_PCM
+	help
+	  Say 'Y' or 'M' to include support for Tascam USB Audio/MIDI 
+	  interfaces or controllers US-122, US-224 and US-428.
+
 endmenu
 
diff -Nru a/sound/usb/Makefile b/sound/usb/Makefile
--- a/sound/usb/Makefile	2004-08-04 17:48:49 -07:00
+++ b/sound/usb/Makefile	2004-08-04 17:48:49 -07:00
@@ -2,7 +2,11 @@
 # Makefile for ALSA
 #
 
-snd-usb-audio-objs := usbaudio.o usbmixer.o usbmidi.o
+snd-usb-audio-objs := usbaudio.o usbmixer.o
+snd-usb-lib-objs := usbmidi.o
 
 # Toplevel Module Dependency
-obj-$(CONFIG_SND_USB_AUDIO) += snd-usb-audio.o
+obj-$(CONFIG_SND_USB_AUDIO) += snd-usb-audio.o snd-usb-lib.o
+obj-$(CONFIG_SND_USB_USX2Y) += snd-usb-lib.o
+
+obj-$(CONFIG_SND) += usx2y/
diff -Nru a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c
--- a/sound/usb/usbaudio.c	2004-08-04 17:48:49 -07:00
+++ b/sound/usb/usbaudio.c	2004-08-04 17:48:49 -07:00
@@ -5,7 +5,7 @@
  *
  *   Copyright (c) 2002 by Takashi Iwai <tiwai@suse.de>
  *
- *   Many codes borrowed from audio.c by 
+ *   Many codes borrowed from audio.c by
  *	    Alan Cox (alan@lxorguk.ukuu.org.uk)
  *	    Thomas Sailer (sailer@ife.ee.ethz.ch)
  *
@@ -58,8 +58,7 @@
 MODULE_AUTHOR("Takashi Iwai <tiwai@suse.de>");
 MODULE_DESCRIPTION("USB Audio");
 MODULE_LICENSE("GPL");
-MODULE_CLASSES("{sound}");
-MODULE_DEVICES("{{Generic,USB Audio}}");
+MODULE_SUPPORTED_DEVICE("{{Generic,USB Audio}}");
 
 
 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;	/* Index 0-MAX */
@@ -73,25 +72,18 @@
 
 module_param_array(index, int, boot_devs, 0444);
 MODULE_PARM_DESC(index, "Index value for the USB audio adapter.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
 module_param_array(id, charp, boot_devs, 0444);
 MODULE_PARM_DESC(id, "ID string for the USB audio adapter.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
 module_param_array(enable, bool, boot_devs, 0444);
 MODULE_PARM_DESC(enable, "Enable USB audio adapter.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
 module_param_array(vid, int, boot_devs, 0444);
 MODULE_PARM_DESC(vid, "Vendor ID for the USB audio device.");
-MODULE_PARM_SYNTAX(vid, SNDRV_ENABLED ",allows:{{-1,0xffff}},base:16");
 module_param_array(pid, int, boot_devs, 0444);
 MODULE_PARM_DESC(pid, "Product ID for the USB audio device.");
-MODULE_PARM_SYNTAX(pid, SNDRV_ENABLED ",allows:{{-1,0xffff}},base:16");
 module_param(nrpacks, int, 0444);
 MODULE_PARM_DESC(nrpacks, "Max. number of packets per URB.");
-MODULE_PARM_SYNTAX(nrpacks, SNDRV_ENABLED ",allows:{{1,10}}");
 module_param(async_unlink, bool, 0444);
 MODULE_PARM_DESC(async_unlink, "Use async unlink mode.");
-MODULE_PARM_SYNTAX(async_unlink, SNDRV_BOOLEAN_TRUE_DESC);
 
 
 /*
@@ -104,7 +96,7 @@
  *
  */
 
-#define MAX_PACKS	10	
+#define MAX_PACKS	10
 #define MAX_PACKS_HS	(MAX_PACKS * 8)	/* in high speed mode */
 #define MAX_URBS	5	/* max. 20ms long packets */
 #define SYNC_URBS	2	/* always two urbs for sync */
@@ -207,8 +199,6 @@
 	struct list_head list;
 };
 
-#define chip_t snd_usb_stream_t
-
 
 /*
  * we keep the snd_usb_audio_t instances by ourselves for merging
@@ -354,7 +344,7 @@
 	if (! urb->bandwidth) {
 		int bustime;
 		bustime = usb_check_bandwidth(urb->dev, urb);
-		if (bustime < 0) 
+		if (bustime < 0)
 			return bustime;
 		printk("urb %d: bandwidth = %d (packets = %d)\n", ctx->index, bustime, urb->number_of_packets);
 		usb_claim_bandwidth(urb->dev, urb, bustime, 1);
@@ -826,7 +816,7 @@
 }
 
 
-/* 
+/*
  *  wait until all urbs are processed.
  */
 static int wait_clear_urbs(snd_usb_substream_t *subs)
@@ -1148,7 +1138,7 @@
 	if (fmt->attributes & EP_CS_ATTR_PITCH_CONTROL) {
 		data[0] = 1;
 		if ((err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR,
-					   USB_TYPE_CLASS|USB_RECIP_ENDPOINT|USB_DIR_OUT, 
+					   USB_TYPE_CLASS|USB_RECIP_ENDPOINT|USB_DIR_OUT,
 					   PITCH_CONTROL << 8, ep, data, 1, HZ)) < 0) {
 			snd_printk(KERN_ERR "%d:%d:%d: cannot set enable PITCH\n",
 				   dev->devnum, iface, ep);
@@ -1174,7 +1164,7 @@
 		data[1] = rate >> 8;
 		data[2] = rate >> 16;
 		if ((err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR,
-					   USB_TYPE_CLASS|USB_RECIP_ENDPOINT|USB_DIR_OUT, 
+					   USB_TYPE_CLASS|USB_RECIP_ENDPOINT|USB_DIR_OUT,
 					   SAMPLING_FREQ_CONTROL << 8, ep, data, 3, HZ)) < 0) {
 			snd_printk(KERN_ERR "%d:%d:%d: cannot set freq %d to ep 0x%x\n",
 				   dev->devnum, iface, fmt->altsetting, rate, ep);
@@ -1183,9 +1173,9 @@
 		if ((err = snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0), GET_CUR,
 					   USB_TYPE_CLASS|USB_RECIP_ENDPOINT|USB_DIR_IN,
 					   SAMPLING_FREQ_CONTROL << 8, ep, data, 3, HZ)) < 0) {
-			snd_printk(KERN_ERR "%d:%d:%d: cannot get freq at ep 0x%x\n",
+			snd_printk(KERN_WARNING "%d:%d:%d: cannot get freq at ep 0x%x\n",
 				   dev->devnum, iface, fmt->altsetting, ep);
-			return err;
+			return 0; /* some devices don't support reading */
 		}
 		crate = data[0] | (data[1] << 8) | (data[2] << 16);
 		if (crate != rate) {
@@ -1323,7 +1313,7 @@
 	ret = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
 	if (ret < 0)
 		return ret;
-	
+
 	format = params_format(hw_params);
 	rate = params_rate(hw_params);
 	channels = params_channels(hw_params);
@@ -1482,7 +1472,7 @@
 	snd_interval_t *it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
 	unsigned int rmin, rmax;
 	int changed;
-	
+
 	hwc_debug("hw_rule_rate: (%d,%d)\n", it->min, it->max);
 	changed = 0;
 	rmin = rmax = 0;
@@ -1536,7 +1526,7 @@
 	snd_interval_t *it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
 	unsigned int rmin, rmax;
 	int changed;
-	
+
 	hwc_debug("hw_rule_channels: (%d,%d)\n", it->min, it->max);
 	changed = 0;
 	rmin = rmax = 0;
@@ -1590,7 +1580,7 @@
 	u64 fbits;
 	u32 oldbits[2];
 	int changed;
-	
+
 	hwc_debug("hw_rule_format: %x:%x\n", fmt->bits[0], fmt->bits[1]);
 	fbits = 0;
 	list_for_each(p, &subs->fmt_list) {
@@ -1734,13 +1724,13 @@
 
 	if (check_hw_params_convention(subs)) {
 		hwc_debug("setting extra hw constraints...\n");
-		if ((err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, 
+		if ((err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_RATE,
 					       hw_rule_rate, subs,
 					       SNDRV_PCM_HW_PARAM_FORMAT,
 					       SNDRV_PCM_HW_PARAM_CHANNELS,
 					       -1)) < 0)
 			return err;
-		if ((err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS, 
+		if ((err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
 					       hw_rule_channels, subs,
 					       SNDRV_PCM_HW_PARAM_FORMAT,
 					       SNDRV_PCM_HW_PARAM_RATE,
@@ -2001,8 +1991,8 @@
 
 static void proc_pcm_format_read(snd_info_entry_t *entry, snd_info_buffer_t *buffer)
 {
-	snd_usb_stream_t *stream = snd_magic_cast(snd_usb_stream_t, entry->private_data, return);
-	
+	snd_usb_stream_t *stream = entry->private_data;
+
 	snd_iprintf(buffer, "%s : %s\n", stream->chip->card->longname, stream->pcm->name);
 
 	if (stream->substream[SNDRV_PCM_STREAM_PLAYBACK].num_formats) {
@@ -2089,7 +2079,7 @@
 	free_substream(&stream->substream[0]);
 	free_substream(&stream->substream[1]);
 	list_del(&stream->list);
-	snd_magic_kfree(stream);
+	kfree(stream);
 }
 
 static void snd_usb_audio_pcm_free(snd_pcm_t *pcm)
@@ -2146,7 +2136,7 @@
 	}
 
 	/* create a new pcm */
-	as = snd_magic_kmalloc(snd_usb_stream_t, 0, GFP_KERNEL);
+	as = kmalloc(sizeof(*as), GFP_KERNEL);
 	if (! as)
 		return -ENOMEM;
 	memset(as, 0, sizeof(*as));
@@ -2158,13 +2148,13 @@
 			  stream == SNDRV_PCM_STREAM_PLAYBACK ? 0 : 1,
 			  &pcm);
 	if (err < 0) {
-		snd_magic_kfree(as);
+		kfree(as);
 		return err;
 	}
 	as->pcm = pcm;
 	pcm->private_data = as;
 	pcm->private_free = snd_usb_audio_pcm_free;
-	pcm->info_flags = SNDRV_PCM_INFO_NONATOMIC_OPS;
+	pcm->info_flags = 0;
 	if (chip->pcm_devs > 0)
 		sprintf(pcm->name, "USB Audio #%d", chip->pcm_devs);
 	else
@@ -2182,6 +2172,24 @@
 
 
 /*
+ * check if the device uses big-endian samples
+ */
+static int is_big_endian_format(struct usb_device *dev, struct audioformat *fp)
+{
+	/* M-Audio */
+	if (dev->descriptor.idVendor == 0x0763) {
+		/* Quattro: captured data only */
+		if (dev->descriptor.idProduct == 0x2001 &&
+		    fp->endpoint & USB_DIR_IN)
+			return 1;
+		/* Audiophile USB */
+		if (dev->descriptor.idProduct == 0x2003)
+			return 1;
+	}
+	return 0;
+}
+
+/*
  * parse the audio format type I descriptor
  * and returns the corresponding pcm format
  *
@@ -2217,17 +2225,13 @@
 			pcm_format = SNDRV_PCM_FORMAT_S8;
 			break;
 		case 2:
-			/* M-Audio audiophile USB workaround */
-			if (dev->descriptor.idVendor == 0x0763 &&
-			    dev->descriptor.idProduct == 0x2003)
+			if (is_big_endian_format(dev, fp))
 				pcm_format = SNDRV_PCM_FORMAT_S16_BE; /* grrr, big endian!! */
 			else
 				pcm_format = SNDRV_PCM_FORMAT_S16_LE;
 			break;
 		case 3:
-			/* M-Audio audiophile USB workaround */
-			if (dev->descriptor.idVendor == 0x0763 &&
-			    dev->descriptor.idProduct == 0x2003)
+			if (is_big_endian_format(dev, fp))
 				pcm_format = SNDRV_PCM_FORMAT_S24_3BE; /* grrr, big endian!! */
 			else
 				pcm_format = SNDRV_PCM_FORMAT_S24_3LE;
@@ -2281,7 +2285,7 @@
 {
 	int nr_rates = fmt[offset];
 	if (fmt[0] < offset + 1 + 3 * (nr_rates ? nr_rates : 2)) {
-		snd_printk(KERN_ERR "%d:%u:%d : invalid FORMAT_TYPE desc\n", 
+		snd_printk(KERN_ERR "%d:%u:%d : invalid FORMAT_TYPE desc\n",
 				   dev->devnum, fp->iface, fp->altsetting);
 		return -1;
 	}
@@ -2419,7 +2423,7 @@
 	}
 #endif
 	return 0;
-}	
+}
 
 static int parse_audio_endpoints(snd_usb_audio_t *chip, int iface_no)
 {
@@ -2465,22 +2469,22 @@
 		}
 
 		if (fmt[0] < 7) {
-			snd_printk(KERN_ERR "%d:%u:%d : invalid AS_GENERAL desc\n", 
+			snd_printk(KERN_ERR "%d:%u:%d : invalid AS_GENERAL desc\n",
 				   dev->devnum, iface_no, altno);
 			continue;
 		}
 
 		format = (fmt[6] << 8) | fmt[5]; /* remember the format value */
-			
+
 		/* get format type */
 		fmt = snd_usb_find_csint_desc(alts->extra, alts->extralen, NULL, FORMAT_TYPE);
 		if (!fmt) {
-			snd_printk(KERN_ERR "%d:%u:%d : no FORMAT_TYPE desc\n", 
+			snd_printk(KERN_ERR "%d:%u:%d : no FORMAT_TYPE desc\n",
 				   dev->devnum, iface_no, altno);
 			continue;
 		}
 		if (fmt[0] < 8) {
-			snd_printk(KERN_ERR "%d:%u:%d : invalid FORMAT_TYPE desc\n", 
+			snd_printk(KERN_ERR "%d:%u:%d : invalid FORMAT_TYPE desc\n",
 				   dev->devnum, iface_no, altno);
 			continue;
 		}
@@ -2490,7 +2494,7 @@
 		if (!csep && altsd->bNumEndpoints >= 2)
 			csep = snd_usb_find_desc(alts->endpoint[1].extra, alts->endpoint[1].extralen, NULL, USB_DT_CS_ENDPOINT);
 		if (!csep || csep[0] < 7 || csep[2] != EP_GENERAL) {
-			snd_printk(KERN_ERR "%d:%u:%d : no or invalid class specific endpoint descriptor\n", 
+			snd_printk(KERN_ERR "%d:%u:%d : no or invalid class specific endpoint descriptor\n",
 				   dev->devnum, iface_no, altno);
 			continue;
 		}
@@ -2920,14 +2924,14 @@
  */
 static void proc_audio_usbbus_read(snd_info_entry_t *entry, snd_info_buffer_t *buffer)
 {
-	snd_usb_audio_t *chip = snd_magic_cast(snd_usb_audio_t, entry->private_data, return);
+	snd_usb_audio_t *chip = entry->private_data;
 	if (! chip->shutdown)
 		snd_iprintf(buffer, "%03d/%03d\n", chip->dev->bus->busnum, chip->dev->devnum);
 }
 
 static void proc_audio_usbid_read(snd_info_entry_t *entry, snd_info_buffer_t *buffer)
 {
-	snd_usb_audio_t *chip = snd_magic_cast(snd_usb_audio_t, entry->private_data, return);
+	snd_usb_audio_t *chip = entry->private_data;
 	if (! chip->shutdown)
 		snd_iprintf(buffer, "%04x:%04x\n", chip->dev->descriptor.idVendor, chip->dev->descriptor.idProduct);
 }
@@ -2950,13 +2954,13 @@
 
 static int snd_usb_audio_free(snd_usb_audio_t *chip)
 {
-	snd_magic_kfree(chip);
+	kfree(chip);
 	return 0;
 }
 
 static int snd_usb_audio_dev_free(snd_device_t *device)
 {
-	snd_usb_audio_t *chip = snd_magic_cast(snd_usb_audio_t, device->device_data, return -ENXIO);
+	snd_usb_audio_t *chip = device->device_data;
 	return snd_usb_audio_free(chip);
 }
 
@@ -2975,7 +2979,7 @@
 	static snd_device_ops_t ops = {
 		.dev_free =	snd_usb_audio_dev_free,
 	};
-	
+
 	*rchip = NULL;
 
 	if (snd_usb_get_speed(dev) != USB_SPEED_FULL &&
@@ -2990,7 +2994,7 @@
 		return -ENOMEM;
 	}
 
-	chip = snd_magic_kcalloc(snd_usb_audio_t, 0, GFP_KERNEL);
+	chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
 	if (! chip) {
 		snd_card_free(card);
 		return -ENOMEM;
@@ -3171,7 +3175,7 @@
 
 /*
  * we need to take care of counter, since disconnection can be called also
- * many times as well as usb_audio_probe(). 
+ * many times as well as usb_audio_probe().
  */
 static void snd_usb_audio_disconnect(struct usb_device *dev, void *ptr)
 {
@@ -3182,7 +3186,7 @@
 	if (ptr == (void *)-1L)
 		return;
 
-	chip = snd_magic_cast(snd_usb_audio_t, ptr, return);
+	chip = ptr;
 	card = chip->card;
 	down(&register_mutex);
 	chip->shutdown = 1;
diff -Nru a/sound/usb/usbaudio.h b/sound/usb/usbaudio.h
--- a/sound/usb/usbaudio.h	2004-08-04 17:48:49 -07:00
+++ b/sound/usb/usbaudio.h	2004-08-04 17:48:49 -07:00
@@ -124,7 +124,6 @@
 typedef struct snd_usb_audio snd_usb_audio_t;
 
 struct snd_usb_audio {
-	
 	int index;
 	struct usb_device *dev;
 	snd_card_t *card;
@@ -138,15 +137,17 @@
 	int next_midi_device;
 
 	unsigned int ignore_ctl_error;	/* for mixer */
-};  
+};
 
 /*
  * Information about devices with broken descriptors
  */
 
+/* special values for .ifnum */
 #define QUIRK_NO_INTERFACE		-2
 #define QUIRK_ANY_INTERFACE		-1
 
+/* quirk type */
 #define QUIRK_MIDI_FIXED_ENDPOINT	0
 #define QUIRK_MIDI_YAMAHA		1
 #define QUIRK_MIDI_MIDIMAN		2
@@ -205,6 +206,8 @@
 int snd_usb_create_mixer(snd_usb_audio_t *chip, int ctrlif);
 
 int snd_usb_create_midi_interface(snd_usb_audio_t *chip, struct usb_interface *iface, const snd_usb_audio_quirk_t *quirk);
+void snd_usbmidi_input_stop(struct list_head* p);
+void snd_usbmidi_input_start(struct list_head* p);
 void snd_usbmidi_disconnect(struct list_head *p, struct usb_driver *driver);
 
 /*
diff -Nru a/sound/usb/usbmidi.c b/sound/usb/usbmidi.c
--- a/sound/usb/usbmidi.c	2004-08-04 17:48:49 -07:00
+++ b/sound/usb/usbmidi.c	2004-08-04 17:48:49 -07:00
@@ -49,6 +49,11 @@
 #include <sound/rawmidi.h>
 #include "usbaudio.h"
 
+MODULE_AUTHOR("Clemens Ladisch <clemens@ladisch.de>");
+MODULE_DESCRIPTION("USB Audio/MIDI helper module");
+MODULE_LICENSE("Dual BSD/GPL");
+
+
 struct usb_ms_header_descriptor {
 	__u8  bLength;
 	__u8  bDescriptorType;
@@ -175,7 +180,7 @@
  */
 static void snd_usbmidi_in_urb_complete(struct urb* urb, struct pt_regs *regs)
 {
-	snd_usb_midi_in_endpoint_t* ep = snd_magic_cast(snd_usb_midi_in_endpoint_t, urb->context, return);
+	snd_usb_midi_in_endpoint_t* ep = urb->context;
 
 	if (urb->status == 0) {
 		uint8_t* buffer = (uint8_t*)ep->urb->transfer_buffer;
@@ -229,7 +234,7 @@
 
 static void snd_usbmidi_out_urb_complete(struct urb* urb, struct pt_regs *regs)
 {
-	snd_usb_midi_out_endpoint_t* ep = snd_magic_cast(snd_usb_midi_out_endpoint_t, urb->context, return);
+	snd_usb_midi_out_endpoint_t* ep = urb->context;
 
 	if (urb->status < 0) {
 		if (snd_usbmidi_urb_error(urb->status) < 0)
@@ -393,7 +398,7 @@
 	int p;
 	struct urb* urb = ep->urb;
 	unsigned long flags;
-	
+
 	spin_lock_irqsave(&ep->buffer_lock, flags);
 	if (urb->status == -EINPROGRESS || ep->umidi->chip->shutdown) {
 		spin_unlock_irqrestore(&ep->buffer_lock, flags);
@@ -417,14 +422,14 @@
 
 static void snd_usbmidi_out_tasklet(unsigned long data)
 {
-	snd_usb_midi_out_endpoint_t* ep = snd_magic_cast(snd_usb_midi_out_endpoint_t, (void*)data, return);
-	
+	snd_usb_midi_out_endpoint_t* ep = (snd_usb_midi_out_endpoint_t *) data;
+
 	snd_usbmidi_do_output(ep);
 }
 
 static int snd_usbmidi_output_open(snd_rawmidi_substream_t* substream)
 {
-	snd_usb_midi_t* umidi = snd_magic_cast(snd_usb_midi_t, substream->rmidi->private_data, return -ENXIO);
+	snd_usb_midi_t* umidi = substream->rmidi->private_data;
 	usbmidi_out_port_t* port = NULL;
 	int i, j;
 
@@ -503,7 +508,7 @@
 			kfree(ep->urb->transfer_buffer);
 		usb_free_urb(ep->urb);
 	}
-	snd_magic_kfree(ep);
+	kfree(ep);
 }
 
 /*
@@ -571,7 +576,7 @@
 	int length;
 
 	rep->in = NULL;
-	ep = snd_magic_kcalloc(snd_usb_midi_in_endpoint_t, 0, GFP_KERNEL);
+	ep = kcalloc(1, sizeof(*ep), GFP_KERNEL);
 	if (!ep)
 		return -ENOMEM;
 	ep->umidi = umidi;
@@ -631,7 +636,7 @@
 			kfree(ep->urb->transfer_buffer);
 		usb_free_urb(ep->urb);
 	}
-	snd_magic_kfree(ep);
+	kfree(ep);
 }
 
 /*
@@ -647,7 +652,7 @@
 	void* buffer;
 
 	rep->out = NULL;
-	ep = snd_magic_kcalloc(snd_usb_midi_out_endpoint_t, 0, GFP_KERNEL);
+	ep = kcalloc(1, sizeof(*ep), GFP_KERNEL);
 	if (!ep)
 		return -ENOMEM;
 	ep->umidi = umidi;
@@ -695,7 +700,7 @@
 		if (ep->in)
 			snd_usbmidi_in_endpoint_delete(ep->in);
 	}
-	snd_magic_kfree(umidi);
+	kfree(umidi);
 }
 
 /*
@@ -718,7 +723,7 @@
 
 static void snd_usbmidi_rawmidi_free(snd_rawmidi_t* rmidi)
 {
-	snd_usb_midi_t* umidi = snd_magic_cast(snd_usb_midi_t, rmidi->private_data, return);
+	snd_usb_midi_t* umidi = rmidi->private_data;
 	snd_usbmidi_free(umidi);
 }
 
@@ -964,7 +969,7 @@
  * If the endpoints aren't specified, use the first bulk endpoints in the
  * first alternate setting of the interface.
  */
-static int snd_usbmidi_detect_endpoint(snd_usb_midi_t* umidi, 
+static int snd_usbmidi_detect_endpoint(snd_usb_midi_t* umidi,
 				       snd_usb_midi_endpoint_info_t* endpoint)
 {
 	struct usb_interface* intf;
@@ -998,7 +1003,7 @@
 /*
  * Detects the endpoints and ports of Yamaha devices.
  */
-static int snd_usbmidi_detect_yamaha(snd_usb_midi_t* umidi, 
+static int snd_usbmidi_detect_yamaha(snd_usb_midi_t* umidi,
 				     snd_usb_midi_endpoint_info_t* endpoint)
 {
 	struct usb_interface* intf;
@@ -1145,6 +1150,44 @@
 }
 
 /*
+ * Temporarily stop input.
+ */
+void snd_usbmidi_input_stop(struct list_head* p)
+{
+	snd_usb_midi_t* umidi;
+	int i;
+
+	umidi = list_entry(p, snd_usb_midi_t, list);
+	for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) {
+		snd_usb_midi_endpoint_t* ep = &umidi->endpoints[i];
+		if (ep->in)
+			usb_unlink_urb(ep->in->urb);
+	}
+}
+
+static void snd_usbmidi_input_start_ep(snd_usb_midi_in_endpoint_t* ep)
+{
+	if (ep) {
+		struct urb* urb = ep->urb;
+		urb->dev = ep->umidi->chip->dev;
+		snd_usbmidi_submit_urb(urb, GFP_KERNEL);
+	}
+}
+
+/*
+ * Resume input after a call to snd_usbmidi_input_stop().
+ */
+void snd_usbmidi_input_start(struct list_head* p)
+{
+	snd_usb_midi_t* umidi;
+	int i;
+
+	umidi = list_entry(p, snd_usb_midi_t, list);
+	for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i)
+		snd_usbmidi_input_start_ep(umidi->endpoints[i].in);
+}
+
+/*
  * Creates and registers everything needed for a MIDI streaming interface.
  */
 int snd_usb_create_midi_interface(snd_usb_audio_t* chip,
@@ -1156,7 +1199,7 @@
 	int out_ports, in_ports;
 	int i, err;
 
-	umidi = snd_magic_kcalloc(snd_usb_midi_t, 0, GFP_KERNEL);
+	umidi = kcalloc(1, sizeof(*umidi), GFP_KERNEL);
 	if (!umidi)
 		return -ENOMEM;
 	umidi->chip = chip;
@@ -1189,7 +1232,7 @@
 		}
 	}
 	if (err < 0) {
-		snd_magic_kfree(umidi);
+		kfree(umidi);
 		return err;
 	}
 
@@ -1202,7 +1245,7 @@
 	}
 	err = snd_usbmidi_create_rawmidi(umidi, out_ports, in_ports);
 	if (err < 0) {
-		snd_magic_kfree(umidi);
+		kfree(umidi);
 		return err;
 	}
 
@@ -1219,8 +1262,11 @@
 	list_add(&umidi->list, &umidi->chip->midi_list);
 
 	for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i)
-		if (umidi->endpoints[i].in)
-			snd_usbmidi_submit_urb(umidi->endpoints[i].in->urb,
-					       GFP_KERNEL);
+		snd_usbmidi_input_start_ep(umidi->endpoints[i].in);
 	return 0;
 }
+
+EXPORT_SYMBOL(snd_usb_create_midi_interface);
+EXPORT_SYMBOL(snd_usbmidi_input_stop);
+EXPORT_SYMBOL(snd_usbmidi_input_start);
+EXPORT_SYMBOL(snd_usbmidi_disconnect);
diff -Nru a/sound/usb/usbmixer.c b/sound/usb/usbmixer.c
--- a/sound/usb/usbmixer.c	2004-08-04 17:48:48 -07:00
+++ b/sound/usb/usbmixer.c	2004-08-04 17:48:48 -07:00
@@ -5,7 +5,7 @@
  *
  *   Copyright (c) 2002 by Takashi Iwai <tiwai@suse.de>
  *
- *   Many codes borrowed from audio.c by 
+ *   Many codes borrowed from audio.c by
  *	    Alan Cox (alan@lxorguk.ukuu.org.uk)
  *	    Thomas Sailer (sailer@ife.ee.ethz.ch)
  *
@@ -77,7 +77,7 @@
 	unsigned int ctrlif;
 	unsigned int id;
 	unsigned int control;	/* CS or ICN (high byte) */
-	unsigned int cmask; /* channel mask bitmap: 0 = master */ 
+	unsigned int cmask; /* channel mask bitmap: 0 = master */
 	int channels;
 	int val_type;
 	int min, max, res;
@@ -299,7 +299,7 @@
 	unsigned char buf[2];
 	int val_len = cval->val_type >= USB_MIXER_S16 ? 2 : 1;
 	int timeout = 10;
- 
+
 	while (timeout-- > 0) {
 		if (snd_usb_ctl_msg(cval->chip->dev, usb_rcvctrlpipe(cval->chip->dev, 0),
 				    request,
@@ -334,7 +334,7 @@
 	unsigned char buf[2];
 	int val_len = cval->val_type >= USB_MIXER_S16 ? 2 : 1;
 	int timeout = 10;
- 
+
 	value_set = convert_bytes_value(cval, value_set);
 	buf[0] = value_set & 0xff;
 	buf[1] = (value_set >> 8) & 0xff;
@@ -361,7 +361,7 @@
 
 
 /*
- * parser routines begin here... 
+ * parser routines begin here...
  */
 
 static int parse_audio_unit(mixer_build_t *state, int unitid);
@@ -443,7 +443,7 @@
 	{ 0x0712, "Multi-Track Recorder" },
 	{ 0x0713, "Synthesizer" },
 	{ 0 },
-};	
+};
 
 static int get_term_name(mixer_build_t *state, usb_audio_term_t *iterm,
 			 unsigned char *name, int maxlen, int term_only)
@@ -573,7 +573,7 @@
 static void usb_mixer_elem_free(snd_kcontrol_t *kctl)
 {
 	if (kctl->private_data) {
-		snd_magic_kfree((void *)kctl->private_data);
+		kfree((void *)kctl->private_data);
 		kctl->private_data = NULL;
 	}
 }
@@ -615,7 +615,7 @@
 			cval->res = 1;
 		} else {
 			int last_valid_res = cval->res;
-		
+
 			while (cval->res > 1) {
 				if (set_ctl_value(cval, SET_RES, (cval->control << 8) | minchn, cval->res / 2) < 0)
 					break;
@@ -634,8 +634,8 @@
 
 /* get a feature/mixer unit info */
 static int mixer_ctl_feature_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo)
-{	
-	usb_mixer_elem_info_t *cval = snd_magic_cast(usb_mixer_elem_info_t, kcontrol->private_data, return -EINVAL);
+{
+	usb_mixer_elem_info_t *cval = kcontrol->private_data;
 
 	if (cval->val_type == USB_MIXER_BOOLEAN ||
 	    cval->val_type == USB_MIXER_INV_BOOLEAN)
@@ -659,7 +659,7 @@
 /* get the current value from feature/mixer unit */
 static int mixer_ctl_feature_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
 {
-	usb_mixer_elem_info_t *cval = snd_magic_cast(usb_mixer_elem_info_t, kcontrol->private_data, return -EINVAL);
+	usb_mixer_elem_info_t *cval = kcontrol->private_data;
 	int c, cnt, val, err;
 
 	if (cval->cmask) {
@@ -700,7 +700,7 @@
 /* put the current value to feature/mixer unit */
 static int mixer_ctl_feature_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
 {
-	usb_mixer_elem_info_t *cval = snd_magic_cast(usb_mixer_elem_info_t, kcontrol->private_data, return -EINVAL);
+	usb_mixer_elem_info_t *cval = kcontrol->private_data;
 	int c, cnt, val, oval, err;
 	int changed = 0;
 
@@ -774,7 +774,7 @@
 	if (check_ignored_ctl(state, unitid, control))
 		return;
 
-	cval = snd_magic_kcalloc(usb_mixer_elem_info_t, 0, GFP_KERNEL);
+	cval = kcalloc(1, sizeof(*cval), GFP_KERNEL);
 	if (! cval) {
 		snd_printk(KERN_ERR "cannot malloc kcontrol\n");
 		return;
@@ -801,7 +801,7 @@
 	kctl = snd_ctl_new1(&usb_feature_unit_ctl, cval);
 	if (! kctl) {
 		snd_printk(KERN_ERR "cannot malloc kcontrol\n");
-		snd_magic_kfree(cval);
+		kfree(cval);
 		return;
 	}
 	kctl->private_free = usb_mixer_elem_free;
@@ -914,7 +914,7 @@
 		if (master_bits & (1 << i))
 			build_feature_ctl(state, ftr, 0, i, &iterm, unitid);
 	}
-	
+
 	return 0;
 }
 
@@ -943,7 +943,7 @@
 	if (check_ignored_ctl(state, unitid, 0))
 		return;
 
-	cval = snd_magic_kcalloc(usb_mixer_elem_info_t, 0, GFP_KERNEL);
+	cval = kcalloc(1, sizeof(*cval), GFP_KERNEL);
 	if (! cval)
 		return;
 
@@ -968,7 +968,7 @@
 	kctl = snd_ctl_new1(&usb_feature_unit_ctl, cval);
 	if (! kctl) {
 		snd_printk(KERN_ERR "cannot malloc kcontrol\n");
-		snd_magic_kfree(cval);
+		kfree(cval);
 		return;
 	}
 	kctl->private_free = usb_mixer_elem_free;
@@ -1014,7 +1014,7 @@
 /* get callback for processing/extension unit */
 static int mixer_ctl_procunit_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
 {
-	usb_mixer_elem_info_t *cval = snd_magic_cast(usb_mixer_elem_info_t, kcontrol->private_data, return -EINVAL);
+	usb_mixer_elem_info_t *cval = kcontrol->private_data;
 	int err, val;
 
 	err = get_cur_ctl_value(cval, cval->control << 8, &val);
@@ -1032,7 +1032,7 @@
 /* put callback for processing/extension unit */
 static int mixer_ctl_procunit_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
 {
-	usb_mixer_elem_info_t *cval = snd_magic_cast(usb_mixer_elem_info_t, kcontrol->private_data, return -EINVAL);
+	usb_mixer_elem_info_t *cval = kcontrol->private_data;
 	int val, oval, err;
 
 	err = get_cur_ctl_value(cval, cval->control << 8, &oval);
@@ -1170,7 +1170,7 @@
 			continue;
 		if (check_ignored_ctl(state, unitid, valinfo->control))
 			continue;
-		cval = snd_magic_kcalloc(usb_mixer_elem_info_t, 0, GFP_KERNEL);
+		cval = kcalloc(1, sizeof(*cval), GFP_KERNEL);
 		if (! cval) {
 			snd_printk(KERN_ERR "cannot malloc kcontrol\n");
 			return -ENOMEM;
@@ -1195,7 +1195,7 @@
 		kctl = snd_ctl_new1(&mixer_procunit_ctl, cval);
 		if (! kctl) {
 			snd_printk(KERN_ERR "cannot malloc kcontrol\n");
-			snd_magic_kfree(cval);
+			kfree(cval);
 			return -ENOMEM;
 		}
 		kctl->private_free = usb_mixer_elem_free;
@@ -1243,8 +1243,8 @@
  * use an enumerator type for routing
  */
 static int mixer_ctl_selector_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo)
-{	
-	usb_mixer_elem_info_t *cval = snd_magic_cast(usb_mixer_elem_info_t, kcontrol->private_data, return -EINVAL);
+{
+	usb_mixer_elem_info_t *cval = kcontrol->private_data;
 	char **itemlist = (char **)kcontrol->private_value;
 
 	snd_assert(itemlist, return -EINVAL);
@@ -1260,7 +1260,7 @@
 /* get callback for selector unit */
 static int mixer_ctl_selector_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
 {
-	usb_mixer_elem_info_t *cval = snd_magic_cast(usb_mixer_elem_info_t, kcontrol->private_data, return -EINVAL);
+	usb_mixer_elem_info_t *cval = kcontrol->private_data;
 	int val, err;
 
 	err = get_cur_ctl_value(cval, 0, &val);
@@ -1279,7 +1279,7 @@
 /* put callback for selector unit */
 static int mixer_ctl_selector_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
 {
-	usb_mixer_elem_info_t *cval = snd_magic_cast(usb_mixer_elem_info_t, kcontrol->private_data, return -EINVAL);
+	usb_mixer_elem_info_t *cval = kcontrol->private_data;
 	int val, oval, err;
 
 	err = get_cur_ctl_value(cval, 0, &oval);
@@ -1315,9 +1315,9 @@
 	int i, num_ins = 0;
 
 	if (kctl->private_data) {
-		usb_mixer_elem_info_t *cval = snd_magic_cast(usb_mixer_elem_info_t, kctl->private_data,);
+		usb_mixer_elem_info_t *cval = kctl->private_data;
 		num_ins = cval->max;
-		snd_magic_kfree(cval);
+		kfree(cval);
 		kctl->private_data = NULL;
 	}
 	if (kctl->private_value) {
@@ -1357,7 +1357,7 @@
 	if (check_ignored_ctl(state, unitid, 0))
 		return 0;
 
-	cval = snd_magic_kcalloc(usb_mixer_elem_info_t, 0, GFP_KERNEL);
+	cval = kcalloc(1, sizeof(*cval), GFP_KERNEL);
 	if (! cval) {
 		snd_printk(KERN_ERR "cannot malloc kcontrol\n");
 		return -ENOMEM;
@@ -1375,7 +1375,7 @@
 	namelist = kmalloc(sizeof(char *) * num_ins, GFP_KERNEL);
 	if (! namelist) {
 		snd_printk(KERN_ERR "cannot malloc\n");
-		snd_magic_kfree(cval);
+		kfree(cval);
 		return -ENOMEM;
 	}
 #define MAX_ITEM_NAME_LEN	64
@@ -1388,7 +1388,7 @@
 			while (--i > 0)
 				kfree(namelist[i]);
 			kfree(namelist);
-			snd_magic_kfree(cval);
+			kfree(cval);
 			return -ENOMEM;
 		}
 		if (check_input_term(state, desc[5 + i], &iterm) >= 0)
@@ -1400,7 +1400,7 @@
 	kctl = snd_ctl_new1(&mixer_selectunit_ctl, cval);
 	if (! kctl) {
 		snd_printk(KERN_ERR "cannot malloc kcontrol\n");
-		snd_magic_kfree(cval);
+		kfree(cval);
 		return -ENOMEM;
 	}
 	kctl->private_value = (unsigned long)namelist;
diff -Nru a/sound/usb/usbmixer_maps.c b/sound/usb/usbmixer_maps.c
--- a/sound/usb/usbmixer_maps.c	2004-08-04 17:48:49 -07:00
+++ b/sound/usb/usbmixer_maps.c	2004-08-04 17:48:49 -07:00
@@ -32,7 +32,7 @@
 	const struct usbmix_name_map *map;
 	int ignore_ctl_error;
 };
-	
+
 /*
  * USB control mappers for SB Exitigy
  */
diff -Nru a/sound/usb/usbquirks.h b/sound/usb/usbquirks.h
--- a/sound/usb/usbquirks.h	2004-08-04 17:48:49 -07:00
+++ b/sound/usb/usbquirks.h	2004-08-04 17:48:49 -07:00
@@ -267,7 +267,8 @@
 	}
 },
 {
-	/* thanks to Emiliano Grilli <emillo@libero.it> for helping researching this data */
+	/* thanks to Emiliano Grilli <emillo@libero.it>
+	 * for helping researching this data */
 	USB_DEVICE(0x0582, 0x000c),
 	.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
 		.vendor_name = "Roland",
@@ -830,11 +831,42 @@
 	.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
 		.vendor_name = "M-Audio",
 		.product_name = "Quattro",
-		.ifnum = 9,
-		.type = QUIRK_MIDI_MIDIMAN,
-		.data = & (const snd_usb_midi_endpoint_info_t) {
-			.out_cables = 0x0001,
-			.in_cables  = 0x0001
+		.ifnum = QUIRK_ANY_INTERFACE,
+		.type = QUIRK_COMPOSITE,
+		.data = & (const snd_usb_audio_quirk_t[]) {
+			/*
+			 * Interfaces 0-2 are "Windows-compatible", 16-bit only,
+			 * and share endpoints with the other interfaces.
+			 * Ignore them.  The other interfaces can do 24 bits,
+			 * but captured samples are big-endian (see usbaudio.c).
+			 */
+			{
+				.ifnum = 4,
+				.type = QUIRK_AUDIO_STANDARD_INTERFACE
+			},
+			{
+				.ifnum = 5,
+				.type = QUIRK_AUDIO_STANDARD_INTERFACE
+			},
+			{
+				.ifnum = 7,
+				.type = QUIRK_AUDIO_STANDARD_INTERFACE
+			},
+			{
+				.ifnum = 8,
+				.type = QUIRK_AUDIO_STANDARD_INTERFACE
+			},
+			{
+				.ifnum = 9,
+				.type = QUIRK_MIDI_MIDIMAN,
+				.data = & (const snd_usb_midi_endpoint_info_t) {
+					.out_cables = 0x0001,
+					.in_cables  = 0x0001
+				}
+			},
+			{
+				.ifnum = -1
+			}
 		}
 	}
 },
@@ -911,6 +943,21 @@
 		.vendor_name = "Terratec",
 		.product_name = "PHASE 26",
 		.ifnum = 3,
+		.type = QUIRK_MIDI_STANDARD_INTERFACE
+	}
+},
+
+{
+	/*
+	 * Some USB MIDI devices don't have an audio control interface,
+	 * so we have to grab MIDI streaming interfaces here.
+	 */
+	.match_flags = USB_DEVICE_ID_MATCH_INT_CLASS |
+		       USB_DEVICE_ID_MATCH_INT_SUBCLASS,
+	.bInterfaceClass = USB_CLASS_AUDIO,
+	.bInterfaceSubClass = USB_SUBCLASS_MIDI_STREAMING,
+	.driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) {
+		.ifnum = QUIRK_ANY_INTERFACE,
 		.type = QUIRK_MIDI_STANDARD_INTERFACE
 	}
 },
diff -Nru a/sound/usb/usx2y/Makefile b/sound/usb/usx2y/Makefile
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/sound/usb/usx2y/Makefile	2004-08-04 17:48:49 -07:00
@@ -0,0 +1,3 @@
+snd-usb-usx2y-objs := usbusx2y.o usbusx2yaudio.o usX2Yhwdep.o
+
+obj-$(CONFIG_SND_USB_USX2Y) += snd-usb-usx2y.o
diff -Nru a/sound/usb/usx2y/usX2Yhwdep.c b/sound/usb/usx2y/usX2Yhwdep.c
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/sound/usb/usx2y/usX2Yhwdep.c	2004-08-04 17:48:49 -07:00
@@ -0,0 +1,275 @@
+/*
+ * Driver for Tascam US-X2Y USB soundcards
+ *
+ * FPGA Loader + ALSA Startup
+ *
+ * Copyright (c) 2003 by Karsten Wiese <annabellesgarden@yahoo.de>
+ *
+ *   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 <linux/interrupt.h>
+#include <linux/usb.h>
+#include <sound/core.h>
+#include <sound/memalloc.h>
+#include <sound/pcm.h>
+#include <sound/hwdep.h>
+#include "usx2y.h"
+#include "usbusx2y.h"
+#include "usX2Yhwdep.h"
+
+
+static struct page * snd_us428ctls_vm_nopage(struct vm_area_struct *area, unsigned long address, int *type)
+{
+	unsigned long offset;
+	struct page * page;
+	void *vaddr;
+
+	snd_printdd("ENTER, start %lXh, ofs %lXh, pgoff %ld, addr %lXh\n",
+		   area->vm_start,
+		   address - area->vm_start,
+		   (address - area->vm_start) >> PAGE_SHIFT,
+		   address);
+	
+	offset = area->vm_pgoff << PAGE_SHIFT;
+	offset += address - area->vm_start;
+	snd_assert((offset % PAGE_SIZE) == 0, return NOPAGE_OOM);
+	vaddr = (char*)((usX2Ydev_t*)area->vm_private_data)->us428ctls_sharedmem + offset;
+	page = virt_to_page(vaddr);
+	get_page(page);
+	snd_printdd( "vaddr=%p made us428ctls_vm_nopage() return %p; offset=%lX\n", vaddr, page, offset);
+
+	if (type)
+		*type = VM_FAULT_MINOR;
+
+	return page;
+}
+
+static struct vm_operations_struct us428ctls_vm_ops = {
+	.nopage = snd_us428ctls_vm_nopage,
+};
+
+static int snd_us428ctls_mmap(snd_hwdep_t * hw, struct file *filp, struct vm_area_struct *area)
+{
+	unsigned long	size = (unsigned long)(area->vm_end - area->vm_start);
+	usX2Ydev_t	*us428 = (usX2Ydev_t*)hw->private_data;
+
+	// FIXME this hwdep interface is used twice: fpga download and mmap for controlling Lights etc. Maybe better using 2 hwdep devs?
+	// so as long as the device isn't fully initialised yet we return -EBUSY here.
+ 	if (!(((usX2Ydev_t*)hw->private_data)->chip_status & USX2Y_STAT_CHIP_INIT))
+		return -EBUSY;
+
+	/* if userspace tries to mmap beyond end of our buffer, fail */ 
+        if (size > ((PAGE_SIZE - 1 + sizeof(us428ctls_sharedmem_t)) / PAGE_SIZE) * PAGE_SIZE) {
+		snd_printd( "%lu > %lu\n", size, (unsigned long)sizeof(us428ctls_sharedmem_t)); 
+                return -EINVAL;
+	}
+
+	if (!us428->us428ctls_sharedmem) {
+		init_waitqueue_head(&us428->us428ctls_wait_queue_head);
+		if(!(us428->us428ctls_sharedmem = snd_malloc_pages(sizeof(us428ctls_sharedmem_t), GFP_KERNEL)))
+			return -ENOMEM;
+		memset(us428->us428ctls_sharedmem, -1, sizeof(us428ctls_sharedmem_t));
+		us428->us428ctls_sharedmem->CtlSnapShotLast = -2;
+	}
+	area->vm_ops = &us428ctls_vm_ops;
+	area->vm_flags |= VM_RESERVED;
+	area->vm_private_data = hw->private_data;
+	return 0;
+}
+
+static unsigned int snd_us428ctls_poll(snd_hwdep_t *hw, struct file *file, poll_table *wait)
+{
+	unsigned int	mask = 0;
+	usX2Ydev_t	*us428 = (usX2Ydev_t*)hw->private_data;
+	static unsigned	LastN;
+
+	if (us428->chip_status & USX2Y_STAT_CHIP_HUP)
+		return POLLHUP;
+
+	poll_wait(file, &us428->us428ctls_wait_queue_head, wait);
+
+	down(&us428->open_mutex);
+	if (us428->us428ctls_sharedmem
+	    && us428->us428ctls_sharedmem->CtlSnapShotLast != LastN) {
+		mask |= POLLIN;
+		LastN = us428->us428ctls_sharedmem->CtlSnapShotLast;
+	}
+	up(&us428->open_mutex);
+
+	return mask;
+}
+
+
+static int snd_usX2Y_hwdep_open(snd_hwdep_t *hw, struct file *file)
+{
+	return 0;
+}
+
+static int snd_usX2Y_hwdep_release(snd_hwdep_t *hw, struct file *file)
+{
+	return 0;
+}
+
+static int snd_usX2Y_hwdep_dsp_status(snd_hwdep_t *hw, snd_hwdep_dsp_status_t *info)
+{
+	static char *type_ids[USX2Y_TYPE_NUMS] = {
+		[USX2Y_TYPE_122] = "us122",
+		[USX2Y_TYPE_224] = "us224",
+		[USX2Y_TYPE_428] = "us428",
+	};
+	int id = -1;
+
+	switch (((usX2Ydev_t*)hw->private_data)->chip.dev->descriptor.idProduct) {
+	case USB_ID_US122:
+		id = USX2Y_TYPE_122;
+		break;
+	case USB_ID_US224:
+		id = USX2Y_TYPE_224;
+		break;
+	case USB_ID_US428:
+		id = USX2Y_TYPE_428;
+		break;
+	}
+	if (0 > id)
+		return -ENODEV;
+	strcpy(info->id, type_ids[id]);
+	info->num_dsps = 2;		// 0: Prepad Data, 1: FPGA Code
+ 	if (((usX2Ydev_t*)hw->private_data)->chip_status & USX2Y_STAT_CHIP_INIT) 
+		info->chip_ready = 1;
+ 	info->version = USX2Y_DRIVER_VERSION; 
+	return 0;
+}
+
+
+static int usX2Y_create_usbmidi(snd_card_t* card )
+{
+	static snd_usb_midi_endpoint_info_t quirk_data_1 = {
+		.out_ep =0x06,
+		.in_ep = 0x06,
+		.out_cables =	0x001,
+		.in_cables =	0x001
+	};
+	static snd_usb_audio_quirk_t quirk_1 = {
+		.vendor_name =	"TASCAM",
+		.product_name =	NAME_ALLCAPS,
+		.ifnum = 	0,
+       		.type = QUIRK_MIDI_FIXED_ENDPOINT,
+		.data = &quirk_data_1
+	};
+	static snd_usb_midi_endpoint_info_t quirk_data_2 = {
+		.out_ep =0x06,
+		.in_ep = 0x06,
+		.out_cables =	0x003,
+		.in_cables =	0x003
+	};
+	static snd_usb_audio_quirk_t quirk_2 = {
+		.vendor_name =	"TASCAM",
+		.product_name =	"US428",
+		.ifnum = 	0,
+       		.type = QUIRK_MIDI_FIXED_ENDPOINT,
+		.data = &quirk_data_2
+	};
+	struct usb_device *dev = usX2Y(card)->chip.dev;
+	struct usb_interface *iface = usb_ifnum_to_if(dev, 0);
+	snd_usb_audio_quirk_t *quirk = dev->descriptor.idProduct == USB_ID_US428 ? &quirk_2 : &quirk_1;
+
+	snd_printdd("usX2Y_create_usbmidi \n");
+	return snd_usb_create_midi_interface(&usX2Y(card)->chip, iface, quirk);
+}
+
+static int usX2Y_create_alsa_devices(snd_card_t* card)
+{
+	int err;
+
+	do {
+		if ((err = usX2Y_create_usbmidi(card)) < 0) {
+			snd_printk("usX2Y_create_alsa_devices: usX2Y_create_usbmidi error %i \n", err);
+			break;
+		}
+		if ((err = usX2Y_audio_create(card)) < 0) 
+			break;
+		if ((err = snd_card_register(card)) < 0)
+			break;
+	} while (0);
+
+	return err;
+} 
+
+static int snd_usX2Y_hwdep_dsp_load(snd_hwdep_t *hw, snd_hwdep_dsp_image_t *dsp)
+{
+	int	lret, err;
+	char*	buf;
+	snd_printdd( "dsp_load %s\n", dsp->name);
+
+	buf = dsp->image;
+
+	err = -EINVAL;
+	if (access_ok(VERIFY_READ, dsp->image, dsp->length)) {
+		struct usb_device* dev = ((usX2Ydev_t*)hw->private_data)->chip.dev;
+		buf = kmalloc(dsp->length, GFP_KERNEL);
+		copy_from_user(buf, dsp->image, dsp->length);
+		if ((err = usb_set_interface(dev, 0, 1)))
+			snd_printk("usb_set_interface error \n");
+		else
+			err = usb_bulk_msg(dev, usb_sndbulkpipe(dev, 2), buf, dsp->length, &lret, 6*HZ);
+		kfree(buf);
+	}
+	if (!err  &&  1 == dsp->index)
+		do {
+			set_current_state(TASK_UNINTERRUPTIBLE);
+			schedule_timeout(HZ/4);			// give the device some time 
+			if ((err = usX2Y_AsyncSeq04_init((usX2Ydev_t*)hw->private_data))) {
+				snd_printk("usX2Y_AsyncSeq04_init error \n");
+				break;
+			}
+			if ((err = usX2Y_In04_init((usX2Ydev_t*)hw->private_data))) {
+				snd_printk("usX2Y_In04_init error \n");
+				break;
+			}
+			if ((err = usX2Y_create_alsa_devices(hw->card))) {
+				snd_printk("usX2Y_create_alsa_devices error %i \n", err);
+				snd_card_free(hw->card);
+				break;
+			}
+			((usX2Ydev_t*)hw->private_data)->chip_status |= USX2Y_STAT_CHIP_INIT; 
+			snd_printdd("%s: alsa all started\n", hw->name);
+		} while (0);
+	return err;
+}
+
+
+int usX2Y_hwdep_new(snd_card_t* card, struct usb_device* device)
+{
+	int err;
+	snd_hwdep_t *hw;
+
+	if ((err = snd_hwdep_new(card, SND_USX2Y_LOADER_ID, 0, &hw)) < 0)
+		return err;
+
+	hw->iface = SNDRV_HWDEP_IFACE_USX2Y;
+	hw->private_data = usX2Y(card);
+	hw->ops.open = snd_usX2Y_hwdep_open;
+	hw->ops.release = snd_usX2Y_hwdep_release;
+	hw->ops.dsp_status = snd_usX2Y_hwdep_dsp_status;
+	hw->ops.dsp_load = snd_usX2Y_hwdep_dsp_load;
+	hw->ops.mmap = snd_us428ctls_mmap;
+	hw->ops.poll = snd_us428ctls_poll;
+	hw->exclusive = 1;
+	sprintf(hw->name, "/proc/bus/usb/%03d/%03d", device->bus->busnum, device->devnum);
+	return 0;
+}
+
diff -Nru a/sound/usb/usx2y/usX2Yhwdep.h b/sound/usb/usx2y/usX2Yhwdep.h
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/sound/usb/usx2y/usX2Yhwdep.h	2004-08-04 17:48:49 -07:00
@@ -0,0 +1,6 @@
+#ifndef USX2YHWDEP_H
+#define USX2YHWDEP_H
+
+int usX2Y_hwdep_new(snd_card_t* card, struct usb_device* device);
+
+#endif
diff -Nru a/sound/usb/usx2y/usbus428ctldefs.h b/sound/usb/usx2y/usbus428ctldefs.h
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/sound/usb/usx2y/usbus428ctldefs.h	2004-08-04 17:48:49 -07:00
@@ -0,0 +1,108 @@
+/*
+ *
+ * Copyright (c) 2003 by Karsten Wiese <annabellesgarden@yahoo.de>
+ *
+ *   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
+ */
+
+enum E_In84{
+	eFader0 = 0,
+	eFader1,
+	eFader2,
+	eFader3,
+	eFader4,
+	eFader5,
+	eFader6,
+	eFader7,
+	eFaderM,
+	eTransport,
+	eModifier = 10,
+	eFilterSelect,
+	eSelect,
+	eMute,
+
+	eSwitch   = 15,
+	eWheelGain,
+	eWheelFreq,
+	eWheelQ,
+	eWheelPan,
+	eWheel    = 20
+};
+
+#define T_RECORD   1
+#define T_PLAY     2
+#define T_STOP     4
+#define T_F_FWD    8
+#define T_REW   0x10
+#define T_SOLO  0x20
+#define T_REC   0x40
+#define T_NULL  0x80
+
+
+struct us428_ctls{
+	unsigned char   Fader[9];
+	unsigned char 	Transport;
+	unsigned char 	Modifier;
+	unsigned char 	FilterSelect;
+	unsigned char 	Select;
+	unsigned char   Mute;
+	unsigned char   UNKNOWN;
+	unsigned char   Switch;	     
+	unsigned char   Wheel[5];
+};
+
+typedef struct us428_ctls us428_ctls_t;
+
+typedef struct us428_setByte{
+	unsigned char Offset,
+		Value;
+}us428_setByte_t;
+
+enum {
+	eLT_Volume = 0,
+	eLT_Light
+};
+
+typedef struct usX2Y_volume {
+	unsigned char Channel,
+		LH,
+		LL,
+		RH,
+		RL;
+} usX2Y_volume_t;
+
+struct us428_lights{
+	us428_setByte_t Light[7];
+};
+typedef struct us428_lights us428_lights_t;
+
+typedef struct {
+	char type;
+	union {
+		usX2Y_volume_t	vol;
+		us428_lights_t  lights;
+	} val;
+} us428_p4out_t;
+
+#define N_us428_ctl_BUFS 16
+#define N_us428_p4out_BUFS 16
+struct us428ctls_sharedmem{
+	us428_ctls_t	CtlSnapShot[N_us428_ctl_BUFS];
+	int		CtlSnapShotDiffersAt[N_us428_ctl_BUFS];
+	int		CtlSnapShotLast, CtlSnapShotRed;
+	us428_p4out_t	p4out[N_us428_p4out_BUFS];
+	int		p4outLast, p4outSent;
+};
+typedef struct us428ctls_sharedmem us428ctls_sharedmem_t;
diff -Nru a/sound/usb/usx2y/usbusx2y.c b/sound/usb/usx2y/usbusx2y.c
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/sound/usb/usx2y/usbusx2y.c	2004-08-04 17:48:49 -07:00
@@ -0,0 +1,434 @@
+/*
+ * usbus428.c - ALSA USB US-428 Driver
+ *
+2004-07-13 Karsten Wiese
+	Version 0.7.1:
+	Don't sleep in START/STOP callbacks anymore.
+	us428 channels C/D not handled just for this version, sorry.
+
+2004-06-21 Karsten Wiese
+	Version 0.6.4:
+	Temporarely suspend midi input
+	to sanely call usb_set_interface() when setting format.
+
+2004-06-12 Karsten Wiese
+	Version 0.6.3:
+	Made it thus the following rule is enforced:
+	"All pcm substreams of one usX2Y have to operate at the same rate & format."
+
+2004-04-06 Karsten Wiese
+	Version 0.6.0:
+	Runs on 2.6.5 kernel without any "--with-debug=" things.
+	us224 reported running.
+
+2004-01-14 Karsten Wiese
+	Version 0.5.1:
+	Runs with 2.6.1 kernel.
+
+2003-12-30 Karsten Wiese
+	Version 0.4.1:
+	Fix 24Bit 4Channel capturing for the us428.
+
+2003-11-27 Karsten Wiese, Martin Langer
+	Version 0.4:
+	us122 support.
+	us224 could be tested by uncommenting the sections containing USB_ID_US224
+
+2003-11-03 Karsten Wiese
+	Version 0.3:
+	24Bit support. 
+	"arecord -D hw:1 -c 2 -r 48000 -M -f S24_3LE|aplay -D hw:1 -c 2 -r 48000 -M -f S24_3LE" works.
+
+2003-08-22 Karsten Wiese
+	Version 0.0.8:
+	Removed EZUSB Firmware. First Stage Firmwaredownload is now done by tascam-firmware downloader.
+	See:
+	http://usb-midi-fw.sourceforge.net/tascam-firmware.tar.gz
+
+2003-06-18 Karsten Wiese
+	Version 0.0.5:
+	changed to compile with kernel 2.4.21 and alsa 0.9.4
+
+2002-10-16 Karsten Wiese
+	Version 0.0.4:
+	compiles again with alsa-current.
+	USB_ISO_ASAP not used anymore (most of the time), instead
+	urb->start_frame is calculated here now, some calls inside usb-driver don't need to happen anymore.
+
+	To get the best out of this:
+	Disable APM-support in the kernel as APM-BIOS calls (once each second) hard disable interrupt for many precious milliseconds.
+	This helped me much on my slowish PII 400 & PIII 500.
+	ACPI yet untested but might cause the same bad behaviour.
+	Use a kernel with lowlatency and preemptiv patches applied.
+	To autoload snd-usb-midi append a line 
+		post-install snd-usb-us428 modprobe snd-usb-midi
+	to /etc/modules.conf.
+
+	known problems:
+	sliders, knobs, lights not yet handled except MASTER Volume slider.
+       	"pcm -c 2" doesn't work. "pcm -c 2 -m direct_interleaved" does.
+	KDE3: "Enable full duplex operation" deadlocks.
+
+	
+2002-08-31 Karsten Wiese
+	Version 0.0.3: audio also simplex;
+	simplifying: iso urbs only 1 packet, melted structs.
+	ASYNC_UNLINK not used anymore: no more crashes so far.....
+	for alsa 0.9 rc3.
+
+2002-08-09 Karsten Wiese
+	Version 0.0.2: midi works with snd-usb-midi, audio (only fullduplex now) with i.e. bristol.
+	The firmware has been sniffed from win2k us-428 driver 3.09.
+
+ *   Copyright (c) 2002 Karsten Wiese
+ *
+ *   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 <linux/init.h>
+#include <linux/module.h>
+#include <linux/moduleparam.h>
+#include <linux/interrupt.h>
+#include <linux/usb.h>
+#include <sound/core.h>
+#include <sound/initval.h>
+#include <sound/pcm.h>
+
+#include <sound/rawmidi.h>
+#include "usx2y.h"
+#include "usbusx2y.h"
+#include "usX2Yhwdep.h"
+
+
+
+MODULE_AUTHOR("Karsten Wiese <annabellesgarden@yahoo.de>");
+MODULE_DESCRIPTION("TASCAM "NAME_ALLCAPS" Version 0.7.2");
+MODULE_LICENSE("GPL");
+MODULE_SUPPORTED_DEVICE("{{TASCAM(0x1604), "NAME_ALLCAPS"(0x8001)(0x8005)(0x8007) }}");
+
+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 boot_devs;
+
+module_param_array(index, int, boot_devs, 0444);
+MODULE_PARM_DESC(index, "Index value for "NAME_ALLCAPS".");
+module_param_array(id, charp, boot_devs, 0444);
+MODULE_PARM_DESC(id, "ID string for "NAME_ALLCAPS".");
+module_param_array(enable, bool, boot_devs, 0444);
+MODULE_PARM_DESC(enable, "Enable "NAME_ALLCAPS".");
+
+
+static int snd_usX2Y_card_used[SNDRV_CARDS];
+
+static void usX2Y_usb_disconnect(struct usb_device* usb_device, void* ptr);
+static void snd_usX2Y_card_private_free(snd_card_t *card);
+
+/* 
+ * pipe 4 is used for switching the lamps, setting samplerate, volumes ....   
+ */
+static void i_usX2Y_Out04Int(struct urb* urb, struct pt_regs *regs)
+{
+#ifdef CONFIG_SND_DEBUG
+	if (urb->status) {
+		int 		i;
+		usX2Ydev_t*	usX2Y = urb->context;
+		for (i = 0; i < 10 && usX2Y->AS04.urb[i] != urb; i++);
+		snd_printdd("i_usX2Y_Out04Int() urb %i status=%i\n", i, urb->status);
+	}
+#endif
+}
+
+static void i_usX2Y_In04Int(struct urb* urb, struct pt_regs *regs)
+{
+	int			err = 0;
+	usX2Ydev_t		*usX2Y = urb->context;
+	us428ctls_sharedmem_t	*us428ctls = usX2Y->us428ctls_sharedmem;
+
+	usX2Y->In04IntCalls++;
+
+	if (urb->status) {
+		snd_printdd("Interrupt Pipe 4 came back with status=%i\n", urb->status);
+		return;
+	}
+
+	//	printk("%i:0x%02X ", 8, (int)((unsigned char*)usX2Y->In04Buf)[8]); Master volume shows 0 here if fader is at max during boot ?!?
+	if (us428ctls) {
+		int diff = -1;
+		if (-2 == us428ctls->CtlSnapShotLast) {
+			diff = 0;
+			memcpy(usX2Y->In04Last, usX2Y->In04Buf, sizeof(usX2Y->In04Last));
+			us428ctls->CtlSnapShotLast = -1;
+		} else {
+			int i;
+			for (i = 0; i < 21; i++) {
+				if (usX2Y->In04Last[i] != ((char*)usX2Y->In04Buf)[i]) {
+					if (diff < 0)
+						diff = i;
+					usX2Y->In04Last[i] = ((char*)usX2Y->In04Buf)[i];
+				}
+			}
+		}
+		if (0 <= diff) {
+			int n = us428ctls->CtlSnapShotLast + 1;
+			if (n >= N_us428_ctl_BUFS  ||  n < 0)
+				n = 0;
+			memcpy(us428ctls->CtlSnapShot + n, usX2Y->In04Buf, sizeof(us428ctls->CtlSnapShot[0]));
+			us428ctls->CtlSnapShotDiffersAt[n] = diff;
+			us428ctls->CtlSnapShotLast = n;
+			wake_up(&usX2Y->us428ctls_wait_queue_head);
+		}
+	}
+	
+	
+	if (usX2Y->US04) {
+		if (0 == usX2Y->US04->submitted)
+			do
+				err = usb_submit_urb(usX2Y->US04->urb[usX2Y->US04->submitted++], GFP_ATOMIC);
+			while (!err && usX2Y->US04->submitted < usX2Y->US04->len);
+	} else
+		if (us428ctls && us428ctls->p4outLast >= 0 && us428ctls->p4outLast < N_us428_p4out_BUFS) {
+			if (us428ctls->p4outLast != us428ctls->p4outSent) {
+				int j, send = us428ctls->p4outSent + 1;
+				if (send >= N_us428_p4out_BUFS)
+					send = 0;
+				for (j = 0; j < URBS_AsyncSeq  &&  !err; ++j)
+					if (0 == usX2Y->AS04.urb[j]->status) {
+						us428_p4out_t *p4out = us428ctls->p4out + send;	// FIXME if more then 1 p4out is new, 1 gets lost.
+						usb_fill_bulk_urb(usX2Y->AS04.urb[j], usX2Y->chip.dev,
+								  usb_sndbulkpipe(usX2Y->chip.dev, 0x04), &p4out->val.vol, 
+								  p4out->type == eLT_Light ? sizeof(us428_lights_t) : 5,
+								  i_usX2Y_Out04Int, usX2Y);
+						err = usb_submit_urb(usX2Y->AS04.urb[j], GFP_ATOMIC);
+						us428ctls->p4outSent = send;
+						break;
+					}
+			}
+		}
+
+	if (err) {
+		snd_printk("In04Int() usb_submit_urb err=%i\n", err);
+	}
+
+	urb->dev = usX2Y->chip.dev;
+	usb_submit_urb(urb, GFP_ATOMIC);
+}
+
+/*
+ * Prepare some urbs
+ */
+int usX2Y_AsyncSeq04_init(usX2Ydev_t* usX2Y)
+{
+	int	err = 0,
+		i;
+
+	if (NULL == (usX2Y->AS04.buffer = kmalloc(URB_DataLen_AsyncSeq*URBS_AsyncSeq, GFP_KERNEL))) {
+		err = -ENOMEM;
+	} else
+		for (i = 0; i < URBS_AsyncSeq; ++i) {
+			if (NULL == (usX2Y->AS04.urb[i] = usb_alloc_urb(0, GFP_KERNEL))) {
+				err = -ENOMEM;
+				break;
+			}
+			usb_fill_bulk_urb(	usX2Y->AS04.urb[i], usX2Y->chip.dev,
+						usb_sndbulkpipe(usX2Y->chip.dev, 0x04),
+						usX2Y->AS04.buffer + URB_DataLen_AsyncSeq*i, 0,
+						i_usX2Y_Out04Int, usX2Y
+				);
+		}
+	return err;
+}
+
+int usX2Y_In04_init(usX2Ydev_t* usX2Y)
+{
+	int	err = 0;
+	if (! (usX2Y->In04urb = usb_alloc_urb(0, GFP_KERNEL)))
+		return -ENOMEM;
+
+	if (! (usX2Y->In04Buf = kmalloc(21, GFP_KERNEL))) {
+		usb_free_urb(usX2Y->In04urb);
+		return -ENOMEM;
+	}
+	 
+	init_waitqueue_head(&usX2Y->In04WaitQueue);
+	usb_fill_int_urb(usX2Y->In04urb, usX2Y->chip.dev, usb_rcvintpipe(usX2Y->chip.dev, 0x4),
+			 usX2Y->In04Buf, 21,
+			 i_usX2Y_In04Int, usX2Y,
+			 10);
+	err = usb_submit_urb(usX2Y->In04urb, GFP_KERNEL);
+	return err;
+}
+
+static void usX2Y_unlinkSeq(snd_usX2Y_AsyncSeq_t* S)
+{
+	int	i;
+	for (i = 0; i < URBS_AsyncSeq; ++i) {
+		if (S[i].urb) {
+			usb_unlink_urb(S->urb[i]);
+			usb_free_urb(S->urb[i]);
+			S->urb[i] = NULL;
+		}
+	}
+	if (S->buffer)
+		kfree(S->buffer);
+}
+
+
+static struct usb_device_id snd_usX2Y_usb_id_table[] = {
+	{
+		.match_flags =	USB_DEVICE_ID_MATCH_DEVICE,
+		.idVendor =	0x1604,
+		.idProduct =	USB_ID_US428 
+	},
+	{
+		.match_flags =	USB_DEVICE_ID_MATCH_DEVICE,
+		.idVendor =	0x1604,
+		.idProduct =	USB_ID_US122 
+	},
+ 	{
+		.match_flags =	USB_DEVICE_ID_MATCH_DEVICE,
+		.idVendor =	0x1604,
+		.idProduct =	USB_ID_US224
+	},
+	{ /* terminator */ }
+};
+
+static snd_card_t* usX2Y_create_card(struct usb_device* device)
+{
+	int		dev;
+	snd_card_t*	card;
+	for (dev = 0; dev < SNDRV_CARDS; ++dev)
+		if (enable[dev] && !snd_usX2Y_card_used[dev])
+			break;
+	if (dev >= SNDRV_CARDS)
+		return NULL;
+	card = snd_card_new(index[dev], id[dev], THIS_MODULE, sizeof(usX2Ydev_t));
+	if (!card)
+		return NULL;
+	snd_usX2Y_card_used[usX2Y(card)->chip.index = dev] = 1;
+	card->private_free = snd_usX2Y_card_private_free;
+	usX2Y(card)->chip.dev = device;
+	usX2Y(card)->chip.card = card;
+	init_MUTEX (&usX2Y(card)->open_mutex);
+	INIT_LIST_HEAD(&usX2Y(card)->chip.midi_list);
+	strcpy(card->driver, "USB "NAME_ALLCAPS"");
+	sprintf(card->shortname, "TASCAM "NAME_ALLCAPS"");
+	sprintf(card->longname, "%s (%x:%x if %d at %03d/%03d)",
+		card->shortname, 
+		device->descriptor.idVendor, device->descriptor.idProduct,
+		0,//us428(card)->usbmidi.ifnum,
+		usX2Y(card)->chip.dev->bus->busnum, usX2Y(card)->chip.dev->devnum
+		);
+	snd_card_set_dev(card, &device->dev);
+	return card;
+}
+
+
+static void* usX2Y_usb_probe(struct usb_device* device, struct usb_interface *intf, const struct usb_device_id* device_id)
+{
+	int		err;
+	snd_card_t*	card;
+	if (device->descriptor.idVendor != 0x1604 ||
+	    (device->descriptor.idProduct != USB_ID_US122 &&
+	     device->descriptor.idProduct != USB_ID_US224 &&
+	     device->descriptor.idProduct != USB_ID_US428) ||
+	    !(card = usX2Y_create_card(device)))
+		return 0;
+	if ((err = usX2Y_hwdep_new(card, device)) < 0  ||
+	    (err = snd_card_register(card)) < 0) {
+		snd_card_free(card);
+		return 0;
+	}
+	return card;
+}
+
+/*
+ * new 2.5 USB kernel API
+ */
+static int snd_usX2Y_probe(struct usb_interface *intf, const struct usb_device_id *id)
+{
+	void *chip;
+	chip = usX2Y_usb_probe(interface_to_usbdev(intf), intf, id);
+	if (chip) {
+		dev_set_drvdata(&intf->dev, chip);
+		return 0;
+	} else
+		return -EIO;
+}
+
+static void snd_usX2Y_disconnect(struct usb_interface *intf)
+{
+	usX2Y_usb_disconnect(interface_to_usbdev(intf),
+				 dev_get_drvdata(&intf->dev));
+}
+
+MODULE_DEVICE_TABLE(usb, snd_usX2Y_usb_id_table);
+static struct usb_driver snd_usX2Y_usb_driver = {
+ 	.owner =	THIS_MODULE,
+	.name =		"snd-usb-usx2y",
+	.probe =	snd_usX2Y_probe,
+	.disconnect =	snd_usX2Y_disconnect,
+	.id_table =	snd_usX2Y_usb_id_table,
+};
+
+static void snd_usX2Y_card_private_free(snd_card_t *card)
+{
+	if (usX2Y(card)->In04Buf)
+		kfree(usX2Y(card)->In04Buf);
+	usb_free_urb(usX2Y(card)->In04urb);
+	if (usX2Y(card)->us428ctls_sharedmem)
+		snd_free_pages(usX2Y(card)->us428ctls_sharedmem, sizeof(*usX2Y(card)->us428ctls_sharedmem));
+	if (usX2Y(card)->chip.index >= 0  &&  usX2Y(card)->chip.index < SNDRV_CARDS)
+		snd_usX2Y_card_used[usX2Y(card)->chip.index] = 0;
+}
+
+/*
+ * Frees the device.
+ */
+static void usX2Y_usb_disconnect(struct usb_device* device, void* ptr)
+{
+	if (ptr) {
+		usX2Ydev_t* usX2Y = usX2Y((snd_card_t*)ptr);
+		struct list_head* p;
+		if (usX2Y->chip_status == USX2Y_STAT_CHIP_HUP)	// on 2.6.1 kernel snd_usbmidi_disconnect()
+			return;					// calls us back. better leave :-) .
+		usX2Y->chip.shutdown = 1;
+		usX2Y->chip_status = USX2Y_STAT_CHIP_HUP;
+		usX2Y_unlinkSeq(&usX2Y->AS04);
+		usb_unlink_urb(usX2Y->In04urb);
+		snd_card_disconnect((snd_card_t*)ptr);
+		/* release the midi resources */
+		list_for_each(p, &usX2Y->chip.midi_list) {
+			snd_usbmidi_disconnect(p, &snd_usX2Y_usb_driver);
+		}
+		if (usX2Y->us428ctls_sharedmem) 
+			wake_up(&usX2Y->us428ctls_wait_queue_head);
+		snd_card_free_in_thread((snd_card_t*)ptr);
+	}
+}
+
+static int __init snd_usX2Y_module_init(void)
+{
+	return usb_register(&snd_usX2Y_usb_driver);
+}
+
+static void __exit snd_usX2Y_module_exit(void)
+{
+	usb_deregister(&snd_usX2Y_usb_driver);
+}
+
+module_init(snd_usX2Y_module_init)
+module_exit(snd_usX2Y_module_exit)
diff -Nru a/sound/usb/usx2y/usbusx2y.h b/sound/usb/usx2y/usbusx2y.h
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/sound/usb/usx2y/usbusx2y.h	2004-08-04 17:48:49 -07:00
@@ -0,0 +1,61 @@
+#ifndef USBUSX2Y_H
+#define USBUSX2Y_H
+#include "../usbaudio.h"
+#include "usbus428ctldefs.h" 
+
+#define NRURBS	        2	/* */
+#define NRPACKS		1	/* FIXME: Currently only 1 works.
+				   usb-frames/ms per urb: 1 and 2 are supported.
+				   setting to 2 will PERHAPS make it easier for slow machines.
+				   Jitter will be higher though.
+				   On my PIII 500Mhz Laptop setting to 1 is the only way to go 
+				   for PLAYING synths. i.e. Jack & Aeolus sound quit nicely 
+				   at 4 periods 64 frames. 
+				*/
+
+#define URBS_AsyncSeq 10
+#define URB_DataLen_AsyncSeq 32
+typedef struct {
+	struct urb*	urb[URBS_AsyncSeq];
+	char*   buffer;
+} snd_usX2Y_AsyncSeq_t;
+
+typedef struct {
+	int	submitted;
+	int	len;
+	struct urb*	urb[0];
+} snd_usX2Y_urbSeq_t;
+
+typedef struct snd_usX2Y_substream snd_usX2Y_substream_t;
+
+typedef struct {
+	snd_usb_audio_t 	chip;
+	int			stride;
+	struct urb		*In04urb;
+	void			*In04Buf;
+	char			In04Last[24];
+	unsigned		In04IntCalls;
+	snd_usX2Y_urbSeq_t	*US04;
+	wait_queue_head_t	In04WaitQueue;
+	snd_usX2Y_AsyncSeq_t	AS04;
+	unsigned int		rate,
+				format;
+	int			refframes;
+	int			chip_status;
+	struct semaphore	open_mutex;
+	us428ctls_sharedmem_t	*us428ctls_sharedmem;
+	wait_queue_head_t	us428ctls_wait_queue_head;
+	snd_usX2Y_substream_t	*substream[4];
+} usX2Ydev_t;
+
+
+#define usX2Y(c) ((usX2Ydev_t*)(c)->private_data)
+
+int usX2Y_audio_create(snd_card_t* card);
+
+int usX2Y_AsyncSeq04_init(usX2Ydev_t* usX2Y);
+int usX2Y_In04_init(usX2Ydev_t* usX2Y);
+
+#define NAME_ALLCAPS "US-X2Y"
+
+#endif
diff -Nru a/sound/usb/usx2y/usbusx2yaudio.c b/sound/usb/usx2y/usbusx2yaudio.c
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/sound/usb/usx2y/usbusx2yaudio.c	2004-08-04 17:48:49 -07:00
@@ -0,0 +1,1026 @@
+/*
+ *   US-428 AUDIO
+
+ *   Copyright (c) 2002-2003 by Karsten Wiese
+ 
+ *   based on
+
+ *   (Tentative) USB Audio Driver for ALSA
+ *
+ *   Main and PCM part
+ *
+ *   Copyright (c) 2002 by Takashi Iwai <tiwai@suse.de>
+ *
+ *   Many codes borrowed from audio.c by 
+ *	    Alan Cox (alan@lxorguk.ukuu.org.uk)
+ *	    Thomas Sailer (sailer@ife.ee.ethz.ch)
+ *
+ *
+ *   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 <linux/interrupt.h>
+#include <linux/usb.h>
+#include <sound/core.h>
+#include <sound/info.h>
+#include <sound/pcm.h>
+#include <sound/pcm_params.h>
+#include "usx2y.h"
+#include "usbusx2y.h"
+
+
+struct snd_usX2Y_substream {
+	usX2Ydev_t	*usX2Y;
+	snd_pcm_substream_t *pcm_substream;
+
+	unsigned char		endpoint;		
+	unsigned int		datapipe;  		/* the data i/o pipe */
+	unsigned int		maxpacksize;		/* max packet size in bytes */
+
+	char			prepared,
+				running,
+				stalled;
+
+	int			hwptr;			/* free frame position in the buffer (only for playback) */
+	int			hwptr_done;		/* processed frame position in the buffer */
+	int			transfer_done;		/* processed frames since last period update */
+
+	struct urb		*urb[NRURBS];	/* data urb table */
+	int			next_urb_complete;
+	struct urb		*completed_urb;
+	char			*tmpbuf;			/* temporary buffer for playback */
+	volatile int		submitted_urbs;
+	wait_queue_head_t	wait_queue;
+};
+
+
+
+
+
+
+static int usX2Y_urb_capt_retire(snd_usX2Y_substream_t *subs)
+{
+	struct urb	*urb = subs->completed_urb;
+	snd_pcm_runtime_t *runtime = subs->pcm_substream->runtime;
+	unsigned char	*cp;
+	int 		i, len, lens = 0, hwptr_done = subs->hwptr_done;
+	usX2Ydev_t	*usX2Y = subs->usX2Y;
+
+	for (i = 0; i < NRPACKS; i++) {
+		cp = (unsigned char*)urb->transfer_buffer + urb->iso_frame_desc[i].offset;
+		if (urb->iso_frame_desc[i].status) { /* active? hmm, skip this */
+			snd_printdd("activ frame status %i\n", urb->iso_frame_desc[i].status);
+			return urb->iso_frame_desc[i].status;
+		}
+		len = urb->iso_frame_desc[i].actual_length / usX2Y->stride;
+		if (! len) {
+			snd_printk("0 == len ERROR!\n");
+			continue;
+		}
+
+		/* copy a data chunk */
+		if ((hwptr_done + len) > runtime->buffer_size) {
+			int cnt = runtime->buffer_size - hwptr_done;
+			int blen = cnt * usX2Y->stride;
+			memcpy(runtime->dma_area + hwptr_done * usX2Y->stride, cp, blen);
+			memcpy(runtime->dma_area, cp + blen, len * usX2Y->stride - blen);
+		} else {
+			memcpy(runtime->dma_area + hwptr_done * usX2Y->stride, cp, len * usX2Y->stride);
+		}
+		lens += len;
+		if ((hwptr_done += len) >= runtime->buffer_size)
+			hwptr_done -= runtime->buffer_size;
+	}
+
+	subs->hwptr_done = hwptr_done;
+	subs->transfer_done += lens;
+	/* update the pointer, call callback if necessary */
+	if (subs->transfer_done >= runtime->period_size) {
+		subs->transfer_done -= runtime->period_size;
+		snd_pcm_period_elapsed(subs->pcm_substream);
+	}
+	return 0;
+}
+/*
+ * prepare urb for playback data pipe
+ *
+ * we copy the data directly from the pcm buffer.
+ * the current position to be copied is held in hwptr field.
+ * since a urb can handle only a single linear buffer, if the total
+ * transferred area overflows the buffer boundary, we cannot send
+ * it directly from the buffer.  thus the data is once copied to
+ * a temporary buffer and urb points to that.
+ */
+static int usX2Y_urb_play_prepare(snd_usX2Y_substream_t *subs,
+				  struct usb_iso_packet_descriptor *packet,
+				  struct urb *urb)
+{
+	int count, counts, pack;
+	usX2Ydev_t* usX2Y = subs->usX2Y;
+	snd_pcm_runtime_t *runtime = subs->pcm_substream->runtime;
+
+	count = 0;
+	for (pack = 0; pack < NRPACKS; pack++) {
+		/* calculate the size of a packet */
+		count += (counts = packet[pack].actual_length / usX2Y->stride);
+		if (counts < 43 || counts > 50) {
+			snd_printk("should not be here with counts=%i\n", counts);
+			return -EPIPE;
+		}
+
+		/* set up descriptor */
+		urb->iso_frame_desc[pack].offset = pack ? urb->iso_frame_desc[pack - 1].offset + urb->iso_frame_desc[pack - 1].length : 0;
+		urb->iso_frame_desc[pack].length = counts * usX2Y->stride;
+	}
+	if (subs->hwptr + count > runtime->buffer_size) {
+		/* err, the transferred area goes over buffer boundary.
+		 * copy the data to the temp buffer.
+		 */
+		int len;
+		len = runtime->buffer_size - subs->hwptr;
+		urb->transfer_buffer = subs->tmpbuf;
+		memcpy(subs->tmpbuf, runtime->dma_area + subs->hwptr * usX2Y->stride, len * usX2Y->stride);
+		memcpy(subs->tmpbuf + len * usX2Y->stride, runtime->dma_area, (count - len) * usX2Y->stride);
+		subs->hwptr += count;
+		subs->hwptr -= runtime->buffer_size;
+	} else {
+		/* set the buffer pointer */
+		urb->transfer_buffer = runtime->dma_area + subs->hwptr * usX2Y->stride;
+		if ((subs->hwptr += count) >= runtime->buffer_size)
+			subs->hwptr -= runtime->buffer_size;			
+	}
+	urb->transfer_buffer_length = count * usX2Y->stride;
+	return 0;
+}
+
+/*
+ * process after playback data complete
+ *
+ * update the current position and call callback if a period is processed.
+ */
+inline static int usX2Y_urb_play_retire(snd_usX2Y_substream_t *subs, struct urb *urb)
+{
+	snd_pcm_runtime_t *runtime = subs->pcm_substream->runtime;
+	int		len = (urb->iso_frame_desc[0].actual_length
+#if NRPACKS > 1
+			       + urb->iso_frame_desc[1].actual_length
+#endif
+		               ) / subs->usX2Y->stride;
+
+	subs->transfer_done += len;
+	subs->hwptr_done +=  len;
+	if (subs->hwptr_done >= runtime->buffer_size)
+		subs->hwptr_done -= runtime->buffer_size;
+	if (subs->transfer_done >= runtime->period_size) {
+		subs->transfer_done -= runtime->period_size;
+		snd_pcm_period_elapsed(subs->pcm_substream);
+	}
+	return 0;
+}
+
+inline static int usX2Y_urb_submit(snd_usX2Y_substream_t *subs, struct urb *urb, int frame)
+{
+	int err;
+	if (!urb)
+		return -ENODEV;
+	urb->start_frame = (frame + NRURBS*NRPACKS) & (1024 - 1);
+	urb->hcpriv = NULL;
+	urb->dev = subs->usX2Y->chip.dev; /* we need to set this at each time */
+	if ((err = usb_submit_urb(urb, GFP_ATOMIC)) < 0) {
+		snd_printk("%i\n", err);
+		return err;
+	} else {
+		subs->submitted_urbs++;
+		if (subs->next_urb_complete < 0) 
+			subs->next_urb_complete = 0;
+	}
+	return 0;
+}
+
+
+static inline int frame_distance(int from, int to)
+{
+	int distance = to - from;
+	if (distance < -512)
+		distance += 1024;
+	else
+		if (distance > 511)
+			distance -= 1024;
+	return distance;
+}
+
+
+static void usX2Y_subs_set_next_urb_complete(snd_usX2Y_substream_t *subs)
+{
+	int next_urb_complete = subs->next_urb_complete + 1;
+	int distance;
+	if (next_urb_complete >= NRURBS)
+		next_urb_complete = 0;
+	distance = frame_distance(subs->completed_urb->start_frame,
+				  subs->urb[next_urb_complete]->start_frame);
+	if (1 == distance) {
+		subs->next_urb_complete = next_urb_complete;
+	} else {
+		snd_printdd("distance %i not set_nuc %i %i %i \n", distance, subs->endpoint, next_urb_complete, subs->urb[next_urb_complete]->status);
+		subs->next_urb_complete = -1;
+	}
+}
+
+
+static inline void usX2Y_usbframe_complete(snd_usX2Y_substream_t *capsubs, snd_usX2Y_substream_t *playbacksubs, int frame)
+{
+	{
+		struct urb *urb;
+		if ((urb = playbacksubs->completed_urb)) {
+			if (playbacksubs->prepared)
+				usX2Y_urb_play_retire(playbacksubs, urb);
+			usX2Y_subs_set_next_urb_complete(playbacksubs);
+		}
+		if (playbacksubs->running) {
+			if (NULL == urb)
+				urb = playbacksubs->urb[playbacksubs->next_urb_complete + 1];
+			if (urb && 0 == usX2Y_urb_play_prepare(playbacksubs,
+							       capsubs->completed_urb->iso_frame_desc,
+							       urb)) {
+				if (usX2Y_urb_submit(playbacksubs, urb, frame) < 0)
+					return;
+			} else
+				snd_pcm_stop(playbacksubs->pcm_substream, SNDRV_PCM_STATE_XRUN);
+		}
+		playbacksubs->completed_urb = NULL;
+	}
+	if (capsubs->running)
+		usX2Y_urb_capt_retire(capsubs);
+	usX2Y_subs_set_next_urb_complete(capsubs);
+	if (capsubs->prepared)
+		usX2Y_urb_submit(capsubs, capsubs->completed_urb, frame);
+	capsubs->completed_urb = NULL;
+}
+
+
+static void usX2Y_clients_stop(snd_usX2Y_substream_t *subs)
+{
+	usX2Ydev_t *usX2Y = subs->usX2Y;
+	int i;
+	for (i = 0; i < 4; i++) {
+		snd_usX2Y_substream_t *substream = usX2Y->substream[i];
+		if (substream && substream->running)
+			snd_pcm_stop(substream->pcm_substream, SNDRV_PCM_STATE_XRUN);
+	}
+}
+
+
+static void i_usX2Y_urb_complete(struct urb *urb, struct pt_regs *regs)
+{
+	snd_usX2Y_substream_t *subs = (snd_usX2Y_substream_t*)urb->context;
+
+	subs->submitted_urbs--;
+	if (urb->status) {
+		snd_printk("ep=%i stalled with status=%i\n", subs->endpoint, urb->status);
+		subs->stalled = 1;
+		usX2Y_clients_stop(subs);
+		urb->status = 0;
+		return;
+	}
+	if (urb == subs->urb[subs->next_urb_complete]) {
+		subs->completed_urb = urb;
+	} else {
+		snd_printk("Sequence Error!(ep=%i;nuc=%i,frame=%i)\n",
+			   subs->endpoint, subs->next_urb_complete, urb->start_frame);
+		subs->stalled = 1;
+		usX2Y_clients_stop(subs);
+		return;
+	}
+	if (waitqueue_active(&subs->wait_queue))
+		wake_up(&subs->wait_queue);
+	{
+		snd_usX2Y_substream_t *capsubs = subs->usX2Y->substream[SNDRV_PCM_STREAM_CAPTURE],
+			*playbacksubs = subs->usX2Y->substream[SNDRV_PCM_STREAM_PLAYBACK];
+		if (capsubs->completed_urb &&
+		    (playbacksubs->completed_urb ||
+		     !playbacksubs->prepared ||
+		     (playbacksubs->prepared && (playbacksubs->next_urb_complete < 0 ||	// not started yet
+						 frame_distance(capsubs->completed_urb->start_frame,
+								playbacksubs->urb[playbacksubs->next_urb_complete]->start_frame)
+						 > 0 ||					// other expected later
+						 playbacksubs->stalled))))
+			usX2Y_usbframe_complete(capsubs, playbacksubs, urb->start_frame);
+	}
+}
+
+
+static int usX2Y_urbs_capt_start(snd_usX2Y_substream_t *subs)
+{
+	int i, err;
+
+	for (i = 0; i < NRURBS; i++) {
+		unsigned long pack;
+		struct urb *urb = subs->urb[i];
+		urb->dev = subs->usX2Y->chip.dev;
+		urb->transfer_flags = URB_ISO_ASAP;
+		for (pack = 0; pack < NRPACKS; pack++) {
+			urb->iso_frame_desc[pack].offset = subs->maxpacksize * pack;
+			urb->iso_frame_desc[pack].length = subs->maxpacksize;
+		}
+		urb->transfer_buffer_length = subs->maxpacksize * NRPACKS; 
+		if ((err = usb_submit_urb(urb, GFP_ATOMIC)) < 0) {
+			snd_printk (KERN_ERR "cannot submit datapipe for urb %d, err = %d\n", i, err);
+			return -EPIPE;
+		} else {
+			subs->submitted_urbs++;
+		}
+		urb->transfer_flags = 0;
+	}
+	subs->stalled = 0;
+	subs->next_urb_complete = 0;
+	subs->prepared = 1;
+	return 0;
+}
+
+/* 
+ *  wait until all urbs are processed.
+ */
+static int usX2Y_urbs_wait_clear(snd_usX2Y_substream_t *subs)
+{
+	int timeout = HZ;
+
+	do {
+		if (0 == subs->submitted_urbs)
+			break;
+		set_current_state(TASK_UNINTERRUPTIBLE);
+		snd_printdd("snd_usX2Y_urbs_wait_clear waiting\n");
+		schedule_timeout(1);
+	} while (--timeout > 0);
+	if (subs->submitted_urbs)
+		snd_printk(KERN_ERR "timeout: still %d active urbs..\n", subs->submitted_urbs);
+	return 0;
+}
+/*
+ * return the current pcm pointer.  just return the hwptr_done value.
+ */
+static snd_pcm_uframes_t snd_usX2Y_pcm_pointer(snd_pcm_substream_t *substream)
+{
+	snd_usX2Y_substream_t *subs = (snd_usX2Y_substream_t *)substream->runtime->private_data;
+	return subs->hwptr_done;
+}
+/*
+ * start/stop substream
+ */
+static int snd_usX2Y_pcm_trigger(snd_pcm_substream_t *substream, int cmd)
+{
+	snd_usX2Y_substream_t *subs = (snd_usX2Y_substream_t *)substream->runtime->private_data;
+
+	switch (cmd) {
+	case SNDRV_PCM_TRIGGER_START:
+		snd_printdd("snd_usX2Y_pcm_trigger(START)\n");
+		if (subs->usX2Y->substream[SNDRV_PCM_STREAM_CAPTURE]->stalled)
+			return -EPIPE;
+		else
+			subs->running = 1;
+		break;
+	case SNDRV_PCM_TRIGGER_STOP:
+		snd_printdd("snd_usX2Y_pcm_trigger(STOP)\n");
+		subs->running = 0;
+		break;
+	default:
+		return -EINVAL;
+	}
+	return 0;
+}
+
+
+
+static void usX2Y_urb_release(struct urb** urb, int free_tb)
+{
+	if (*urb) {
+		if (free_tb)
+			kfree((*urb)->transfer_buffer);
+		usb_free_urb(*urb);
+		*urb = 0;
+	}
+}
+/*
+ * release a substream
+ */
+static void usX2Y_urbs_release(snd_usX2Y_substream_t *subs)
+{
+	int i;
+	snd_printdd("snd_usX2Y_urbs_release() %i\n", subs->endpoint);
+	usX2Y_urbs_wait_clear(subs);
+	for (i = 0; i < NRURBS; i++)
+		usX2Y_urb_release(subs->urb + i, subs != subs->usX2Y->substream[SNDRV_PCM_STREAM_PLAYBACK]);
+
+	if (subs->tmpbuf) {
+		kfree(subs->tmpbuf);
+		subs->tmpbuf = 0;
+	}
+}
+
+static void usX2Y_substream_prepare(snd_usX2Y_substream_t *subs)
+{
+	snd_printdd("usX2Y_substream_prepare() ep=%i urb0=%p urb1=%p\n", subs->endpoint, subs->urb[0], subs->urb[1]);
+	/* reset the pointer */
+	subs->hwptr = 0;
+	subs->hwptr_done = 0;
+	subs->transfer_done = 0;
+}
+
+
+/*
+ * initialize a substream's urbs
+ */
+static int usX2Y_urbs_allocate(snd_usX2Y_substream_t *subs)
+{
+	int i;
+	int is_playback = subs == subs->usX2Y->substream[SNDRV_PCM_STREAM_PLAYBACK];
+	struct usb_device *dev = subs->usX2Y->chip.dev;
+
+	snd_assert(!subs->prepared, return 0);
+
+	if (is_playback) {	/* allocate a temporary buffer for playback */
+		subs->datapipe = usb_sndisocpipe(dev, subs->endpoint);
+		subs->maxpacksize = dev->epmaxpacketout[subs->endpoint];
+		if (NULL == subs->tmpbuf) {
+			subs->tmpbuf = kcalloc(NRPACKS, subs->maxpacksize, GFP_KERNEL);
+			if (NULL == subs->tmpbuf) {
+				snd_printk(KERN_ERR "cannot malloc tmpbuf\n");
+				return -ENOMEM;
+			}
+		}
+	} else {
+		subs->datapipe = usb_rcvisocpipe(dev, subs->endpoint);
+		subs->maxpacksize = dev->epmaxpacketin[subs->endpoint];
+	}
+
+	/* allocate and initialize data urbs */
+	for (i = 0; i < NRURBS; i++) {
+		struct urb** purb = subs->urb + i;
+		if (*purb)
+			continue;
+		*purb = usb_alloc_urb(NRPACKS, GFP_KERNEL);
+		if (NULL == *purb) {
+			usX2Y_urbs_release(subs);
+			return -ENOMEM;
+		}
+		if (!is_playback && !(*purb)->transfer_buffer) {
+			/* allocate a capture buffer per urb */
+			(*purb)->transfer_buffer = kmalloc(subs->maxpacksize*NRPACKS, GFP_KERNEL);
+			if (NULL == (*purb)->transfer_buffer) {
+				usX2Y_urbs_release(subs);
+				return -ENOMEM;
+			}
+		}
+		(*purb)->dev = dev;
+		(*purb)->pipe = subs->datapipe;
+		(*purb)->number_of_packets = NRPACKS;
+		(*purb)->context = subs;
+		(*purb)->interval = 1;
+		(*purb)->complete = snd_usb_complete_callback(i_usX2Y_urb_complete);
+	}
+	return 0;
+}
+
+static void i_usX2Y_04Int(struct urb* urb, struct pt_regs *regs)
+{
+	usX2Ydev_t*	usX2Y = urb->context;
+	
+	if (urb->status) {
+		snd_printk("snd_usX2Y_04Int() urb->status=%i\n", urb->status);
+		return;
+	}
+	if (0 == --usX2Y->US04->len)
+		wake_up(&usX2Y->In04WaitQueue);
+}
+/*
+ * allocate a buffer, setup samplerate
+ *
+ * so far we use a physically linear buffer although packetize transfer
+ * doesn't need a continuous area.
+ * if sg buffer is supported on the later version of alsa, we'll follow
+ * that.
+ */
+static struct s_c2
+{
+	char c1, c2;
+}
+	SetRate44100[] =
+{
+	{ 0x14, 0x08},	// this line sets 44100, well actually a little less
+	{ 0x18, 0x40},	// only tascam / frontier design knows the further lines .......
+	{ 0x18, 0x42},
+	{ 0x18, 0x45},
+	{ 0x18, 0x46},
+	{ 0x18, 0x48},
+	{ 0x18, 0x4A},
+	{ 0x18, 0x4C},
+	{ 0x18, 0x4E},
+	{ 0x18, 0x50},
+	{ 0x18, 0x52},
+	{ 0x18, 0x54},
+	{ 0x18, 0x56},
+	{ 0x18, 0x58},
+	{ 0x18, 0x5A},
+	{ 0x18, 0x5C},
+	{ 0x18, 0x5E},
+	{ 0x18, 0x60},
+	{ 0x18, 0x62},
+	{ 0x18, 0x64},
+	{ 0x18, 0x66},
+	{ 0x18, 0x68},
+	{ 0x18, 0x6A},
+	{ 0x18, 0x6C},
+	{ 0x18, 0x6E},
+	{ 0x18, 0x70},
+	{ 0x18, 0x72},
+	{ 0x18, 0x74},
+	{ 0x18, 0x76},
+	{ 0x18, 0x78},
+	{ 0x18, 0x7A},
+	{ 0x18, 0x7C},
+	{ 0x18, 0x7E}
+};
+static struct s_c2 SetRate48000[] =
+{
+	{ 0x14, 0x09},	// this line sets 48000, well actually a little less
+	{ 0x18, 0x40},	// only tascam / frontier design knows the further lines .......
+	{ 0x18, 0x42},
+	{ 0x18, 0x45},
+	{ 0x18, 0x46},
+	{ 0x18, 0x48},
+	{ 0x18, 0x4A},
+	{ 0x18, 0x4C},
+	{ 0x18, 0x4E},
+	{ 0x18, 0x50},
+	{ 0x18, 0x52},
+	{ 0x18, 0x54},
+	{ 0x18, 0x56},
+	{ 0x18, 0x58},
+	{ 0x18, 0x5A},
+	{ 0x18, 0x5C},
+	{ 0x18, 0x5E},
+	{ 0x18, 0x60},
+	{ 0x18, 0x62},
+	{ 0x18, 0x64},
+	{ 0x18, 0x66},
+	{ 0x18, 0x68},
+	{ 0x18, 0x6A},
+	{ 0x18, 0x6C},
+	{ 0x18, 0x6E},
+	{ 0x18, 0x70},
+	{ 0x18, 0x73},
+	{ 0x18, 0x74},
+	{ 0x18, 0x76},
+	{ 0x18, 0x78},
+	{ 0x18, 0x7A},
+	{ 0x18, 0x7C},
+	{ 0x18, 0x7E}
+};
+#define NOOF_SETRATE_URBS ARRAY_SIZE(SetRate48000)
+
+static int usX2Y_rate_set(usX2Ydev_t *usX2Y, int rate)
+{
+	int			err = 0, i;
+	snd_usX2Y_urbSeq_t	*us = NULL;
+	int			*usbdata = NULL;
+	DECLARE_WAITQUEUE(wait, current);
+	struct s_c2		*ra = rate == 48000 ? SetRate48000 : SetRate44100;
+
+	if (usX2Y->rate != rate) {
+		do {
+			us = kmalloc(sizeof(*us) + sizeof(struct urb*) * NOOF_SETRATE_URBS, GFP_KERNEL);
+			if (NULL == us) {
+				err = -ENOMEM;
+				break;
+			}
+			memset(us, 0, sizeof(*us) + sizeof(struct urb*) * NOOF_SETRATE_URBS); 
+			usbdata = kmalloc(sizeof(int)*NOOF_SETRATE_URBS, GFP_KERNEL);
+			if (NULL == usbdata) {
+				err = -ENOMEM;
+				break;
+			}
+			for (i = 0; i < NOOF_SETRATE_URBS; ++i) {
+				if (NULL == (us->urb[i] = usb_alloc_urb(0, GFP_KERNEL))) {
+					err = -ENOMEM;
+					break;
+				}
+				((char*)(usbdata + i))[0] = ra[i].c1;
+				((char*)(usbdata + i))[1] = ra[i].c2;
+				usb_fill_bulk_urb(us->urb[i], usX2Y->chip.dev, usb_sndbulkpipe(usX2Y->chip.dev, 4),
+						  usbdata + i, 2, i_usX2Y_04Int, usX2Y);
+#ifdef OLD_USB
+				us->urb[i]->transfer_flags = USB_QUEUE_BULK;
+#endif
+			}
+			if (err)
+				break;
+
+			add_wait_queue(&usX2Y->In04WaitQueue, &wait);
+			set_current_state(TASK_INTERRUPTIBLE);
+			us->submitted =	0;
+			us->len =	NOOF_SETRATE_URBS;
+			usX2Y->US04 =	us;
+		
+			do {
+				signed long	timeout = schedule_timeout(HZ/2);
+                	
+				if (signal_pending(current)) {
+					err = -ERESTARTSYS;
+					break;
+				}
+				if (0 == timeout) {
+					err = -ENODEV;
+					break;
+				}
+				usX2Y->rate = rate;
+				usX2Y->refframes = rate == 48000 ? 47 : 44;
+			} while (0);
+		
+			remove_wait_queue(&usX2Y->In04WaitQueue, &wait);
+		} while (0);
+
+		if (us) {
+			us->submitted =	2*NOOF_SETRATE_URBS;
+			for (i = 0; i < NOOF_SETRATE_URBS; ++i) {
+				usb_unlink_urb(us->urb[i]);
+				usb_free_urb(us->urb[i]);
+			}
+			usX2Y->US04 = NULL;
+			kfree(usbdata);
+			kfree(us);
+		}
+	}
+
+	return err;
+}
+
+
+static int usX2Y_format_set(usX2Ydev_t *usX2Y, snd_pcm_format_t format)
+{
+	int alternate, unlink_err, err;
+	struct list_head* p;
+	if (format == SNDRV_PCM_FORMAT_S24_3LE) {
+		alternate = 2;
+		usX2Y->stride = 6;
+	} else {
+		alternate = 1;
+		usX2Y->stride = 4;
+	}
+	list_for_each(p, &usX2Y->chip.midi_list) {
+		snd_usbmidi_input_stop(p);
+	}
+	unlink_err = usb_unlink_urb(usX2Y->In04urb);
+	if ((err = usb_set_interface(usX2Y->chip.dev, 0, alternate))) {
+		snd_printk("usb_set_interface error \n");
+		return err;
+	}
+	if (0 == unlink_err) {
+		usX2Y->In04urb->dev = usX2Y->chip.dev;
+		err = usb_submit_urb(usX2Y->In04urb, GFP_KERNEL);
+	}
+	list_for_each(p, &usX2Y->chip.midi_list) {
+		snd_usbmidi_input_start(p);
+	}
+	usX2Y->format = format;
+	usX2Y->rate = 0;
+	return err;
+}
+
+
+static int snd_usX2Y_pcm_hw_params(snd_pcm_substream_t *substream,
+				   snd_pcm_hw_params_t *hw_params)
+{
+	int			err = 0;
+	unsigned int		rate = params_rate(hw_params);
+	snd_pcm_format_t	format = params_format(hw_params);
+	snd_printdd("snd_usX2Y_hw_params(%p, %p)\n", substream, hw_params);
+
+	{	// all pcm substreams off one usX2Y have to operate at the same rate & format
+		snd_card_t *card = substream->pstr->pcm->card;
+		struct list_head *list;
+		list_for_each(list, &card->devices) {
+			snd_device_t *dev;
+			snd_pcm_t *pcm;
+			int s;
+			dev = snd_device(list);
+			if (dev->type != SNDRV_DEV_PCM)
+				continue;
+			pcm = dev->device_data;
+			for (s = 0; s < 2; ++s) {
+				snd_pcm_substream_t *test_substream;
+				test_substream = pcm->streams[s].substream;
+				if (test_substream && test_substream != substream  &&
+				    test_substream->runtime &&
+				    ((test_substream->runtime->format &&
+				      test_substream->runtime->format != format) ||
+				     (test_substream->runtime->rate &&
+				      test_substream->runtime->rate != rate)))
+					return -EINVAL;
+			}
+		}
+	}
+	if (0 > (err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params)))) {
+		snd_printk("snd_pcm_lib_malloc_pages(%p, %i) returned %i\n", substream, params_buffer_bytes(hw_params), err);
+		return err;
+	}
+	return 0;
+}
+
+/*
+ * free the buffer
+ */
+static int snd_usX2Y_pcm_hw_free(snd_pcm_substream_t *substream)
+{
+	snd_pcm_runtime_t *runtime = substream->runtime;
+	snd_usX2Y_substream_t *subs = (snd_usX2Y_substream_t *)runtime->private_data;
+	snd_printdd("snd_usX2Y_hw_free(%p)\n", substream);
+
+	if (SNDRV_PCM_STREAM_PLAYBACK == substream->stream) {
+		snd_usX2Y_substream_t *cap_subs = subs->usX2Y->substream[SNDRV_PCM_STREAM_CAPTURE];
+		subs->prepared = 0;
+		usX2Y_urbs_release(subs);
+		if (!cap_subs->pcm_substream ||
+		    !cap_subs->pcm_substream->runtime ||
+		    !cap_subs->pcm_substream->runtime->status ||
+		    cap_subs->pcm_substream->runtime->status->state < SNDRV_PCM_STATE_PREPARED) {
+			cap_subs->prepared = 0;
+			usX2Y_urbs_release(cap_subs);
+		}
+	} else {
+		snd_usX2Y_substream_t *playback_subs = subs->usX2Y->substream[SNDRV_PCM_STREAM_PLAYBACK];
+		if (!playback_subs->prepared) {
+			subs->prepared = 0;
+			usX2Y_urbs_release(subs);
+		}
+	}
+
+	return snd_pcm_lib_free_pages(substream);
+}
+/*
+ * prepare callback
+ *
+ * set format and initialize urbs
+ */
+static int snd_usX2Y_pcm_prepare(snd_pcm_substream_t *substream)
+{
+	snd_pcm_runtime_t *runtime = substream->runtime;
+	snd_usX2Y_substream_t *subs = (snd_usX2Y_substream_t *)runtime->private_data;
+	snd_usX2Y_substream_t *capsubs = subs->usX2Y->substream[SNDRV_PCM_STREAM_CAPTURE];
+	int err = 0;
+	snd_printdd("snd_usX2Y_pcm_prepare(%p)\n", substream);
+
+// Start hardware streams
+// SyncStream first....
+	if (! capsubs->prepared) {
+		if (subs->usX2Y->format != runtime->format)
+			if ((err = usX2Y_format_set(subs->usX2Y, runtime->format)) < 0)
+				return err;
+		if (subs->usX2Y->rate != runtime->rate)
+			if ((err = usX2Y_rate_set(subs->usX2Y, runtime->rate)) < 0)
+				return err;
+		snd_printdd("starting capture pipe for playpipe\n");
+		usX2Y_urbs_allocate(capsubs);
+		capsubs->completed_urb = 0;
+		{
+			DECLARE_WAITQUEUE(wait, current);
+			add_wait_queue(&capsubs->wait_queue, &wait);
+			if (0 <= (err = usX2Y_urbs_capt_start(capsubs))) {
+				signed long timeout;
+				set_current_state(TASK_INTERRUPTIBLE);
+				timeout = schedule_timeout(HZ/4);
+				if (signal_pending(current))
+					err = -ERESTARTSYS;
+				else {
+					snd_printdd("%li\n", HZ/4 - timeout);
+					if (0 == timeout)
+						err = -EPIPE;
+				}
+			}
+			remove_wait_queue(&capsubs->wait_queue, &wait);
+			if (0 > err)
+				return err;
+		}
+	}
+
+	if (subs != capsubs) {
+		int u;
+		if (!subs->prepared) {
+			if ((err = usX2Y_urbs_allocate(subs)) < 0)
+				return err;
+			subs->prepared = 1;
+		}
+		while (subs->submitted_urbs)
+		for (u = 0; u < NRURBS; u++) {
+			snd_printdd("%i\n", subs->urb[u]->status);
+			while(subs->urb[u]->status  ||  NULL != subs->urb[u]->hcpriv) {
+				signed long timeout;
+				snd_printdd("ep=%i waiting for urb=%p status=%i hcpriv=%p\n",
+					   subs->endpoint, subs->urb[u],
+					   subs->urb[u]->status, subs->urb[u]->hcpriv);
+				set_current_state(TASK_INTERRUPTIBLE);
+				timeout = schedule_timeout(HZ/10);
+				if (signal_pending(current)) {
+					return -ERESTARTSYS;
+				}
+			}
+		}
+		subs->completed_urb = 0;
+		subs->next_urb_complete = -1;
+		subs->stalled = 0;
+	}
+
+	usX2Y_substream_prepare(subs);
+	return err;
+}
+
+static snd_pcm_hardware_t snd_usX2Y_2c =
+{
+	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
+				 SNDRV_PCM_INFO_BLOCK_TRANSFER |
+				 SNDRV_PCM_INFO_MMAP_VALID),
+	.formats =                 SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_3LE,
+	.rates =                   SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000,
+	.rate_min =                44100,
+	.rate_max =                48000,
+	.channels_min =            2,
+	.channels_max =            2,
+	.buffer_bytes_max =	(2*128*1024),
+	.period_bytes_min =	64,
+	.period_bytes_max =	(128*1024),
+	.periods_min =		2,
+	.periods_max =		1024,
+	.fifo_size =              0
+};
+
+
+
+static int snd_usX2Y_pcm_open(snd_pcm_substream_t *substream)
+{
+	snd_usX2Y_substream_t	*subs = ((snd_usX2Y_substream_t **)
+					 snd_pcm_substream_chip(substream))[substream->stream];
+	snd_pcm_runtime_t	*runtime = substream->runtime;
+
+	runtime->hw = snd_usX2Y_2c;
+	runtime->private_data = subs;
+	subs->pcm_substream = substream;
+	snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_PERIOD_TIME, 1000, 200000);
+	return 0;
+}
+
+
+
+static int snd_usX2Y_pcm_close(snd_pcm_substream_t *substream)
+{
+	snd_pcm_runtime_t *runtime = substream->runtime;
+	snd_usX2Y_substream_t *subs = (snd_usX2Y_substream_t *)runtime->private_data;
+	int err = 0;
+
+	subs->pcm_substream = NULL;
+
+	return err;
+}
+
+
+static snd_pcm_ops_t snd_usX2Y_pcm_ops = 
+{
+	.open =		snd_usX2Y_pcm_open,
+	.close =	snd_usX2Y_pcm_close,
+	.ioctl =	snd_pcm_lib_ioctl,
+	.hw_params =	snd_usX2Y_pcm_hw_params,
+	.hw_free =	snd_usX2Y_pcm_hw_free,
+	.prepare =	snd_usX2Y_pcm_prepare,
+	.trigger =	snd_usX2Y_pcm_trigger,
+	.pointer =	snd_usX2Y_pcm_pointer,
+};
+
+
+/*
+ * free a usb stream instance
+ */
+static void usX2Y_audio_stream_free(snd_usX2Y_substream_t **usX2Y_substream)
+{
+	if (NULL != usX2Y_substream[SNDRV_PCM_STREAM_PLAYBACK]) {
+		kfree(usX2Y_substream[SNDRV_PCM_STREAM_PLAYBACK]);
+		usX2Y_substream[SNDRV_PCM_STREAM_PLAYBACK] = NULL;
+	}
+	kfree(usX2Y_substream[SNDRV_PCM_STREAM_CAPTURE]);
+	usX2Y_substream[SNDRV_PCM_STREAM_CAPTURE] = NULL;
+}
+
+static void snd_usX2Y_pcm_private_free(snd_pcm_t *pcm)
+{
+	snd_usX2Y_substream_t **usX2Y_stream = pcm->private_data;
+	if (usX2Y_stream) {
+		snd_pcm_lib_preallocate_free_for_all(pcm);
+		usX2Y_audio_stream_free(usX2Y_stream);
+	}
+}
+
+static int usX2Y_audio_stream_new(snd_card_t *card, int playback_endpoint, int capture_endpoint)
+{
+	snd_pcm_t *pcm;
+	int err, i;
+	snd_usX2Y_substream_t **usX2Y_substream =
+		usX2Y(card)->substream + 2 * usX2Y(card)->chip.pcm_devs;
+
+	for (i = playback_endpoint ? SNDRV_PCM_STREAM_PLAYBACK : SNDRV_PCM_STREAM_CAPTURE;
+	     i <= SNDRV_PCM_STREAM_CAPTURE; ++i) {
+		usX2Y_substream[i] = kcalloc(1, sizeof(snd_usX2Y_substream_t), GFP_KERNEL);
+		if (NULL == usX2Y_substream[i]) {
+			snd_printk(KERN_ERR "cannot malloc\n");
+			return -ENOMEM;
+		}
+		init_waitqueue_head(&usX2Y_substream[i]->wait_queue);
+		usX2Y_substream[i]->usX2Y = usX2Y(card);
+	}
+
+	if (playback_endpoint)
+		usX2Y_substream[SNDRV_PCM_STREAM_PLAYBACK]->endpoint = playback_endpoint;
+	usX2Y_substream[SNDRV_PCM_STREAM_CAPTURE]->endpoint = capture_endpoint;
+
+	err = snd_pcm_new(card, NAME_ALLCAPS" Audio", usX2Y(card)->chip.pcm_devs,
+			  playback_endpoint ? 1 : 0, 1,
+			  &pcm);
+	if (err < 0) {
+		usX2Y_audio_stream_free(usX2Y_substream);
+		return err;
+	}
+
+	if (playback_endpoint)
+		snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_usX2Y_pcm_ops);
+	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_usX2Y_pcm_ops);
+
+	pcm->private_data = usX2Y_substream;
+	pcm->private_free = snd_usX2Y_pcm_private_free;
+	pcm->info_flags = 0;
+
+	sprintf(pcm->name, NAME_ALLCAPS" Audio #%d", usX2Y(card)->chip.pcm_devs);
+
+	if ((playback_endpoint &&
+	     0 > (err = snd_pcm_lib_preallocate_pages(pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream,
+						     SNDRV_DMA_TYPE_CONTINUOUS,
+						     snd_dma_continuous_data(GFP_KERNEL),
+						     64*1024, 128*1024))) ||
+	    0 > (err = snd_pcm_lib_preallocate_pages(pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream,
+	    					     SNDRV_DMA_TYPE_CONTINUOUS,
+	    					     snd_dma_continuous_data(GFP_KERNEL),
+						     64*1024, 128*1024))) {
+		snd_usX2Y_pcm_private_free(pcm);
+		return err;
+	}
+	usX2Y(card)->chip.pcm_devs++;
+
+	return 0;
+}
+
+/*
+ * free the chip instance
+ *
+ * here we have to do not much, since pcm and controls are already freed
+ *
+ */
+static int snd_usX2Y_device_dev_free(snd_device_t *device)
+{
+	return 0;
+}
+
+
+/*
+ * create a chip instance and set its names.
+ */
+int usX2Y_audio_create(snd_card_t* card)
+{
+	int err = 0;
+	static snd_device_ops_t ops = {
+		.dev_free = snd_usX2Y_device_dev_free,
+	};
+	
+	INIT_LIST_HEAD(&usX2Y(card)->chip.pcm_list);
+
+	if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, usX2Y(card), &ops)) < 0) {
+//		snd_usX2Y_audio_free(usX2Y(card));
+		return err;
+	}
+
+	if (0 > (err = usX2Y_audio_stream_new(card, 0xA, 0x8)))
+		return err;
+	if (usX2Y(card)->chip.dev->descriptor.idProduct == USB_ID_US428)
+	     if (0 > (err = usX2Y_audio_stream_new(card, 0, 0xA)))
+		     return err;
+	if (usX2Y(card)->chip.dev->descriptor.idProduct != USB_ID_US122)
+		err = usX2Y_rate_set(usX2Y(card), 44100);	// Lets us428 recognize output-volume settings, disturbs us122.
+	return err;
+}
diff -Nru a/sound/usb/usx2y/usx2y.h b/sound/usb/usx2y/usx2y.h
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/sound/usb/usx2y/usx2y.h	2004-08-04 17:48:49 -07:00
@@ -0,0 +1,49 @@
+/*
+ * Driver for Tascam US-X2Y USB soundcards
+ *
+ * Copyright (c) 2003 by Karsten Wiese <annabellesgarden@yahoo.de>
+ *
+ *   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
+ */
+
+#ifndef __SOUND_USX2Y_COMMON_H
+#define __SOUND_USX2Y_COMMON_H
+
+
+#define USX2Y_DRIVER_VERSION	0x0100	/* 0.1.0 */
+
+
+/* hwdep id string */
+#define SND_USX2Y_LOADER_ID		"USX2Y Loader"
+
+/* hardware type */
+enum {
+	USX2Y_TYPE_122,
+	USX2Y_TYPE_224,
+	USX2Y_TYPE_428,
+	USX2Y_TYPE_NUMS
+};
+
+#define USB_ID_US122 0x8007
+#define USB_ID_US224 0x8005
+#define USB_ID_US428 0x8001
+
+/* chip status */
+enum {
+	USX2Y_STAT_CHIP_INIT	= (1 << 0),	/* all operational */
+	USX2Y_STAT_CHIP_HUP	= (1 << 31),	/* all operational */
+};
+
+#endif /* __SOUND_USX2Y_COMMON_H */