#!/bin/sh
#
# linuxsound    This shell script takes care of starting and stopping
#               the SAM9407 and ALSA sound driver.
#
# This script requires /usr/sbin/alsactl program from alsa-utils package.
#
# Copyright (c) by Jaroslav Kysela <perex@suse.cz> 
# Modified for being POSIX-complaint by Christian Kurz <shorty@debian.org>
# Modified for loading soundbanks before the ALSA-driver and renamed to 
#      linuxsound from alsasound by Michael Ehrich <michael@ehri.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., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#
# For RedHat 5.0+:
# chkconfig: 2345 87 14
# description: ALSA driver
# (obsolete)

config=/etc/modules.conf
alsactl=/usr/sbin/alsactl
asoundcfg=/etc/asound.conf
pnpcfg=/etc/isapnp.conf
isapnp=/sbin/isapnp
sam9407=/sbin/sam9407

if [ ! -r $config ]; then
  if [ -r /etc/conf.modules ]; then
    config=/etc/conf.modules
  fi
fi

# See how we were called.
case "$1" in
  start)
        # Start driver.
	if [ ! -d /proc/asound ]; then
	  # 
	  # start pnptools and sam9407
	  #
	  echo -n "Starting isapnptools:"
	  $isapnp $pnpcfg > /dev/null 
	  echo "done"
	  echo -n "Starting sam9407:"
	  $sam9407 -s -v
	  echo "done"
	  #
	  # insert all sound modules
	  #
	  cat $config | \
		grep -E "^alias( |\t)+snd-card-[[:digit:]]" | \
		awk '{print $3}' | 
		while read line; do \
		  echo -n "Starting sound driver: $line "; \
		  /sbin/modprobe $line; \
		  echo "done"; \
		done
          # 
          # restore driver settings
          #
          if [ -x $alsactl ]; then
            if [ -r $asoundcfg ]; then
              $alsactl -f $asoundcfg restore
            else
              echo "ERROR: alsactl can't start, $asoundcfg is not readable"
            fi
          else
            echo "ERROR: alsactl not found"
          fi
  	  #
  	  if [ -d /proc/asound ] && [ -d /var/lock/subsys ]; then
	    touch /var/lock/subsys/alsasound
	  fi
        else
	  echo "ALSA driver is already running."
	fi
        ;;
  stop)
        # Stop daemons.
	if [ -d /proc/asound ]; then
          echo -n "Shutting down sound driver: "
	  #
  	  # store driber settings
	  #
	  if [ -x $alsactl ]; then
	    $alsactl store
	  else
	    echo -n "ERROR: alsactl not found"
	  fi
	  #
	  # remove all sound modules
	  #
	  /sbin/lsmod | grep -E "^snd" | 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
	  #
	  if [ -d /var/lock/subsys ]; then
	    rm -f /var/lock/subsys/alsasound
	  fi
 	  echo "done"
	else
	  echo "ALSA driver isn't running."
	fi
	echo -n "Shutting down sam9407 driver: "
	/sbin/rmmod sam9407 2> /dev/null
	echo "done"
        ;;
  restart)
	$0 stop
	$0 start
	;;
  *)
        echo "Usage: alsasound {start|stop|restart}"
        exit 1
esac

exit 0
