Commit graph

32 commits

Author SHA1 Message Date
Lu Guanqun
29880e8c66 ucm: fix seg fault in execute_cset()
When there's no space in 'cset', 'pos' gets NULL, dereferencing 'pos' gets a
seg fault. We need to be more robust.

Signed-off-by: Lu Guanqun <guanqun.lu@intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2011-08-19 10:41:26 +02:00
Stephen Warren
e2c2262403 UCM: get: Implement 'exact' value retrieval
[=]<NAME>[/[<modifier>|</device>][/<verb>]]
- value identifier <NAME>
- Search starts at given modifier or device if any,
    else at a verb
- Search starts at given verb if any,
    else current verb
- Searches modifier/device, then verb, then defaults
- Specify a leading "=" to search only the exact
  device/modifier/verb specified, and not search
  through each object in turn.
- Examples:
    "PlaybackPCM/Play Music"
    "CapturePCM/SPDIF"
  From ValueDefaults only:
    "=Variable"
  From current active verb:
    "=Variable//"
  From verb "Verb":
    "=Variable//Verb"
  From "Modifier" in current active verb:
    "=Variable/Modifier/"
  From "Modifier" in "Verb":
    "=Variable/Modifier/Verb"

Signed-off-by: Stephen Warren <swarren@nvidia.com>
Acked-by: Liam Girdwood <lrg@ti.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2011-06-08 18:22:15 +02:00
Stephen Warren
a48f67c0ed UCM: snd_use_case_get: Don't segfault when no current verb
get_value, called by snd_use_case_get, uses uc_mgr->active_verb without
checking there is one, and hence can segfault. Fix this.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
Acked-by: Liam Girdwood <lrg@ti.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2011-06-08 18:21:46 +02:00
Stephen Warren
32d24f4071 UCM: Allow querying of {Supported,Conflicting}Devices
At any time, one can query:

_supporteddevs/<modifier>|<device>/<verb>
_conflictingdevs/<modifier>|<device>/<verb>

If a verb is current, one can query:

_supporteddevs/<modifier>|<device>
_conflictingdevs/<modifier>|<device>

Note that at most one of the supported/conflicting devs lists has
any entries, and when neither is present, all devices are supported.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
Acked-by: Liam Girdwood <lrg@ti.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2011-06-08 18:21:21 +02:00
Stephen Warren
547300fb35 UCM: Disallow gets of undefined system properties
In UCM, there are various system-defined properties whose names start
with "_". Explicitly prevent any gets from falling back to properties
defined in a config file if the property name starts with "_", in order
to reserve the entire "_" namespace for system-defined properties.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
Acked-by: Liam Girdwood <lrg@ti.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2011-06-08 18:21:01 +02:00
Stephen Warren
fc038149c5 UCM: Implement ConflictingDevices, add device list to devices
Wherever SupportedDevice can appear, also allow ConflictingDevice. Only
one or the other (or neither) may be specified. When neither is
specified, allow anything. Sometimes, listing ConflictingDevices may
result in a shorter list than explicitly listing all SupportedDevices.

Add support for SupportedDevice and ConflictingDevice to SectionDevice.
This allows representing devices which are mutually exclusive, e.g. due
to a mux that switches between capturing from two different microphones,
without the possibility of mixing.

Enhance is_modifier_supported to allow ignoring SupportedDevice and
ConflictingDevice. This is useful when querying values from a
SectionModifier; there's no reason we shouldn't be able to query values
just because the current configuration would prevent enabling that
device. The new is_device_supported is implemented similarly.

Enhance switch_device to remove the old device from the current device
list before querying for the new device, and add it back immediately
afterwards. This allows the query for the new device to ignore any
conflicts caused solely by the old device.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
Acked-by: Liam Girdwood <lrg@ti.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2011-06-08 18:20:26 +02:00
Stephen Warren
866fa538d4 UCM: Deprecate index on Section{Device,Modifier}
The previous supported "legacy" syntax was:

SectionDevice."Speaker".0 {
SectionModifier."Capture Voice".0 {

This change supports new syntax:

SectionDevice."Speaker" {
SectionModifier."Capture Voice" {

... but also allows the old syntax, iff the index is exactly "0". If an
index is present, but not exactly "0", parsing will appear to succeed,
but produce an empty device or modifier.

When naming devices and modifiers, even if the legacy format is used,
any index is not included in the name; i.e. both sets of syntax above
name the device just "Speaker".

The SupportedDevice list syntax still also accepts either "x" or "x.0",
but internally strips ".0" from the tail of any device name. Any other
name including "." is disallowed.

Finally, when comparing device or modifier names, a simple exact string
compare is now used, since no index data is ever present in device or
modifier names.

The one functional change introduced here is that a SupportedDevice
entry of just "x" will now only ever match a single device. It previously
acted as a wildcard for any device named "x.foo".

Signed-off-by: Stephen Warren <swarren@nvidia.com>
Acked-by: Liam Girdwood <lrg@ti.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2011-06-08 18:20:00 +02:00
Stephen Warren
0a4b1ee746 UCM: Fix deadlock following failed get _verb
When querying the current verb without a verb set, snd_use_case_get bails
out early without unlocking uc_mgr->mutex. This causes subsequent API calls
to hang. Instead, s/return/goto __end/.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2011-06-03 11:45:17 +02:00
Baek Chang
516569bbba UCM: fix memory leak when executing cset commands
fix memory leak when executing cset commands.
snd_ctl_elem's are allocated, but never free'ed

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2011-05-04 09:21:34 +02:00
Jaroslav Kysela
e419f63960 UCM: Fix LGPL licence ("how to receive" part referred GPL instead LGPL)
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2011-03-28 11:06:33 +02:00
Jaroslav Kysela
f2912f5099 UCM: Fix empty get_list - initialize returned pointer to NULL
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2011-03-19 01:09:41 +01:00
Jaroslav Kysela
60397387ef UCM: comment fixes and fix myvalue initialization fix in add_values()
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2011-03-19 00:54:43 +01:00
Margarita Olaya
ae0a44c628 alsa-lib: ucm: allow values to be read from devices
This allows devices value to be read using the get_value().
Also fix a little formatting.

Signed-off-by: Margarita Olaya Cabrera <magi@slimlogic.co.uk>
Acked-by: Liam Girdwood <lrg@ti.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2011-03-18 18:28:07 +01:00
Jaroslav Kysela
038eaa429b ucm: add more error messages for cdev and cset commands
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2011-01-31 15:06:03 +01:00
Jaroslav Kysela
37c7e2843f ucm: allow bind modifier to specific instances, other fixes
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2011-01-31 14:24:19 +01:00
Liam Girdwood
a618cdf057 ucm: fix switch device & modifier when no transition is found
Fix some logic bugs in switch device and switch modifier when
transition sequences are not found. Also fix check for new device.

Reported-by: w0806.kim@samsung.com
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2011-01-11 19:05:40 +01:00
Liam Girdwood
df760d8b31 ucm: fix handling of cset with spaces in the control name
Always terminate the cset command based on the last space found within the
cset command since the control name may contain spaces.
2010-12-22 08:06:28 +01:00
Liam Girdwood
eba5471819 ucm: only select modifier when supported device is enabled
Make sure the supported device of a modifier is enabled before
we enable the modifier.

Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2010-12-22 08:06:16 +01:00
Liam Girdwood
265cf2c3ee ucm: implement basic script exec functionality
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2010-12-22 08:06:08 +01:00
Liam Girdwood
116fabd603 ucm: check the correct return value for modifier
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2010-12-22 08:05:57 +01:00
Liam Girdwood
ebb52f6911 ucm: check for valid value list before dereference.
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2010-12-22 08:05:50 +01:00
Liam Girdwood
6cda65ba98 ucm: remove unused code.
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2010-12-22 08:05:44 +01:00
Liam Girdwood
02bc123aae ucm: make sure active modifier and device lists are initialised
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2010-12-22 08:05:36 +01:00
Jaroslav Kysela
7d3de218ce ucm: initial implementation for cdev/cset
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2010-11-29 17:33:27 +01:00
Jaroslav Kysela
d8b7816196 ucm: add ValueDefaults section to the master file
- the get_value() function is recoded (tries to find the value in
  parent's list)

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2010-11-29 15:41:34 +01:00
Jaroslav Kysela
aaf55f1641 ucm: add cdev
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2010-11-23 15:58:14 +01:00
Jaroslav Kysela
cdc9dd50bf ucm: fix parser for sequences and fix wrong strcmp
The sequences are not parsed correctly. First cfg value is the command
and second value is the command argument.

Also, fix strcmp calls in ucm/main.c (reported by
abraham duenas <aduejazz@gmail.com>).

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2010-11-10 16:06:29 +01:00
Jaroslav Kysela
e820866637 ucm: implemented card list feature
- also added some test files to test/ucm tree

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2010-10-13 11:48:52 +02:00
Jaroslav Kysela
3a34394508 ucm: unify snd_use_case_geti(), add snd_use_case_card_list() template
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2010-10-12 13:29:05 +02:00
Jaroslav Kysela
6c6dc230bc ucm: added implementation for other ucm parts, only card name list is missing
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2010-09-22 15:35:11 +02:00
Jaroslav Kysela
404cd090b2 ucm: Introduce "Value {}" section, more implementation work
- new "Value {}" section is introduced for read-only values
  describing the PCM and control/mixer IDs (or any other
  things)
- more complete implementation for API functions

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2010-09-22 14:31:15 +02:00
Jaroslav Kysela
1c79fad969 ucm: Moved ucm to src/ucm subdirectory
- separate code to more files
- use standard lists to represent structures
- use alsa-lib configuration parser

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2010-09-15 08:09:31 +02:00