--- hwsetup.c.orig 2005-04-21 11:10:15.000000000 -0400 +++ hwsetup.c 2005-04-21 14:05:38.000000000 -0400 @@ -7,6 +7,7 @@ \****************************************************************************/ #include +#include #include #include #include @@ -24,7 +25,7 @@ #define VERSION "HWSETUP 1.0, an automatic hardware configuration tool\n" \ "(C) 2002 Klaus Knopper \n" \ - "Modifications (C) 2004 René Rhéaume \n" + "Modifications (C) 2004,2005 René Rhéaume \n" #define CARDSDB "/usr/share/hwdata/Cards" #define XPATH "/usr/X11R6/bin/" @@ -61,7 +62,8 @@ int syntax(char *option) "\t\t-a\tignore audio devices\n" "\t\t-s\tignore scsi controllers\n" "\t\t-n\tprobe only, don't configure anything\n" - "\t\t-f\trun a fast probe."); + "\t\t-f\trun a fast probe\n" + "\t\t-l\ttry to load an ALSA sound module."); return option?1:0; } @@ -499,10 +501,11 @@ int writeconfig(char *name,struct device return 0; } -int hw_setup(enum deviceClass dc, int verbose, int probeonly, int skip, int fastprobe) +int hw_setup(enum deviceClass dc, int verbose, int probeonly, int skip, int fastprobe, int tryalsa) { - int i,mouse=0,cdrom=0,modem=0,scanner=0; + int i,mouse=0,cdrom=0,modem=0,scanner=0,alsaok=0; int probeopt=fastprobe?PROBE_SAFE:PROBE_ALL; + const char *alsadriver=NULL; struct device **currentDevs, *d, *serialmouse=NULL, *usbmouse=NULL; if(verbose&VERBOSE_PROMPT) wpid=startwheel(); if((currentDevs=probeDevices(dc,BUS_UNSPEC,probeopt))==NULL) return -1; @@ -537,8 +540,23 @@ int hw_setup(enum deviceClass dc, int ve case CLASS_VIDEO: writeconfig("/etc/sysconfig/xserver",d,verbose); break; case CLASS_AUDIO: if(skip&SKIP_AUDIO) break; + if(tryalsa) + { + alsaok=0; + asprintf(&alsadriver, "snd-%s", d->driver); + if (load_mod(alsadriver,verbose) == 0) + { + d->driver=alsadriver; + writeconfig("/etc/sysconfig/sound",d,verbose); + alsaok=1; + } + } + if(!alsaok) /* fallback */ + { writeconfig("/etc/sysconfig/sound",d,verbose); load_mod(d->driver,verbose); break; + } + break; case CLASS_NETWORK: writeconfig("/etc/sysconfig/netcard",d,verbose); load_mod(d->driver,verbose); break; case CLASS_FLOPPY: writeconfig("/etc/sysconfig/floppy",d,verbose); @@ -554,12 +572,13 @@ int hw_setup(enum deviceClass dc, int ve } } } + if(alsadriver!=NULL) free(alsadriver); return 0; } int main(int argc, char **argv) { - int i, verbose=0, probeonly=0, skip=0, fast=0; + int i, verbose=0, probeonly=0, skip=0, fast=0, alsaaudio=0; enum deviceClass dc=CLASS_UNSPEC; for(i=1;i