mirror of
https://github.com/genodelabs/genode.git
synced 2025-03-15 08:41:01 +00:00
dde_bsd: support microphone selection
Make preferred microphone configurable when a headset is plugged in by introducing the 'mic_priority' attribute for the <config> node. Values can be "internal" and "external".
This commit is contained in:
parent
a9df9fccfd
commit
ac5cfb59ea
@ -74,6 +74,16 @@ Information about the available mixers and settings in general
|
|||||||
may be obtained by setting the 'verbose' to 'yes' in the config
|
may be obtained by setting the 'verbose' to 'yes' in the config
|
||||||
node.
|
node.
|
||||||
|
|
||||||
|
When multiple microphones are present (e.g., internal microphone in a notebook
|
||||||
|
and a headset with a microphone), the preferred microphone can be configured
|
||||||
|
using the 'mic_priority' attribute in the '<config>' node. Valid values are
|
||||||
|
"internal" and "external" (default).
|
||||||
|
|
||||||
|
! <config mic_priority="internal"/>
|
||||||
|
|
||||||
|
The example above tells the driver to prioritize the internal microphone over a
|
||||||
|
headset.
|
||||||
|
|
||||||
|
|
||||||
Examples
|
Examples
|
||||||
========
|
========
|
||||||
|
@ -41,6 +41,8 @@ static dev_t const mdev = 0xc0; /* /dev/audioctl */
|
|||||||
|
|
||||||
static bool adev_usuable = false;
|
static bool adev_usuable = false;
|
||||||
|
|
||||||
|
/* prioritize mic of headset if plugged in over internal mic */
|
||||||
|
static bool mic_priority_external = true;
|
||||||
|
|
||||||
static bool drv_loaded()
|
static bool drv_loaded()
|
||||||
{
|
{
|
||||||
@ -389,6 +391,11 @@ static void configure_mixer(Genode::Env &env, Mixer &mixer, Genode::Xml_node con
|
|||||||
{
|
{
|
||||||
using namespace Genode;
|
using namespace Genode;
|
||||||
|
|
||||||
|
typedef String<9> Mic_mode;
|
||||||
|
|
||||||
|
Mic_mode mode = config.attribute_value("mic_priority", Mic_mode("external"));
|
||||||
|
mic_priority_external = (mode == "internal") ? false : true;
|
||||||
|
|
||||||
config.for_each_sub_node("mixer", [&] (Xml_node node) {
|
config.for_each_sub_node("mixer", [&] (Xml_node node) {
|
||||||
|
|
||||||
typedef String<32> Field;
|
typedef String<32> Field;
|
||||||
@ -615,7 +622,8 @@ extern "C" void notify_record()
|
|||||||
|
|
||||||
extern "C" void notify_hp_sense(int const sense)
|
extern "C" void notify_hp_sense(int const sense)
|
||||||
{
|
{
|
||||||
set_mixer_value(mixer, "record.adc-0:1_source", sense ? "mic2" : "mic");
|
set_mixer_value(mixer, "record.adc-0:1_source",
|
||||||
|
sense && mic_priority_external ? "mic2" : "mic");
|
||||||
|
|
||||||
report_mixer_state(mixer, nullptr);
|
report_mixer_state(mixer, nullptr);
|
||||||
}
|
}
|
||||||
@ -630,6 +638,8 @@ void Audio::update_config(Genode::Env &env, Genode::Xml_node config)
|
|||||||
if (mixer.info == nullptr) { return; }
|
if (mixer.info == nullptr) { return; }
|
||||||
|
|
||||||
configure_mixer(env, mixer, config);
|
configure_mixer(env, mixer, config);
|
||||||
|
|
||||||
|
notify_hp_sense(headphone_plugged() ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user