]> git.pld-linux.org Git - packages/alsa-utils.git/blob - alsasound.init
- more standardization
[packages/alsa-utils.git] / alsasound.init
1 #!/bin/sh
2 #
3 # alsasound     This shell script takes care of starting and stopping
4 #               ALSA sound driver.
5 #
6 # This script requires /usr/sbin/alsactl program from alsa-utils package.
7 #
8 # Copyright (c) by Jaroslav Kysela <perex@jcu.cz> 
9 #
10 #  This program is free software; you can redistribute it and/or modify
11 #  it under the terms of the GNU General Public License as published by
12 #  the Free Software Foundation; either version 2 of the License, or
13 #  (at your option) any later version.
14 #
15 #  This program is distributed in the hope that it will be useful,
16 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
17 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 #  GNU General Public License for more details.
19 #
20 #  You should have received a copy of the GNU General Public License
21 #  along with this program; if not, write to the Free Software
22 #  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23 #
24 #
25 # For PLD Linux Distribution:
26 # chkconfig: 2345 87 14
27 # description: ALSA driver
28 #
29
30 # Source function library.
31 . /etc/rc.d/init.d/functions
32
33 alsactl=/usr/sbin/alsactl
34
35 if [ -r /etc/modules.conf ]; then
36 MODULES_CONF=/etc/modules.conf
37 else
38 MODULES_CONF=/etc/conf.modules
39 fi
40
41 driver_start()
42 {
43   #
44   # insert all sound modules
45   #
46   if OLDLOGLEV=$(awk '{print $1}' < /proc/sys/kernel/printk 2> /dev/null); then
47         /sbin/loglevel 1
48   fi
49   awk '$1 == "alias" && $3 != "off" && ($2 ~ /^snd-card-[0-9]$/ || $2 ~ /^sound-service-[0-9]-[0-9]+$/) {print $2}' < $MODULES_CONF | \
50     while read line; do \
51       msg_starting "sound driver: $line"
52       busy
53       /sbin/modprobe $line
54       ok
55     done
56   if [ -n "$OLDLOGLEV" ]; then
57         /sbin/loglevel "$OLDLOGLEV"
58   fi
59   #
60   # restore driver settings
61   #
62   if [ -x $alsactl ]; then
63     $alsactl restore
64   else
65     show "ERROR: alsactl not found"; fail
66   fi
67 }
68
69 detect_stop()
70 {
71   #
72   # remove all sound modules
73   #
74   /sbin/lsmod | awk '/^snd/ { print $0 }' | while read line; do \
75      /sbin/rmmod `echo $line | cut -d ' ' -f 1`; \
76   done
77 }
78
79 driver_stop()
80 {
81   #
82   # store driver settings
83   #
84   if [ -x $alsactl ]; then
85     $alsactl store
86   else
87     show '!!!alsactl not found!!!'; fail
88   fi
89   #
90   # remove all sound modules
91   #
92   detect_stop
93 }
94
95 detect_start()
96 {
97   #
98   # run only detect module
99   #
100   /sbin/modprobe snd-detect
101 }
102
103 # See how we were called.
104 case "$1" in
105   start)
106         # Start driver.
107         if [ ! -d /proc/asound ]; then
108                 driver_start
109                 if [ -d /proc/asound ]; then
110                         touch /var/lock/subsys/alsasound
111                 else
112                         exit 1
113                 fi
114         else
115                 if [ -f /proc/asound/detect ]; then
116                         show "Shutting down sound detect module:"
117                         detect_stop
118                         ok
119                         driver_start
120                         if [ -d /proc/asound ]; then
121                                 touch /var/lock/subsys/alsasound
122                         else
123                                 exit 1
124                         fi
125                 else
126                         msg_already_running "ALSA driver"
127                 fi
128         fi
129         ;;
130   stop)
131         # Stop daemons.
132         if [ -d /proc/asound ]; then
133                 show "Shutting down sound driver:"
134                 busy
135                 if [ -f /proc/asound/detect ]; then
136                         detect_stop
137                 else
138                         driver_stop
139                 fi
140                 (rmmod isapnp; rmmod soundcore) 2> /dev/null
141                 if [ -d /var/lock/subsys ]; then
142                         rm -f /var/lock/subsys/alsasound
143                 fi
144                 ok
145         else
146                 msg_not_running "ALSA driver"
147         fi
148         ;;
149   restart|force-reload)
150         $0 stop
151         $0 start
152         exit $?
153         ;;
154   status)
155         # TODO
156         ;;
157   *)
158         msg_usage "$0 {start|stop|restart|force-reload|status}"
159         exit 3
160 esac
161
162 exit 0
This page took 0.06553 seconds and 4 git commands to generate.