It sounds like you have a pretty poor design. Perhaps having ONE function to set the volume, bass and treble in one call would make more sense.

To allow for "not remembering values", you can use a special value to say "don't change this", e.g. -1, so if you only want to set the volume, then use something like
Code:
SetVolumeBassTreble(channel, newVolume, -1, -1)
Why do you need to have multiple layers, by the way? Are you handling multiple types or instances of hardware, or what?

In my experience, it's better to make an interface that "does the right thing", than one that is all singing and dancing, with lots of variations.

Certainly, using strings to parse things in a driver seems a bit overkill - it just makes the code slow, and driver should be optimized to be fast - and if that means some hard graft from the programmer, so be it.

--
Mats