From a8e946de822d1611549bbdbcfc04ca4f5e14773a Mon Sep 17 00:00:00 2001 From: Dominig ar Foll Intel Open Source Date: Wed, 13 Dec 2017 10:43:35 +0100 Subject: HAL(s) need to match the exact HW palform alsa controls which are different even for similar platforms #SPEC-1184 Change-Id: Id962ea5365af7539277f335b83169712291aa3df Signed-off-by: Dominig ar Foll Intel Open Source --- HDA-intel/CMakeLists.txt | 39 ------- HDA-intel/IntelHdaHAL.c | 237 -------------------------------------- intel-minnow/CMakeLists.txt | 39 +++++++ intel-minnow/IntelHdaHAL.c | 237 ++++++++++++++++++++++++++++++++++++++ intel-minnow/amixer-output-pc.txt | 41 +++++++ intel-pc/CMakeLists.txt | 39 +++++++ intel-pc/IntelHdaHAL.c | 237 ++++++++++++++++++++++++++++++++++++++ intel-pc/amixer-output-pc.txt | 62 ++++++++++ 8 files changed, 655 insertions(+), 276 deletions(-) delete mode 100644 HDA-intel/CMakeLists.txt delete mode 100644 HDA-intel/IntelHdaHAL.c create mode 100644 intel-minnow/CMakeLists.txt create mode 100644 intel-minnow/IntelHdaHAL.c create mode 100644 intel-minnow/amixer-output-pc.txt create mode 100644 intel-pc/CMakeLists.txt create mode 100644 intel-pc/IntelHdaHAL.c create mode 100644 intel-pc/amixer-output-pc.txt diff --git a/HDA-intel/CMakeLists.txt b/HDA-intel/CMakeLists.txt deleted file mode 100644 index 68314b4..0000000 --- a/HDA-intel/CMakeLists.txt +++ /dev/null @@ -1,39 +0,0 @@ -########################################################################### -# Copyright 2015, 2016, 2017 IoT.bzh -# -# author: Fulup Ar Foll -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -########################################################################### - -if(HAL_INTEL_HDA) - # Add target to project dependency list - PROJECT_TARGET_ADD(hal-intel-hda) - - # Define project Targets - ADD_LIBRARY(${TARGET_NAME} MODULE IntelHdaHAL.c) - - # Binder exposes a unique public entry point - SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES - PREFIX "afb-" - LABELS "BINDING" - LINK_FLAGS ${BINDINGS_LINK_FLAG} - OUTPUT_NAME ${TARGET_NAME} - ) - - # Library dependencies (include updates automatically) - TARGET_LINK_LIBRARIES(${TARGET_NAME} - hal-utilities-4a - ${link_libraries} - ) -endif() diff --git a/HDA-intel/IntelHdaHAL.c b/HDA-intel/IntelHdaHAL.c deleted file mode 100644 index 9744fe7..0000000 --- a/HDA-intel/IntelHdaHAL.c +++ /dev/null @@ -1,237 +0,0 @@ -/* - * Copyright (C) 2016 "IoT.bzh" - * Author Fulup Ar Foll - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * - * To find out which control your sound card uses - * aplay -l # Check sndcard name name in between [] - * amixer -D hw:xx controls # get supported controls - * amixer -D "hw:3" cget numid=xx # get control settings - * - */ -#define _GNU_SOURCE -#include "hal-interface.h" - -// Define few private tag for not standard functions -#define PCM_Volume_Multimedia 1000 -#define PCM_Volume_Navigation 1001 -#define PCM_Volume_Emergency 1002 - -// Default Values for MasterVolume Ramping -STATIC halVolRampT volRampMaster= { - .mode = RAMP_VOL_NORMAL, - .slave = Master_Playback_Volume, - .delay = 100*1000, // ramping delay in us - .stepDown=1, - .stepUp =1, -}; - -//Solvol Ramping Value can be customize by Audio Role and Hardwar card -STATIC halVolRampT volRampEmergency= { - .slave = Emergency_Playback_Volume, - .delay = 50*1000, // ramping delay in us - .stepDown= 2, - .stepUp = 10, -}; - -STATIC halVolRampT volRampWarning= { - .slave = Warning_Playback_Volume, - .delay = 50*1000, // ramping delay in us - .stepDown= 6, - .stepUp = 10, -}; - -STATIC halVolRampT volRampCustomHigh= { - .slave = CustomHigh_Playback_Volume, - .delay = 50*1000, // ramping delay in us - .stepDown= 2, - .stepUp = 4, -}; - -STATIC halVolRampT volRampPhone= { - .slave = Phone_Playback_Volume, - .delay = 50*1000, // ramping delay in us - .stepDown= 2, - .stepUp = 2, -}; - -STATIC halVolRampT volRampNavigation= { - .slave = Navigation_Playback_Volume, - .delay = 50*1000, // ramping delay in us - .stepDown= 2, - .stepUp = 4, -}; - -STATIC halVolRampT volRampCustomMedium= { - .slave = CustomMedium_Playback_Volume, - .delay = 50*1000, // ramping delay in us - .stepDown= 2, - .stepUp = 4, -}; - -STATIC halVolRampT volRampVideo= { - .slave = Video_Playback_Volume, - .delay = 50*1000, // ramping delay in us - .stepDown= 2, - .stepUp = 4, -}; - -STATIC halVolRampT volRampStreaming= { - .slave = Streaming_Playback_Volume, - .delay = 50*1000, // ramping delay in us - .stepDown= 2, - .stepUp = 4, -}; - -STATIC halVolRampT volRampMultimedia= { - .slave = Multimedia_Playback_Volume, - .delay = 50*1000, // ramping delay in us - .stepDown= 2, - .stepUp = 4, -}; - -STATIC halVolRampT volRampRadio= { - .slave = Radio_Playback_Volume, - .delay = 50*1000, // ramping delay in us - .stepDown= 2, - .stepUp = 4, -}; - -STATIC halVolRampT volRampCustomLow= { - .slave = CustomLow_Playback_Volume, - .delay = 50*1000, // ramping delay in us - .stepDown= 2, - .stepUp = 4, -}; - -STATIC halVolRampT volRampFallback= { - .slave = Fallback_Playback_Volume, - .delay = 50*1000, // ramping delay in us - .stepDown= 2, - .stepUp = 4, -}; - - -// Map HAL hight sndctl with Alsa numid and optionally with a custom callback for non Alsa supported functionalities. -STATIC alsaHalMapT alsaHalMap[]= { - { .tag=Master_Playback_Volume, .ctl={.name="Master Playback Volume", .value=100 } }, - { .tag=PCM_Playback_Volume , .ctl={.name="PCM Playback Volume", .value=100 } }, - { .tag=PCM_Playback_Switch , .ctl={.name="Master Playback Switch" } }, - { .tag=Capture_Volume , .ctl={.name="Capture Volume" } }, - - // Sound card does not have hardware volume ramping - { .tag=Master_Playback_Ramp , .cb={.callback=volumeRamp, .handle=&volRampMaster}, .info="Master Playback Volume Ramp", - .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER, .count=1, .minval=0, .maxval=100, .step=1, .name="Master_Ramp"} - }, - - // Implement Rampup Volume for Virtual Channels (0-100) - { .tag=Emergency_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampEmergency}, .info="RampUp Emergency Volume", - .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="Emergency_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } - }, - { .tag=Warning_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampWarning}, .info="RampUp Warning Volume", - .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="Warning_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } - }, - { .tag=CustomHigh_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampCustomHigh}, .info="RampUp CustomHigh Volume", - .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="CustomHigh_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } - }, - { .tag=Phone_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampPhone}, .info="RampUp Phone Volume", - .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="Phone_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } - }, - { .tag=Navigation_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampNavigation}, .info="RampUp Navigation Volume", - .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="Navigation_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } - }, - { .tag=CustomMedium_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampCustomMedium}, .info="RampUp CustomMedium Volume", - .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="CustomMedium_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } - }, - { .tag=Video_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampVideo}, .info="RampUp Video Volume", - .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="Video_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } - }, - { .tag=Streaming_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampStreaming}, .info="RampUp Streaming Volume", - .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="Streaming_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } - }, - { .tag=Multimedia_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampMultimedia}, .info="RampUp Multimedia Volume", - .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="Multimedia_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } - }, - { .tag=Radio_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampRadio}, .info="RampUp Radio Volume", - .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="Radio_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } - }, - { .tag=CustomLow_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampCustomLow}, .info="RampUp CustomLow Volume", - .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="CustomLow_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } - }, - { .tag=Fallback_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampFallback}, .info="RampUp Fallback Volume", - .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="Fallback_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } - }, - - // Bind with existing ones created by ALSA configuration (and linked to softvol) [0-255] - { .tag=Emergency_Playback_Volume , - .ctl={.name="Emergency_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } - }, - { .tag=Warning_Playback_Volume , - .ctl={.name="Warning_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } - }, - { .tag=CustomHigh_Playback_Volume , - .ctl={.name="CustomHigh_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } - }, - { .tag=Phone_Playback_Volume , - .ctl={.name="Phone_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } - }, - { .tag=Navigation_Playback_Volume , - .ctl={.name="Navigation_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } - }, - { .tag=CustomMedium_Playback_Volume , - .ctl={.name="CustomMedium_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } - }, - { .tag=Video_Playback_Volume , - .ctl={.name="Video_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } - }, - { .tag=Streaming_Playback_Volume , - .ctl={.name="Streaming_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } - }, - { .tag=Multimedia_Playback_Volume , - .ctl={.name="Multimedia_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } - }, - { .tag=Radio_Playback_Volume , - .ctl={.name="Radio_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } - }, - { .tag=CustomLow_Playback_Volume , - .ctl={.name="CustomLow_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } - }, - { .tag=Fallback_Playback_Volume , - .ctl={.name="Fallback_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } - }, - { .tag=EndHalCrlTag} /* marker for end of the array */ -} ; - -// HAL sound card mapping info -STATIC alsaHalSndCardT alsaHalSndCard = { - .name = "HDA Intel PCH", // WARNING: name MUST match with 'aplay -l' - .info = "Hardware Abstraction Layer for IntelHDA sound card", - .ctls = alsaHalMap, -}; - -STATIC int sndServiceInit() { - int err; - AFB_DEBUG("IntelHal Binding Init"); - err = halServiceInit(afbBindingV2.api, &alsaHalSndCard); - return err; -} - -// API prefix should be unique for each snd card -PUBLIC const struct afb_binding_v2 afbBindingV2 = { - .api = "intel-hda", - .init = sndServiceInit, - .verbs = halServiceApi, - .onevent = halServiceEvent, -}; diff --git a/intel-minnow/CMakeLists.txt b/intel-minnow/CMakeLists.txt new file mode 100644 index 0000000..fc67013 --- /dev/null +++ b/intel-minnow/CMakeLists.txt @@ -0,0 +1,39 @@ +########################################################################### +# Copyright 2015, 2016, 2017 IoT.bzh +# +# author: Fulup Ar Foll +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +########################################################################### + +if(HAL_INTEL_HDA) + # Add target to project dependency list + PROJECT_TARGET_ADD(hal-intel-minnow) + + # Define project Targets + ADD_LIBRARY(${TARGET_NAME} MODULE IntelHdaHAL.c) + + # Binder exposes a unique public entry point + SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES + PREFIX "afb-" + LABELS "BINDING" + LINK_FLAGS ${BINDINGS_LINK_FLAG} + OUTPUT_NAME ${TARGET_NAME} + ) + + # Library dependencies (include updates automatically) + TARGET_LINK_LIBRARIES(${TARGET_NAME} + hal-utilities-4a + ${link_libraries} + ) +endif() diff --git a/intel-minnow/IntelHdaHAL.c b/intel-minnow/IntelHdaHAL.c new file mode 100644 index 0000000..99412f0 --- /dev/null +++ b/intel-minnow/IntelHdaHAL.c @@ -0,0 +1,237 @@ +/* + * Copyright (C) 2016 "IoT.bzh" + * Author Fulup Ar Foll + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * + * To find out which control your sound card uses + * aplay -l # Check sndcard name name in between [] + * amixer -D hw:xx controls # get supported controls + * amixer -D "hw:3" cget numid=xx # get control settings + * + */ +#define _GNU_SOURCE +#include "hal-interface.h" + +// Define few private tag for not standard functions +#define PCM_Volume_Multimedia 1000 +#define PCM_Volume_Navigation 1001 +#define PCM_Volume_Emergency 1002 + +// Default Values for MasterVolume Ramping +STATIC halVolRampT volRampMaster= { + .mode = RAMP_VOL_NORMAL, + .slave = Master_Playback_Volume, + .delay = 100*1000, // ramping delay in us + .stepDown=1, + .stepUp =1, +}; + +//Solvol Ramping Value can be customize by Audio Role and Hardwar card +STATIC halVolRampT volRampEmergency= { + .slave = Emergency_Playback_Volume, + .delay = 50*1000, // ramping delay in us + .stepDown= 2, + .stepUp = 10, +}; + +STATIC halVolRampT volRampWarning= { + .slave = Warning_Playback_Volume, + .delay = 50*1000, // ramping delay in us + .stepDown= 6, + .stepUp = 10, +}; + +STATIC halVolRampT volRampCustomHigh= { + .slave = CustomHigh_Playback_Volume, + .delay = 50*1000, // ramping delay in us + .stepDown= 2, + .stepUp = 4, +}; + +STATIC halVolRampT volRampPhone= { + .slave = Phone_Playback_Volume, + .delay = 50*1000, // ramping delay in us + .stepDown= 2, + .stepUp = 2, +}; + +STATIC halVolRampT volRampNavigation= { + .slave = Navigation_Playback_Volume, + .delay = 50*1000, // ramping delay in us + .stepDown= 2, + .stepUp = 4, +}; + +STATIC halVolRampT volRampCustomMedium= { + .slave = CustomMedium_Playback_Volume, + .delay = 50*1000, // ramping delay in us + .stepDown= 2, + .stepUp = 4, +}; + +STATIC halVolRampT volRampVideo= { + .slave = Video_Playback_Volume, + .delay = 50*1000, // ramping delay in us + .stepDown= 2, + .stepUp = 4, +}; + +STATIC halVolRampT volRampStreaming= { + .slave = Streaming_Playback_Volume, + .delay = 50*1000, // ramping delay in us + .stepDown= 2, + .stepUp = 4, +}; + +STATIC halVolRampT volRampMultimedia= { + .slave = Multimedia_Playback_Volume, + .delay = 50*1000, // ramping delay in us + .stepDown= 2, + .stepUp = 4, +}; + +STATIC halVolRampT volRampRadio= { + .slave = Radio_Playback_Volume, + .delay = 50*1000, // ramping delay in us + .stepDown= 2, + .stepUp = 4, +}; + +STATIC halVolRampT volRampCustomLow= { + .slave = CustomLow_Playback_Volume, + .delay = 50*1000, // ramping delay in us + .stepDown= 2, + .stepUp = 4, +}; + +STATIC halVolRampT volRampFallback= { + .slave = Fallback_Playback_Volume, + .delay = 50*1000, // ramping delay in us + .stepDown= 2, + .stepUp = 4, +}; + + +// Map HAL hight sndctl with Alsa numid and optionally with a custom callback for non Alsa supported functionalities. +STATIC alsaHalMapT alsaHalMap[]= { + { .tag=Video_Playback_Volume, .ctl={.name="Video_Volume", .value=100 } }, + { .tag=Phone_Playback_Volume, .ctl={.name="Phone_Volume", .value=100 } }, + { .tag=PCM_Playback_Volume , .ctl={.name="PCM Playback Volume", .value=100 } }, + { .tag=IEC958 Playback Switch, .ctl={.name="IEC958 Playback Switch" } }, + + // Sound card does not have hardware volume ramping + { .tag=Master_Playback_Ramp , .cb={.callback=volumeRamp, .handle=&volRampMaster}, .info="Master Playback Volume Ramp", + .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER, .count=1, .minval=0, .maxval=100, .step=1, .name="Master_Ramp"} + }, + + // Implement Rampup Volume for Virtual Channels (0-1amixer -D hw:0 controls00) + { .tag=Emergency_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampEmergency}, .info="RampUp Emergency Volume", + .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="Emergency_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } + }, + { .tag=Warning_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampWarning}, .info="RampUp Warning Volume", + .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="Warning_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } + }, + { .tag=CustomHigh_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampCustomHigh}, .info="RampUp CustomHigh Volume", + .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="CustomHigh_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } + }, + { .tag=Phone_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampPhone}, .info="RampUp Phone Volume", + .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="Phone_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } + }, + { .tag=Navigation_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampNavigation}, .info="RampUp Navigation Volume", + .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="Navigation_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } + }, + { .tag=CustomMedium_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampCustomMedium}, .info="RampUp CustomMedium Volume", + .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="CustomMedium_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } + }, + { .tag=Video_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampVideo}, .info="RampUp Video Volume", + .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="Video_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } + }, + { .tag=Streaming_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampStreaming}, .info="RampUp Streaming Volume", + .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="Streaming_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } + }, + { .tag=Multimedia_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampMultimedia}, .info="RampUp Multimedia Volume", + .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="Multimedia_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } + }, + { .tag=Radio_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampRadio}, .info="RampUp Radio Volume", + .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="Radio_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } + }, + { .tag=CustomLow_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampCustomLow}, .info="RampUp CustomLow Volume", + .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="CustomLow_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } + }, + { .tag=Fallback_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampFallback}, .info="RampUp Fallback Volume", + .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="Fallback_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } + }, + + // Bind with existing ones created by ALSA configuration (and linked to softvol) [0-255] + { .tag=Emergency_Playback_Volume , + .ctl={.name="Emergency_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } + }, + { .tag=Warning_Playback_Volume , + .ctl={.name="Warning_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } + }, + { .tag=CustomHigh_Playback_Volume , + .ctl={.name="CustomHigh_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } + }, + { .tag=Phone_Playback_Volume , + .ctl={.name="Phone_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } + }, + { .tag=Navigation_Playback_Volume , + .ctl={.name="Navigation_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } + }, + { .tag=CustomMedium_Playback_Volume , + .ctl={.name="CustomMedium_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } + }, + { .tag=Video_Playback_Volume , + .ctl={.name="Video_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } + }, + { .tag=Streaming_Playback_Volume , + .ctl={.name="Streaming_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } + }, + { .tag=Multimedia_Playback_Volume , + .ctl={.name="Multimedia_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } + }, + { .tag=Radio_Playback_Volume , + .ctl={.name="Radio_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } + }, + { .tag=CustomLow_Playback_Volume , + .ctl={.name="CustomLow_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } + }, + { .tag=Fallback_Playback_Volume , + .ctl={.name="Fallback_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } + }, + { .tag=EndHalCrlTag} /* marker for end of the array */ +} ; + +// HAL sound card mapping info +STATIC alsaHalSndCardT alsaHalSndCard = { + .name = "HDA Intel PCH", // WARNING: name MUST match with 'aplay -l' + .info = "Hardware Abstraction Layer for IntelHDA Minnowboard sound card", + .ctls = alsaHalMap, +}; + +STATIC int sndServiceInit() { + int err; + AFB_DEBUG("IntelHal Minnow Board Binding Init"); + err = halServiceInit(afbBindingV2.api, &alsaHalSndCard); + return err; +} + +// API prefix should be unique for each snd card +PUBLIC const struct afb_binding_v2 afbBindingV2 = { + .api = "intel-minnow", + .init = sndServiceInit, + .verbs = halServiceApi, + .onevent = halServiceEvent, +}; diff --git a/intel-minnow/amixer-output-pc.txt b/intel-minnow/amixer-output-pc.txt new file mode 100644 index 0000000..08b89bd --- /dev/null +++ b/intel-minnow/amixer-output-pc.txt @@ -0,0 +1,41 @@ + +amixer -D hw:0 controls + +numid=1,iface=CARD,name='HDMI/DP,pcm=3 Jack' +numid=7,iface=CARD,name='HDMI/DP,pcm=7 Jack' +numid=19,iface=MIXER,name='Phone_Volume' +numid=22,iface=MIXER,name='Video_Volume' +numid=2,iface=MIXER,name='IEC958 Playback Con Mask' +numid=8,iface=MIXER,name='IEC958 Playback Con Mask',index=1 +numid=3,iface=MIXER,name='IEC958 Playback Pro Mask' +numid=9,iface=MIXER,name='IEC958 Playback Pro Mask',index=1 +numid=4,iface=MIXER,name='IEC958 Playback Default' +numid=10,iface=MIXER,name='IEC958 Playback Default',index=1 +numid=5,iface=MIXER,name='IEC958 Playback Switch' +numid=11,iface=MIXER,name='IEC958 Playback Switch',index=1 +numid=18,iface=MIXER,name='CustomHigh_Volume' +numid=26,iface=MIXER,name='CustomLow_Volume' +numid=21,iface=MIXER,name='CustomMedium_Volume' +numid=15,iface=MIXER,name='Emergency_Volume' +numid=16,iface=MIXER,name='Fallback_Volume' +numid=24,iface=MIXER,name='Multimedia_Volume' +numid=20,iface=MIXER,name='Navigation_Volume' +numid=25,iface=MIXER,name='Radio_Volume' +numid=23,iface=MIXER,name='Streaming_Volume' +numid=17,iface=MIXER,name='Warning_Volume' +numid=6,iface=PCM,name='ELD',device=3 +numid=13,iface=PCM,name='Playback Channel Map',device=3 +numid=12,iface=PCM,name='ELD',device=7 +numid=14,iface=PCM,name='Playback Channel Map',device=7 + + + aplay -l + + **** Liste des Périphériques Matériels PLAYBACK **** +**** List of PLAYBACK Hardware Devices **** +card 0: PCH [HDA Intel PCH], device 3: HDMI 0 [HDMI 0] + Subdevices: 1/1 + Subdevice #0: subdevice #0 +card 0: PCH [HDA Intel PCH], device 7: HDMI 1 [HDMI 1] + Subdevices: 1/1 + Subdevice #0: subdevice #0 diff --git a/intel-pc/CMakeLists.txt b/intel-pc/CMakeLists.txt new file mode 100644 index 0000000..68cc902 --- /dev/null +++ b/intel-pc/CMakeLists.txt @@ -0,0 +1,39 @@ +########################################################################### +# Copyright 2015, 2016, 2017 IoT.bzh +# +# author: Fulup Ar Foll +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +########################################################################### + +if(HAL_INTEL_HDA) + # Add target to project dependency list + PROJECT_TARGET_ADD(hal-intel-pc) + + # Define project Targets + ADD_LIBRARY(${TARGET_NAME} MODULE IntelHdaHAL.c) + + # Binder exposes a unique public entry point + SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES + PREFIX "afb-" + LABELS "BINDING" + LINK_FLAGS ${BINDINGS_LINK_FLAG} + OUTPUT_NAME ${TARGET_NAME} + ) + + # Library dependencies (include updates automatically) + TARGET_LINK_LIBRARIES(${TARGET_NAME} + hal-utilities-4a + ${link_libraries} + ) +endif() diff --git a/intel-pc/IntelHdaHAL.c b/intel-pc/IntelHdaHAL.c new file mode 100644 index 0000000..e2be738 --- /dev/null +++ b/intel-pc/IntelHdaHAL.c @@ -0,0 +1,237 @@ +/* + * Copyright (C) 2016 "IoT.bzh" + * Author Fulup Ar Foll + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * + * To find out which control your sound card uses + * aplay -l # Check sndcard name name in between [] + * amixer -D hw:xx controls # get supported controls + * amixer -D "hw:3" cget numid=xx # get control settings + * + */ +#define _GNU_SOURCE +#include "hal-interface.h" + +// Define few private tag for not standard functions +#define PCM_Volume_Multimedia 1000 +#define PCM_Volume_Navigation 1001Laptop +#define PCM_Volume_Emergency 1002 + +// Default Values for MasterVolume Ramping +STATIC halVolRampT volRampMaster= { + .mode = RAMP_VOL_NORMAL, + .slave = Master_Playback_Volume, + .delay = 100*1000, // ramping delay in us + .stepDown=1, + .stepUp =1, +}; + +//Solvol Ramping Value can be customize by Audio Role and Hardwar card +STATIC halVolRampT volRampEmergency= { + .slave = Emergency_Playback_Volume, + .delay = 50*1000, // ramping delay in us + .stepDown= 2, + .stepUp = 10, +}; + +STATIC halVolRampT volRampWarning= { + .slave = Warning_Playback_Volume, + .delay = 50*1000, // ramping delay in us + .stepDown= 6, + .stepUp = 10, +}; + +STATIC halVolRampT volRampCustomHigh= { + .slave = CustomHigh_Playback_Volume, + .delay = 50*1000, // ramping delay in us + .stepDown= 2, + .stepUp = 4, +}; + +STATIC halVolRampT volRampPhone= { + .slave = Phone_Playback_Volume, + .delay = 50*1000, // ramping delay in us + .stepDown= 2, + .stepUp = 2, +};Laptop + +STATIC halVolRampT volRampNavigation= { + .slave = Navigation_Playback_Volume, + .delay = 50*1000, // ramping delay in us + .stepDown= 2, + .stepUp = 4, +}; + +STATIC halVolRampT volRampCustomMedium= { + .slave = CustomMedium_Playback_Volume, + .delay = 50*1000, // ramping delay in us + .stepDown= 2, + .stepUp = 4, +}; + +STATIC halVolRampT volRampVideo= { + .slave = Video_Playback_Volume, + .delay = 50*1000, // ramping delay in us + .stepDown= 2, + .stepUp = 4, +}; + +STATIC halVolRampT volRampStreaming= { + .slave = Streaming_Playback_VoluLaptopme, + .delay = 50*1000, // ramping delay in us + .stepDown= 2, + .stepUp = 4, +}; + +STATIC halVolRampT volRampMultimedia= { + .slave = Multimedia_Playback_Volume, + .delay = 50*1000, // ramping delay in us + .stepDown= 2,Laptop + .stepUp = 4, +}; + +STATIC halVolRampT volRampRadio= { + .slave = Radio_Playback_Volume, + .delay = 50*1000, // ramping delay in us + .stepDown= 2, + .stepUp = 4, +}; + +STATIC halVolRampT volRampCustomLow= { + .slave = CustomLow_Playback_Volume, + .delay = 50*1000, // ramping delay in us + .stepDown= 2,Laptop + .stepUp = 4, +}; + +STATIC halVolRampT volRampFallback= { + .slave = Fallback_Playback_Volume, + .delay = 50*1000, // ramping delay in us + .stepDown= 2, + .stepUp = 4, +}; + + +// Map HAL hight sndctl with Alsa numidLaptop and optionally with a custom callback for non Alsa supported functionalities. +STATIC alsaHalMapT alsaHalMap[]= { + { .tag=Master_Playback_Volume, .ctl={.name="Master Playback Volume", .value=100 } }, + { .tag=PCM_Playback_Volume , .ctl={.name="PCM Playback Volume", .value=100 } }, + { .tag=PCM_Playback_Switch , .ctl={.name="Master Playback Switch" } }, + { .tag=Capture_Volume , .ctl={.name="Capture Volume" } }, + + // Sound card does not have hardware volume ramping + { .tag=Master_Playback_Ramp , .cb={.callback=volumeRamp, .handle=&volRampMaster}, .info="Master Playback Volume Ramp", + .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER, .count=1, .minval=0, .maxval=100, .step=1, .name="Master_Ramp"} + }, + + // Implement Rampup Volume for Virtual Channels (0-100) + { .tag=Emergency_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampEmergency}, .info="RampUp Emergency Volume", + .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="Emergency_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } + }, + { .tag=Warning_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampWarning}, .info="RampUp Warning Volume", + .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="Warning_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } + }, + { .tag=CustomHigh_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampCustomHigh}, .info="RampUp CustomHigh Volume", + .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="CustomHigh_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } + }, + { .tag=Phone_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampPhone}, .info="RampUp Phone Volume", + .ctl={.numid=CTL_AUTO, .type=SNLaptopD_CTL_ELEM_TYPE_INTEGER,.name="Phone_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } + }, + { .tag=Navigation_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampNavigation}, .info="RampUp Navigation Volume", + .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="Navigation_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } + }, + { .tag=CustomMedium_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampCustomMedium}, .info="RampUp CustomMedium Volume", + .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="CustomMedium_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } + }, + { .tag=Video_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampVideo}, .info="RampUp Video Volume", + .ctl={.numid=CTL_AUTO, .type=SNLaptopD_CTL_ELEM_TYPE_INTEGER,.name="Video_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } + }, + { .tag=Streaming_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampStreaming}, .info="RampUp Streaming Volume", + .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="Streaming_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } + },OnErrorExitOnErrorExit + { .tag=Multimedia_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampMultimedia}, .info="RampUp Multimedia Volume", + .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="Multimedia_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } + }, + { .tag=Radio_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampRadio}, .info="RampUp Radio Volume", + .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="Radio_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } + }, + { .tag=CustomLow_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampCustomLow}, .info="RampUp CustomLow Volume", + .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="CustomLow_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } + }, + { .tag=Fallback_Playback_Ramp, .cb={.callback=volumeRamp, .handle=&volRampFallback}, .info="RampUp Fallback Volume", + .ctl={.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.name="Fallback_Ramp", .minval=0, .maxval=100, .step=1, .value=80 } + }, + + // Bind with existing ones created by ALSA configuration (and linked to softvol) [0-255] + { .tag=Emergency_Playback_Volume , + .ctl={.name="Emergency_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } + }, + { .tag=Warning_Playback_Volume , + .ctl={.name="Warning_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } + }, + { .tag=CustomHigh_Playback_Volume , + .ctl={.name="CustomHigh_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } + }, + { .tag=Phone_Playback_Volume , + .ctl={.name="Phone_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } + }, + { .tag=Navigation_Playback_Volume , + .ctl={.name="Navigation_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } + }, + { .tag=CustomMedium_Playback_Volume , + .ctl={.name="CustomMedium_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } + }, + { .tag=Video_Playback_Volume , + .ctl={.name="Video_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } + }, + { .tag=Streaming_Playback_Volume , + .ctl={.name="Streaming_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } + }, + { .tag=Multimedia_Playback_Volume , + .ctl={.name="Multimedia_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } + }, + { .tag=Radio_Playback_Volume , + .ctl={.name="Radio_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } + }, + { .tag=CustomLow_Playback_Volume , + .ctl={.name="CustomLow_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } + }, + { .tag=Fallback_Playback_Volume , + .ctl={.name="Fallback_Volume",.numid=CTL_AUTO, .type=SND_CTL_ELEM_TYPE_INTEGER,.count=2, .maxval=255, .value=204 } + }, + { .tag=EndHalCrlTag} /* marker for end of the array */ +} ; + +// HAL sound card mapping info +STATIC alsaHalSndCardT alsaHalSndCard = { + .name = "HDA Intel PCH", // WARNING: name MUST match with 'aplay -l' + .info = "Hardware Abstraction Layer for IntelHDA sound card for PC / Laptop", + .ctls = alsaHalMap, +}; + +STATIC int sndServiceInit() { + int err; + AFB_DEBUG("IntelHal PC-laptop Binding Init"); + err = halServiceInit(afbBindingV2.api, &alsaHalSndCard); + return err; +} + +// API prefix should be unique for each snd card +PUBLIC const struct afb_binding_v2 afbBindingV2 = { + .api = "intel-pc", + .init = sndServiceInit, + .verbs = halServiceApi, + .onevent = halServiceEvent, +}; diff --git a/intel-pc/amixer-output-pc.txt b/intel-pc/amixer-output-pc.txt new file mode 100644 index 0000000..955d817 --- /dev/null +++ b/intel-pc/amixer-output-pc.txt @@ -0,0 +1,62 @@ + +amixer -D hw:0 controls + +numid=18,iface=CARD,name='Dock Headphone Jack' +numid=14,iface=CARD,name='Dock Mic Jack' +numid=22,iface=CARD,name='HDMI/DP,pcm=3 Jack' +numid=28,iface=CARD,name='HDMI/DP,pcm=7 Jack' +numid=34,iface=CARD,name='HDMI/DP,pcm=8 Jack' +numid=19,iface=CARD,name='Headphone Jack' +numid=16,iface=CARD,name='Internal Mic Phantom Jack' +numid=15,iface=CARD,name='Mic Jack' +numid=17,iface=CARD,name='Speaker Phantom Jack' +numid=13,iface=MIXER,name='Master Playback Switch' +numid=12,iface=MIXER,name='Master Playback Volume' +numid=4,iface=MIXER,name='Headphone Playback Switch' +numid=5,iface=MIXER,name='Headphone Playback Switch',index=1 +numid=3,iface=MIXER,name='Headphone Playback Volume' +numid=43,iface=MIXER,name='PCM Playback Volume' +numid=10,iface=MIXER,name='Mic Boost Volume' +numid=8,iface=MIXER,name='Capture Switch' +numid=7,iface=MIXER,name='Capture Volume' +numid=23,iface=MIXER,name='IEC958 Playback Con Mask' +numid=29,iface=MIXER,name='IEC958 Playback Con Mask',index=1 +numid=35,iface=MIXER,name='IEC958 Playback Con Mask',index=2 +numid=24,iface=MIXER,name='IEC958 Playback Pro Mask' +numid=30,iface=MIXER,name='IEC958 Playback Pro Mask',index=1 +numid=36,iface=MIXER,name='IEC958 Playback Pro Mask',index=2 +numid=25,iface=MIXER,name='IEC958 Playback Default' +numid=31,iface=MIXER,name='IEC958 Playback Default',index=1 +numid=37,iface=MIXER,name='IEC958 Playback Default',index=2 +numid=26,iface=MIXER,name='IEC958 Playback Switch' +numid=32,iface=MIXER,name='IEC958 Playback Switch',index=1 +numid=38,iface=MIXER,name='IEC958 Playback Switch',index=2 +numid=6,iface=MIXER,name='Auto-Mute Mode' +numid=9,iface=MIXER,name='Dock Mic Boost Volume' +numid=11,iface=MIXER,name='Internal Mic Boost Volume' +numid=2,iface=MIXER,name='Speaker Playback Switch' +numid=1,iface=MIXER,name='Speaker Playback Volume' +numid=21,iface=PCM,name='Capture Channel Map' +numid=20,iface=PCM,name='Playback Channel Map' +numid=27,iface=PCM,name='ELD',device=3 +numid=40,iface=PCM,name='Playback Channel Map',device=3 +numid=33,iface=PCM,name='ELD',device=7 +numid=41,iface=PCM,name='Playback Channel Map',device=7 +numid=39,iface=PCM,name='ELD',device=8 +numid=42,iface=PCM,name='Playback Channel Map',device=8 + + aplay -l + + **** Liste des Périphériques Matériels PLAYBACK **** +carte 0: PCH [HDA Intel PCH], périphérique 0: ALC293 Analog [ALC293 Analog] + Sous-périphériques: 1/1 + Sous-périphérique #0: subdevice #0 +carte 0: PCH [HDA Intel PCH], périphérique 3: HDMI 0 [HDMI 0] + Sous-périphériques: 1/1 + Sous-périphérique #0: subdevice #0 +carte 0: PCH [HDA Intel PCH], périphérique 7: HDMI 1 [HDMI 1] + Sous-périphériques: 1/1 + Sous-périphérique #0: subdevice #0 +carte 0: PCH [HDA Intel PCH], périphérique 8: HDMI 2 [HDMI 2] + Sous-périphériques: 1/1 + Sous-périphérique #0: subdevice #0 -- cgit 1.2.3-korg