Commit graph

316 commits

Author SHA1 Message Date
Takashi Iwai
58d10c09e1 ucm: Improve cset command parsing
The cset command parsing in ucm/main.c assumes implicitly that the
argument contains no space, thus an example below wouldn't work:
    cset "name='Input Select' Digital Mic"

This patch introduces a new internal API function
__snd_ctl_ascii_elem_id_parse() to improve the cset parser.

Reported-by: Tanu Kaskinen <tanu.kaskinen@digia.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2012-08-10 14:14:28 +02:00
Arun Raghavan
df924cd9c5 control: Use strcpy() instead of stpcpy()
This allows us to build in environments that don't provide stpcpy().
This makes it necessary to traverse the string twice, but should not be
noticeable in clients since this function is very unlikely to be part of
a performance-critical path.

[coding style fixed by tiwai]

Signed-off-by: Arun Raghavan <arun.raghavan@collabora.co.uk>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2012-07-17 14:55:55 +02:00
Martin Sandsmark
86e27cdbf1 hctl: Remove a useless assert
The case where the element is unavailable (for example gone away since
the event was created) is handled beneath.

See also bug 5471.
	https://bugtrack.alsa-project.org/alsa-bug/view.php?id=5471

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2012-07-05 10:09:06 +02:00
Takashi Iwai
52160de21e Fix the binary compatibility of ext-ctl plugin with protocol 1.0.0
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2012-06-25 23:16:14 +02:00
Benoît Thébaudeau
70b958f460 tlv: improve robustness of raw value ranges
snd_tlv_convert_from_dB() relies on rangemin/max blindly.
Since this function is exported, it is better for robustness and
consistency to parse the range properly, which this patch does.

Signed-off-by: Benoît Thébaudeau <benoit.thebaudeau@advansee.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2012-05-23 01:53:28 +02:00
Dylan Reid
a6c50d64d9 control_external: Add ability to specify TLV data.
Allow external control plugins to provide TLV data.  This allows
user-space pcms to specify dB ranges for controls.

This follows the same model as the ALSA drivers for accessing the
data.  The code is based on that implementation.  The control can
provide static data or a callback.  The data is accessed or modified
in the new snd_ctl_ext_elem_tlv callback.

Rev bump the protocol version to enable checking if an external
control supports TLV.

Signed-off-by: Dylan Reid <dgreid@chromium.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2012-04-16 10:16:17 +02:00
Andrew Eikum
226a34ac09 Document strdup allocation in snd_card_get_name family
This was spotted by Jörg Höhle on the wine-patches ML.

Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2012-01-19 12:38:58 +01:00
Andrew Eikum
ad2a0b3a56 Improve snd_device_name_hint documentation
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2012-01-19 12:36:58 +01:00
Clemens Ladisch
15c6f83296 control: add snd_ctl_elem_add_enumerated()
Handling of user control elements was implemented for all types except
BYTES and ENUMERATED.  Enumerated user controls will be needed for the
device-specific mixers of upcoming FireWire drivers.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2011-10-07 23:38:55 +02:00
Takashi Iwai
acb423d937 Add snd_{ctl|pcm}_open_fallback() functions
This patch adds new API functions, snd_ctl_open_fallback() and
snd_pcm_open_fallback().  These are just like snd_*_open_lconf() but
used to open a fallback PCM/control.  The difference is that it replaces
the name string with the given original name, so that hctl and other
upper-layers will recognize it as an alias.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2011-07-27 15:24:13 +02:00
Takashi Iwai
e1c876a2f0 Fix missing error code in snd_ctl_hw_open()
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2011-06-03 17:27:27 +02:00
Alexander Stein
1720d30ad8 ctlparse: Respect softfloat configure option
If we want softlfoat we can't use ceil which uses libm.

Signed-off-by: Alexander Stein <a.stein@systec-electronic.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2011-05-20 09:10:04 +02:00
Jaroslav Kysela
916a203d94 Merge branch 'ucm' 2011-01-24 14:55:23 +01:00
Liam Girdwood
7b259bc00e ucm: ctlparse - always terminate cset buffer
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
2010-12-22 08:06:35 +01:00
Jaroslav Kysela
9b6df1cf64 control: add ASCII parsers from amixer
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2010-11-04 19:58:44 +01:00
Clemens Ladisch
2f6206da0c tlv: fix returned dB information for min-is-mute controls
For TLV information that indicates that the minimum value is actually
muted, the returned range used the wrong minimum dB value, and
converting dB values to raw control values did not round up correctly
near the minimum.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2010-10-17 10:44:06 +02:00
Jaroslav Kysela
c049d48407 namehint: Another fix to properly evaluate hw devices
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2010-10-01 14:08:03 +02:00
Jaroslav Kysela
0244370be6 namehint: Fix hw device evaluation (missing last device)
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2010-10-01 13:31:45 +02:00
Jaroslav Kysela
91c9c8f1b8 general: recoded snd_dlobj_ functions
- changed logic to get/put blocks
- added mutex locking of the symbol list
- added reference counting (do not free used dl handles)

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2010-08-23 17:10:16 +02:00
Jaroslav Kysela
97d25c0766 namehint: Evaluate more possibilities for hw devices
This tries to fix the issue when logical device indexes does not match the
hardware device indexes (like hdmi -> 0:3, 1:7, 2:8, 3:9).

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2010-08-20 10:33:32 +02:00
John Lindgren
8dde984237 Memory leak in namehint.c
Get_card_name() can be called more than once on the same list, so it
must free the previous list->cardname before replacing it.

Signed-off-by: John Lindgren <john.lindgren@tds.net>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2010-07-21 09:28:18 +02:00
Peter Ujfalusi
2a94d80407 tlv: Remove tailing tab after snd_ctl_get_dB_range function
Cosmetic fix.
There was a tab instead of new line after snd_ctl_get_dB_range
function.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@nokia.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2010-07-20 12:56:03 +02:00
Peter Ujfalusi
d81ce4ea7a tlv: Handle 'holes' in SND_CTL_TLVT_DB_RANGE array
When converting from dB to raw value, and DB_RANGE is
used with non overlapping map, dB value in between the
sub ranges will be not found.

For example, if the control has the following:
0: -10dB
1: -5dB
2: 0dB
3: 2dB
4: 4dB

static const unsigned int nonoverlapping_tlv[] = {
        TLV_DB_RANGE_HEAD(2),
        0, 2, TLV_DB_SCALE_ITEM(-1000, 500, 0),
        3, 4, TLV_DB_SCALE_ITEM(200, 200, 0),
};

Range 1: -10 .. 0dB
Range 2: 2 .. 4dB

If user asks for 1dB the snd_tlv_convert_from_dB will not find
the raw value, since the 1dB is not part of either range.

To fix this, we will store the previous non maching range's
maximum raw value. If the dB value is not found in the next range,
we will check, if the requested dB value is in between the current
and the previous range, and if it is than pick the apropriate raw
value based on the xdir (up or down rounding).

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@nokia.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2010-07-20 12:55:51 +02:00
Peter Ujfalusi
16a2cad39b tlv: Check out of range dB with SND_CTL_TLVT_DB_RANGE
When converting from dB value to raw value, the control's
full range was not checked in case of SND_CTL_TLVT_DB_RANGE.

Check out of range dB values, and return apropriate raw
value for the caller.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@nokia.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2010-07-20 12:55:41 +02:00
Peter Ujfalusi
30ad5ed040 control: tlv: Check dB range only within the control's volume range
The DB_RANGE need to be used on some HW, since the gain on
volume control is not continuous, and has to be divided into
several sub DB_SCALE ranges.
ASoC has a feature to override the HW default volume range,
and in this case when the volume range is less than the
HW maximum we do not need to go through the whole DB_RANGE,
but we need to stop where the kcontrol's maximum tell us.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@nokia.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2010-05-19 12:39:10 +02:00
David Fries
63acb87329 modem.conf Off-hook improve behavior
Only restore the old value if it differs from the requested
value, because if it has changed restoring the old value
overrides the change.  Take for example, a voice modem with
a .conf that sets preserve off-hook.  Start playback (on-hook
to off-hook), start record (off-hook to off-hook), stop
playback (off-hook to restore on-hook), stop record (on-hook
to restore off-hook), Clearly you don't want to leave the
modem "on the phone" now that there isn't any playback or
recording active.

Signed-off-by: David Fries <david@fries.net>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2010-01-22 11:45:35 +01:00
Takashi Iwai
4de76c9b06 Remove redefinition of _GNU_SOURCE and __USE_GNU
Now _GNU_SOURCE is already defined globally in configure.in.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-11-08 09:28:07 +01:00
Rémi Denis-Courmont
57ce918928 Remove old commented-out FD_CLOEXEC code
Signed-off-by: Rémi Denis-Courmont <remi@remlab.net>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-11-08 09:23:22 +01:00
Jaroslav Kysela
407e98b4c3 namehint: list card independent devices only once
Card-independent devices such as "null" or "pulse" should only be
added once, not once for each card.

Signed-off-by: John Lindgren <john.lindgren@tds.net>\
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2009-11-03 16:44:51 +01:00
Jaroslav Kysela
0fcac21756 namehint: Allow snd_device_name_hint to search for CTL devices.
Signed-off-by: John Lindgren <john.lindgren@tds.net>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2009-11-03 16:42:49 +01:00
Jaroslav Kysela
592bd1e98b namehint: add missing list->card initialization
list->card is wrongly assumed to be initialized, but the previous
initialization is within a conditional that is false when only
card-independent devices are found.  (This is the case when searching
for mixers on my system; the end result is that the "pulse" mixer is
listed three times.)

Signed-off-by: John Lindgren <john.lindgren@tds.net>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2009-11-03 16:42:44 +01:00
Takashi Iwai
e1c7dd2613 Fix corruption after snd_device_name_hint()
snd_device_name_hint() corrupts the config name space after its call.
This results in the error from the suceeding calls of snd_pcm_open()
after snd_device_name_hint().

The bug is in try_config() in namehint.c; it calls snd_config_delete(res)
but res can be two different objects in the function.  One is the object
obtained via snd_config_search_definition(), and another is the one from
snd_config_search_alias_hooks().  The former is the expanded objects,
thus it should be freed.  But, the latter is a reference, and must not be
freed.

This patch adds the check to free or not.

Reported-by: John Lindgren <john.lindgren@tds.net>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-11-03 09:02:39 +01:00
Jaroslav Kysela
0110d62043 hcontrol: fix compare_default function to handle also id.device and id.subdevice
In case when kcontrol differs only by device or subdevice numbers, the
find function can give wrong results.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2009-10-06 10:46:54 +02:00
Stefan Schmidt
aa697c9d51 control: Remove unused variable.
Signed-off-by: Stefan Schmidt <stefan@slimlogic.co.uk>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-09-30 08:21:53 +02:00
Clemens Ladisch
34d63b449f control.c: snd_ctl_wait: fix revents handling
The revents parameter of snd_ctl_poll_descriptors_revents() is a single
value, not an array.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2009-08-10 10:11:15 +02:00
Clemens Ladisch
5332d74a67 fix doc errors
Fix various errors in the documentation that make doxygen complain.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2009-08-04 09:17:20 +02:00
Takashi Iwai
f8a34aa683 Add the support of TLV_DB_MINMAX types
Added the support of the new TLV_DB_MINMAX types.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-06-16 14:28:57 +02:00
Takashi Iwai
4d2ba6a460 Fix breakage of snd_card_load()
Fixed the breakage of snd_card_load() for secondary and later cards
due to changes in snd_card_load1().

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-06-09 04:45:18 +02:00
Jaroslav Kysela
d2aadec5e4 snd_card_get_index() - extend comment for last change
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2009-05-12 08:28:06 +02:00
Jaroslav Kysela
33ab0b5381 Extend snd_card_get_index() to accept also control device name like /dev/snd/controlC0
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2009-05-12 08:06:41 +02:00
Takashi Iwai
81241ffb81 Change numid properly with external ctl plugins
So far, external ctl plugins don't change numid.  Some apps expect the
non-zero numids with list, and the plugin doesn't work for them.

This patch adds a fake numid to each control based on the offset
number.  The lookup with non-zero numid is supported but is pretty
inefficient.  Eventually the plugin side may be optimized to look
at the numid, too.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-02-17 16:58:12 +01:00
Diego E. 'Flameeyes' Pettenò
03388ca6d3 Mark static tables as constant when possible.
This makes it possible to write them to .data.rel.ro or to .rodata if
there is no relocation involved (arrays of character arrays).

Signed-off-by: Diego E. 'Flameeyes' Pettenò <flameeyes@gmail.com>
2008-11-21 22:39:38 +01:00
Diego E. 'Flameeyes' Pettenò
fc8d8bb2e6 Make string arrays as constant as possible.
Use "const char *const []" as type for string arrays, or convert to
"const char [][x]" when it makes sense.

Signed-off-by: Diego E. 'Flameeyes' Pettenò <flameeyes@gmail.com>
2008-11-21 22:14:52 +01:00
Diego E. 'Flameeyes' Pettenò
2eaf9403d2 Make all the remaining ops structure constants.
This excludes the mixer for now since it requires a change to the
public headers.

Signed-off-by: Diego E. 'Flameeyes' Pettenò <flameeyes@gmail.com>
2008-11-21 20:48:33 +01:00
Diego E. 'Flameeyes' Pettenò
2289326673 Make seq, rawmidi and control operation structures static const.
Since they are never changed it does not make sense to have them in
the writeable .data section, just make sure to add const to the ops
member in the structure definitions so that there are no extra
warnings added.

Signed-off-by: Diego E. 'Flameeyes' Pettenò <flameeyes@gmail.com>
2008-11-21 20:28:38 +01:00
Takashi Iwai
3b2c53c2a6 Fix sort-out of non-existing devices in namehint
get_dev_name() checks wrongly the device_output, and it doesn't check
properly the case when only device is set and device_input and output
are unset.  This resulted in listing of non-existing HDMI device, for
example.  The patch fixes both issues.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-10-17 17:51:45 +02:00
Takashi Iwai
1cf904e894 Fix return value of snd_ctl_hw_subscribe_events()
snd_ctl_subscribe_events() must return 0 when succeeded.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-09-30 14:44:12 +02:00
Takashi Iwai
5cee69b47b Replace some assert() with runtime checks
assert() for sanity checks that can happen in runtime isn't a good idea.
Replaced it with the real check.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-09-30 14:43:14 +02:00
Takashi Iwai
fce17b8c47 Fix cast warning
int64_t and long long isn't strictly identical, and thus gcc gives us
a heartful warning.  Suppress the warning by a pointer cast.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-06-06 16:58:02 +02:00
Takashi Iwai
363b7f8289 Don't show non-existing devices in snd_device_name_hint()
Suppress the non-existing devices in snd_device_name_hint().
2008-03-07 17:01:56 +01:00