[alsa-devel] alsactl init - implementation and more..

Takashi Iwai tiwai at suse.de
Thu Aug 14 08:06:35 CEST 2008


At Wed, 13 Aug 2008 19:26:25 +0200 (CEST),
Jaroslav Kysela wrote:
> 
> On Wed, 13 Aug 2008, Takashi Iwai wrote:
> 
> > At Wed, 13 Aug 2008 16:04:47 +0200 (CEST),
> > Jaroslav Kysela wrote:
> > > 
> > > > The card-specific configs shouldn't be read from 00main, but read from
> > > > its file, i.e. 50hda.  That is, the config files are to be simply
> > > > added / removed without modifying the existing file.
> > > 
> > > I'm not sure if it's useful for our purposes. The 00main also contains
> > > some "global" configuration (like SYSFS_DEVICE setup and more variables 
> > > can be added in future) and my initial (not saying that it's optimal) 
> > > configuration assumes that first file lookup is a driver name.
> > > 
> > > If you like to add extra configuration files in a directory, I would 
> > > enhance 'INCLUDE' executer code to check, if the source path is directory 
> > > and then include all files from it. But for the standard "database" 
> > > purposes, I don't see a reason to check every file and skip contents of 
> > > large files just after parsing first lines with false condition.
> > 
> > Of course, it's a question how fine-grained each file should be.  But
> > in general, modifying the default configuration just for adding a new,
> > fairly independent item is a bad idea.  In my scenario: you want to
> > add the support for a new hardware -- fine, just add the file without
> > changing anything else.  This would make the maintenance a lot easier
> > (imagine you maintain a distro package).
> > 
> > If scanning too many files really matters, then they can be
> > concatenated at appropriate timing.
> 
> My idea is to have a default database (which should be quite optimized for 
> parser) and distro specific addons install to a directory as you 
> suggested. So, something like (in alsactl init syntax) in 00main:
> 
> INCLUDE="addon"
> 
> Tree:
> 
> /usr/share/alsa/init/addon/Acer_XY80
> /usr/share/alsa/init/addon/Acer_ZY91
> 
> etc...

They should use number-scheme, too.

> The 00main file might remain (just to handle global specific 
> configuration).
> 
> Eventualy, another INCLUDE can be placed before the default database
> processing to override the default database.

Yes, sometimes we need a replacement and sometime an additional setup.

> > > > Another would-be-nice feature is one command to do both init and
> > > > restore.  First initialize the hardware, then restore (overwrite) the
> > > > setting from the asound.state if already eixsts.  This is what udev
> > > > needs to call.
> > > 
> > > I'm not sure. The restore action will always overwrite all 'init' values 
> > > (at least when control identifier list is not changed in the driver). 
> > > Probably, I would prefer a buildin procedure like 'if restore fails then 
> > > do init'. What about 'alsactl boot' action name?
> > 
> > The init makes sense in the case when the driver is updated and some
> > new controls.  Then the newly added controls are set up properly, then
> > the other values are overwritten via restore.
> 
> Upgrading a driver is quite specific process. In this case would be 
> probably better to read saved state and compare it to the actual driver 
> controls. If something differs, call init and then restore with force 
> flag. At least, the init procedure would be skipped (almost every boot 
> time) if all controls are present in the state file.

FYI, the force flag is already used as default in the current alsactl.

> So, I'm proposing this 'alsactl boot' behaviour:
> 
> 1) read /etc/asound.state
> 2) if the state does not exist run 'alsactl init' and exit
> 3) if the state exists but controls do not match these in driver, run 
>    'alsactl init'
> 4) run 'alsactl restore'

That would work although init can be done always when you run alsactl
restore anyway.


Takashi


More information about the Alsa-devel mailing list