On Wed, 16 Jan 2002, Helge Hafting wrote:
> I use alsa 0.9.0beta10 for sound. It used to work fine, but
> don't compile with linux kernel 2.5.2. This seems to
> be a problem with the kdev_t type that have changed lately.
>
> Is there a patch for this?
>
> Helge Hafting
Here is a patch to get 0.9.0beta10 working under 2.5.x. Enjoy it :)
(2HH : sorry, first I forgot to CC the list)
Bye
--
Tomas Kasparek (sioux, xkaspa06)
[EMAIL PROTECTED]
[EMAIL PROTECTED]
student UIVT FEI VUT Brno
diff -N -r -u alsa-driver-0.9.0beta10/Makefile alsa-driver-own/Makefile
--- alsa-driver-0.9.0beta10/Makefile Mon Oct 1 09:26:48 2001
+++ alsa-driver-own/Makefile Wed Jan 16 11:40:25 2002
@@ -30,8 +30,9 @@
all: compile
-sound:
+symlinks:
ln -sf include sound
+ cd include && ln -sf /usr/include/linux/major.h majors.h
include/sndversions.h:
make dep
@@ -44,7 +45,7 @@
cp utils/patches/byteswap.h /usr/include ; \
fi
-compile: /usr/include/byteswap.h sound include/sndversions.h include/isapnp.h
cards.config
+compile: /usr/include/byteswap.h symlinks include/sndversions.h include/isapnp.h
+cards.config
@for d in $(SUBDIRS); do if ! $(MAKE) -C $$d; then exit 1; fi; done
@echo
@echo "ALSA modules were successfully compiled."
@@ -109,14 +110,15 @@
rm -f doc/*~
mrproper: clean
+ $(MAKE) -C utils mrproper
+ $(MAKE) -C include mrproper
rm -f config.cache config.log config.status Makefile.conf
- rm -f utils/alsa-driver.spec
+ rm -f snddevices version cards.config sound
cvsclean: mrproper
- rm -f configure snddevices aclocal.m4 include/config.h include/isapnp.h
+ rm -f configure aclocal.m4 include/isapnp.h
pack: mrproper
- chmod 755 utils/alsasound
mv ../alsa-driver ../alsa-driver-$(CONFIG_SND_VERSION)
tar --exclude=CVS --owner=root --group=root -cvI -C .. -f
../alsa-driver-$(CONFIG_SND_VERSION).tar.bz2 alsa-driver-$(CONFIG_SND_VERSION)
mv ../alsa-driver-$(CONFIG_SND_VERSION) ../alsa-driver
diff -N -r -u alsa-driver-0.9.0beta10/configure.in alsa-driver-own/configure.in
--- alsa-driver-0.9.0beta10/configure.in Wed Jan 16 11:22:45 2002
+++ alsa-driver-own/configure.in Wed Jan 16 11:24:48 2002
@@ -634,7 +634,8 @@
AC_SUBST(GENKSYMS)
dnl Output files...
-AC_OUTPUT(version Makefile.conf snddevices utils/alsa-driver.spec utils/buildrpm
cards.config)
+AC_OUTPUT(version Makefile.conf snddevices utils/alsa-driver.spec utils/buildrpm
+cards.config utils/alsasound)
dnl Make right rights for scripts
chmod 755 $srcdir/snddevices
+chmod 755 $srcdir/utils/alsasound
diff -N -r -u alsa-driver-0.9.0beta10/include/Makefile
alsa-driver-own/include/Makefile
--- alsa-driver-0.9.0beta10/include/Makefile Wed May 12 00:07:17 1999
+++ alsa-driver-own/include/Makefile Wed Jan 16 11:40:38 2002
@@ -11,3 +11,5 @@
clean:
rm -f core .depend *.o *.orig *~ modules/*.ver
+mrproper:
+ rm -f config.h config1.h version.h majors.h
diff -N -r -u alsa-driver-0.9.0beta10/kernel/control.c
alsa-driver-own/kernel/control.c
--- alsa-driver-0.9.0beta10/kernel/control.c Fri Oct 12 12:51:53 2001
+++ alsa-driver-own/kernel/control.c Wed Jan 16 10:19:37 2002
@@ -36,7 +36,7 @@
static int snd_ctl_open(struct inode *inode, struct file *file)
{
- int cardnum = SNDRV_MINOR_CARD(MINOR(inode->i_rdev));
+ int cardnum = SNDRV_MINOR_CARD(minor(inode->i_rdev));
unsigned long flags;
snd_card_t *card;
snd_ctl_file_t *ctl;
diff -N -r -u alsa-driver-0.9.0beta10/kernel/hwdep.c alsa-driver-own/kernel/hwdep.c
--- alsa-driver-0.9.0beta10/kernel/hwdep.c Sat Oct 13 12:44:14 2001
+++ alsa-driver-own/kernel/hwdep.c Wed Jan 16 10:34:03 2002
@@ -23,6 +23,7 @@
#include <sound/driver.h>
#include <sound/control.h>
#include <sound/minors.h>
+#include <sound/majors.h>
#include <sound/hwdep.h>
#include <sound/info.h>
@@ -69,7 +70,7 @@
static int snd_hwdep_open(struct inode *inode, struct file * file)
{
- int major = MAJOR(inode->i_rdev);
+ int major = major(inode->i_rdev);
int cardnum;
int device;
snd_hwdep_t *hw;
@@ -78,12 +79,12 @@
switch (major) {
case CONFIG_SND_MAJOR:
- cardnum = SNDRV_MINOR_CARD(MINOR(inode->i_rdev));
- device = SNDRV_MINOR_DEVICE(MINOR(inode->i_rdev)) - SNDRV_MINOR_HWDEP;
+ cardnum = SNDRV_MINOR_CARD(minor(inode->i_rdev));
+ device = SNDRV_MINOR_DEVICE(minor(inode->i_rdev)) - SNDRV_MINOR_HWDEP;
break;
#ifdef CONFIG_SND_OSSEMUL
case SOUND_MAJOR:
- cardnum = SNDRV_MINOR_OSS_CARD(MINOR(inode->i_rdev));
+ cardnum = SNDRV_MINOR_OSS_CARD(minor(inode->i_rdev));
device = 0;
break;
#endif
diff -N -r -u alsa-driver-0.9.0beta10/kernel/info.c alsa-driver-own/kernel/info.c
--- alsa-driver-0.9.0beta10/kernel/info.c Wed Nov 21 16:31:14 2001
+++ alsa-driver-own/kernel/info.c Wed Jan 16 10:18:51 2002
@@ -851,7 +851,7 @@
#else
static inline void snd_info_device_entry_prepare(struct proc_dir_entry *de,
snd_info_entry_t *entry)
{
- de->rdev = MKDEV(entry->c.device.major, entry->c.device.minor);
+ de->rdev = mk_kdev(entry->c.device.major, entry->c.device.minor);
de->owner = THIS_MODULE;
}
#endif /* LINUX_2_3 */
diff -N -r -u alsa-driver-0.9.0beta10/kernel/oss/mixer_oss.c
alsa-driver-own/kernel/oss/mixer_oss.c
--- alsa-driver-0.9.0beta10/kernel/oss/mixer_oss.c Fri Oct 12 12:43:18 2001
+++ alsa-driver-own/kernel/oss/mixer_oss.c Wed Jan 16 10:35:03 2002
@@ -33,7 +33,7 @@
static int snd_mixer_oss_open(struct inode *inode, struct file *file)
{
- int cardnum = SNDRV_MINOR_OSS_CARD(MINOR(inode->i_rdev));
+ int cardnum = SNDRV_MINOR_OSS_CARD(minor(inode->i_rdev));
snd_card_t *card;
snd_mixer_oss_file_t *fmixer;
diff -N -r -u alsa-driver-0.9.0beta10/kernel/oss/pcm_oss.c
alsa-driver-own/kernel/oss/pcm_oss.c
--- alsa-driver-0.9.0beta10/kernel/oss/pcm_oss.c Fri Oct 12 12:43:18 2001
+++ alsa-driver-own/kernel/oss/pcm_oss.c Wed Jan 16 10:35:38 2002
@@ -1488,7 +1488,7 @@
static int snd_pcm_oss_open(struct inode *inode, struct file *file)
{
- int minor = MINOR(inode->i_rdev);
+ int minor = minor(inode->i_rdev);
int cardnum = SNDRV_MINOR_OSS_CARD(minor);
int device;
int err;
diff -N -r -u alsa-driver-0.9.0beta10/kernel/pcm_native.c
alsa-driver-own/kernel/pcm_native.c
--- alsa-driver-0.9.0beta10/kernel/pcm_native.c Mon Nov 19 17:13:44 2001
+++ alsa-driver-own/kernel/pcm_native.c Wed Jan 16 10:20:51 2002
@@ -1413,11 +1413,11 @@
return 0;
inode = file->f_dentry->d_inode;
if (!S_ISCHR(inode->i_mode) ||
- MAJOR(inode->i_rdev) != CONFIG_SND_MAJOR) {
+ major(inode->i_rdev) != CONFIG_SND_MAJOR) {
fput(file);
return 0;
}
- minor = MINOR(inode->i_rdev);
+ minor = minor(inode->i_rdev);
if (minor >= 256 ||
minor % SNDRV_MINOR_DEVICES < SNDRV_MINOR_PCM_PLAYBACK) {
fput(file);
@@ -1887,8 +1887,8 @@
int snd_pcm_open(struct inode *inode, struct file *file)
{
- int cardnum = SNDRV_MINOR_CARD(MINOR(inode->i_rdev));
- int device = SNDRV_MINOR_DEVICE(MINOR(inode->i_rdev));
+ int cardnum = SNDRV_MINOR_CARD(minor(inode->i_rdev));
+ int device = SNDRV_MINOR_DEVICE(minor(inode->i_rdev));
int err;
snd_pcm_t *pcm;
snd_pcm_file_t *pcm_file;
diff -N -r -u alsa-driver-0.9.0beta10/kernel/rawmidi.c
alsa-driver-own/kernel/rawmidi.c
--- alsa-driver-0.9.0beta10/kernel/rawmidi.c Fri Oct 12 12:57:23 2001
+++ alsa-driver-own/kernel/rawmidi.c Wed Jan 16 10:31:36 2002
@@ -25,6 +25,7 @@
#include <sound/info.h>
#include <sound/control.h>
#include <sound/minors.h>
+#include <sound/majors.h>
#include <sound/initval.h>
MODULE_AUTHOR("Jaroslav Kysela <[EMAIL PROTECTED]>");
@@ -331,7 +332,7 @@
static int snd_rawmidi_open(struct inode *inode, struct file *file)
{
- int major = MAJOR(inode->i_rdev);
+ int major = major(inode->i_rdev);
int cardnum;
snd_card_t *card;
int device, subdevice;
@@ -345,13 +346,13 @@
switch (major) {
case CONFIG_SND_MAJOR:
- cardnum = SNDRV_MINOR_CARD(MINOR(inode->i_rdev));
- device = SNDRV_MINOR_DEVICE(MINOR(inode->i_rdev)) -
SNDRV_MINOR_RAWMIDI;
+ cardnum = SNDRV_MINOR_CARD(minor(inode->i_rdev));
+ device = SNDRV_MINOR_DEVICE(minor(inode->i_rdev)) -
+SNDRV_MINOR_RAWMIDI;
break;
#ifdef CONFIG_SND_OSSEMUL
case SOUND_MAJOR:
- cardnum = SNDRV_MINOR_OSS_CARD(MINOR(inode->i_rdev));
- device = SNDRV_MINOR_OSS_DEVICE(inode->i_rdev) == SNDRV_MINOR_OSS_MIDI
?
+ cardnum = SNDRV_MINOR_OSS_CARD(minor(inode->i_rdev));
+ device = SNDRV_MINOR_OSS_DEVICE(kdev_t_to_nr(inode->i_rdev)) ==
+SNDRV_MINOR_OSS_MIDI ?
snd_midi_map[cardnum] : snd_amidi_map[cardnum];
break;
#endif
diff -N -r -u alsa-driver-0.9.0beta10/kernel/sound.c alsa-driver-own/kernel/sound.c
--- alsa-driver-0.9.0beta10/kernel/sound.c Wed Nov 28 21:54:18 2001
+++ alsa-driver-own/kernel/sound.c Wed Jan 16 10:16:29 2002
@@ -113,7 +113,7 @@
static int snd_open(struct inode *inode, struct file *file)
{
- int minor = MINOR(inode->i_rdev);
+ int minor = minor(inode->i_rdev);
int card = SNDRV_MINOR_CARD(minor);
int dev = SNDRV_MINOR_DEVICE(minor);
snd_minor_t *mptr = NULL;
diff -N -r -u alsa-driver-0.9.0beta10/readme4perex alsa-driver-own/readme4perex
--- alsa-driver-0.9.0beta10/readme4perex Thu Jan 1 01:00:00 1970
+++ alsa-driver-own/readme4perex Wed Jan 16 11:36:24 2002
@@ -0,0 +1,9 @@
+What I have done:
+
+- updated for kernel 2.5.2-pre10 (branch?)
+- modified make system (remove unneded files generated from .in)
+- updated /etc/init.d/alsasound creation - use @prefix@ there
+
+And you should:
+
+- remove snd drivers for iPAQ from TODO :)
diff -N -r -u alsa-driver-0.9.0beta10/utils/Makefile alsa-driver-own/utils/Makefile
--- alsa-driver-0.9.0beta10/utils/Makefile Thu Aug 17 11:56:10 2000
+++ alsa-driver-own/utils/Makefile Wed Jan 16 11:27:31 2002
@@ -18,7 +18,7 @@
$(CC) $(INCLUDE) -c -o $*.o $<
all: $(TARGETS)
-
+
snd-deps: snd-deps-find.o snd-deps-output.o
$(CC) $(INCLUDE) snd-deps-find.o snd-deps-output.o -o $@
@@ -38,6 +38,12 @@
clean:
rm -f core .depend *.o *.orig *~
+ rm -f $(TARGETS)
+
+mrproper:
+ rm -f alsasound
+ rm -f alsa-driver.spec
+ rm -f buildrpm
.depend:
$(CPP) $(INCLUDE) *.c > .depend
diff -N -r -u alsa-driver-0.9.0beta10/utils/alsasound.in
alsa-driver-own/utils/alsasound.in
--- alsa-driver-0.9.0beta10/utils/alsasound.in Thu Jan 1 01:00:00 1970
+++ alsa-driver-own/utils/alsasound.in Wed Jan 16 11:03:33 2002
@@ -0,0 +1,193 @@
+#!/bin/bash
+#
+# alsasound This shell script takes care of starting and stopping
+# the ALSA sound driver.
+#
+# This script requires /usr/sbin/alsactl and /usr/bin/aconnect programs
+# from the alsa-utils package.
+#
+# Copyright (c) by Jaroslav Kysela <[EMAIL PROTECTED]>
+#
+#
+# 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.
+#
+#
+# For RedHat 5.0+:
+# chkconfig: 2345 87 14
+# description: ALSA driver
+#
+# modified to visually fit into SuSE 6.0+ by Philipp Thomas <[EMAIL PROTECTED]>
+# further improvements by Bernd Kaindl, Olaf Hering and Takashi Iwai.
+#
+### BEGIN INIT INFO
+# Provides: alsasound
+# Required-Start: $remote_fs
+# Required-Stop: $remote_fs
+# Default-Start: 2 3 5
+# Default-Stop:
+# Description: Loading ALSA drivers and store/restore the current setting
+### END INIT INFO
+
+if [ -r /etc/rc.config ]; then
+ . /etc/rc.config
+ rc_warning="\033[33m\033[1m"
+else
+ rc_done="done"
+ rc_warning=""
+ rc_reset=""
+fi
+
+if [ x$START_ALSA != xno ]; then
+ START_ALSA=yes
+fi
+if [ x$START_ALSA_SEQ != xno ]; then
+ START_ALSA_SEQ=yes
+fi
+
+# Determine the base and follow a runlevel link name.
+base=${0##*/}
+link=${base#*[SK][0-9][0-9]}
+
+# Force execution if not called by a runlevel directory.
+test $link = $base && START_ALSA=yes
+test "$START_ALSA" = yes || exit 0
+
+alsactl=@prefix@/sbin/alsactl
+asoundcfg=/etc/asound.state
+aconnect=@prefix@/bin/aconnect
+alsascrdir=/etc/alsa.d
+
+function start() {
+ #
+ # insert all sound modules
+ #
+
+ drivers=`/sbin/modprobe -c | \
+ grep -E "^[[:space:]]*alias[[:space:]]+snd-card-[[:digit:]]" | \
+ awk '{print $3}'`
+ for i in $drivers; do
+ if [ "$i" != off ]; then
+ echo -n "Starting sound driver: $i "
+ /sbin/modprobe $i
+ echo -e "$rc_done"
+ fi
+ done
+ #
+ # insert sequencer modules
+ #
+ if [ x"$START_ALSA_SEQ" = xyes -a -r /proc/asound/seq/drivers ]; then
+ t=`cut -d , -f 1 /proc/asound/seq/drivers`
+ if [ "x$t" != "x" ]; then
+ /sbin/modprobe $t
+ fi
+ fi
+ #
+ # restore driver settings
+ #
+ if [ -d /proc/asound ]; then
+ if [ ! -r $asoundcfg ]; then
+ echo "No mixer config in $asoundcfg, you have to unmute your card!"
+ else
+ if [ -x $alsactl ]; then
+ $alsactl -f $asoundcfg restore
+ else
+ echo -e "${rc_warning}ERROR: alsactl not found${rc_reset}"
+ fi
+ fi
+ fi
+ #
+ # run card-dependent scripts
+ for i in $drivers; do
+ t=`echo $i | sed -e 's/snd-card-\(.*\)/\1/'`
+ if [ -x $alsascrdir/$t ]; then
+ $alsascrdir/$t
+ fi
+ done
+}
+
+function terminate() {
+ #
+ # Kill processes holding open sound devices
+ #
+ # DEVS=`find /dev/ -follow -type c -maxdepth 1 -print 2>/dev/null | xargs ls -dils
+| grep "1*1[46]," | cut -d: -f2 | cut -d" " -f2; echo /proc/asound/dev/*`
+ ossdevs="/dev/admmidi? /dev/adsp? /dev/amidi? /dev/audio* /dev/dmfm* \
+ /dev/dmmidi? /dev/dsp* /dev/dspW* /dev/midi0? /dev/mixer? /dev/music \
+ /dev/patmgr? /dev/sequencer* /dev/sndstat"
+ alsadevs="/proc/asound/dev/*"
+ fuser -k $ossdevs $alsadevs 2> /dev/null 1>/dev/null
+ #
+ # remove all sequencer connections if any
+ #
+ if [ -f /proc/asound/seq/clients -a -x $aconnect ]; then
+ $aconnect --removeall
+ fi
+}
+
+function stop() {
+ #
+ # store driver settings
+ #
+ if [ -x $alsactl ]; then
+ $alsactl -f $asoundcfg store
+ else
+ echo -n -e "${rc_warning}!!!alsactl not found!!!${rc_reset} "
+ fi
+ #
+ # remove all sound modules
+ #
+ /sbin/lsmod | grep -E "^snd" | grep -v "snd-rme9652_mem" | while read line; do \
+ /sbin/rmmod `echo $line | cut -d ' ' -f 1`; \
+ done
+ # remove the 2.2 soundcore module (if possible)
+ /sbin/rmmod soundcore 2> /dev/null
+}
+
+# See how we were called.
+case "$1" in
+ start)
+ # Start driver if it isn't already up.
+ if [ ! -d /proc/asound ]; then
+ start
+ else
+ echo "ALSA driver is already running."
+ fi
+ ;;
+ stop)
+ # Stop daemons.
+ if [ -d /proc/asound ]; then
+ echo -n "Shutting down sound driver: "
+ terminate
+ stop
+ echo -e "$rc_done"
+ fi
+ ;;
+ restart|reload)
+ $0 stop
+ $0 start
+ ;;
+ status)
+ if [ -d /proc/asound ]; then
+ echo -n "ALSA sound driver loaded."
+ else
+ echo -n "ALSA sound driver not loaded."
+ fi
+ echo
+ ;;
+ *)
+ echo "Usage: alsasound {start|stop|restart|status}"
+ exit 1
+esac
+
+exit 0