From 73ebf262de2d993abde064c3115ff695330682c6 Mon Sep 17 00:00:00 2001 From: Gabriel Valcazar Date: Thu, 12 Jan 2017 10:48:59 +0100 Subject: [PATCH] meta-digi-dey: pulseaudio: improve HDMI hotplug script The HDMI hotplug script required alsa-utils to be installed in order to work. This commit avoids this by adding a recipe for a small binary that replaces aplay in the script. https://jira.digi.com/browse/DEL-3482 Signed-off-by: Gabriel Valcazar --- .../recipes-multimedia/alsa/card-detect.bb | 21 +++++++++ .../alsa/card-detect/card-detect.c | 47 +++++++++++++++++++ .../packagegroups/packagegroup-dey-audio.bb | 2 + .../pulseaudio/pulseaudio/hdmi_hotplug.sh | 10 +--- .../pulseaudio/pulseaudio_%.bbappend | 3 ++ 5 files changed, 74 insertions(+), 9 deletions(-) create mode 100644 meta-digi-dey/recipes-multimedia/alsa/card-detect.bb create mode 100644 meta-digi-dey/recipes-multimedia/alsa/card-detect/card-detect.c diff --git a/meta-digi-dey/recipes-multimedia/alsa/card-detect.bb b/meta-digi-dey/recipes-multimedia/alsa/card-detect.bb new file mode 100644 index 000000000..b6d44f59a --- /dev/null +++ b/meta-digi-dey/recipes-multimedia/alsa/card-detect.bb @@ -0,0 +1,21 @@ +# Copyright (C) 2017 Digi International. + +SUMMARY = "DEY sound card detection app" +SECTION = "multimedia" +LICENSE = "MPL-2.0" +LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MPL-2.0;md5=815ca599c9df247a0c7f619bab123dad" + +DEPENDS = "alsa-lib" + +SRC_URI = "file://card-detect.c" + +S = "${WORKDIR}" + +do_compile() { + ${CC} -O2 -Wall card-detect.c -o card-detect -lasound +} + +do_install() { + install -d ${D}${bindir} + install -m 0755 card-detect ${D}${bindir} +} diff --git a/meta-digi-dey/recipes-multimedia/alsa/card-detect/card-detect.c b/meta-digi-dey/recipes-multimedia/alsa/card-detect/card-detect.c new file mode 100644 index 000000000..7ead91235 --- /dev/null +++ b/meta-digi-dey/recipes-multimedia/alsa/card-detect/card-detect.c @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2017 Digi International Inc. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include +#include +#include + +int main(int argc, char *argv[]) +{ + int len, ret = EXIT_SUCCESS; + snd_pcm_t *handle; + char *device; + + if (argc < 2) { + printf("Usage: %s [CARD NUMBER]\n", argv[0]); + return EXIT_FAILURE; + } + + len = strlen("hw:") + strlen(argv[1]) + 1; + device = calloc(1, len); + snprintf(device, len, "hw:%s", argv[1]); + + /* Open the PCM-device in playback mode */ + if (snd_pcm_open(&handle, device, SND_PCM_STREAM_PLAYBACK, 0) < 0) { + printf("Could't open PCM '%s'\n", device); + ret = EXIT_FAILURE; + } else { + printf("Device %s opened successfully\n", device); + snd_pcm_close(handle); + } + + free(device); + return ret; +} diff --git a/meta-digi-dey/recipes-multimedia/packagegroups/packagegroup-dey-audio.bb b/meta-digi-dey/recipes-multimedia/packagegroups/packagegroup-dey-audio.bb index 220a0b433..3d29fdea6 100644 --- a/meta-digi-dey/recipes-multimedia/packagegroups/packagegroup-dey-audio.bb +++ b/meta-digi-dey/recipes-multimedia/packagegroups/packagegroup-dey-audio.bb @@ -22,3 +22,5 @@ RDEPENDS_${PN} = "\ alsa-states \ ${ALSA_UTILS_PKGS} \ " + +RDEPENDS_${PN}_append_ccimx6sbc = " card-detect" diff --git a/meta-digi-dey/recipes-multimedia/pulseaudio/pulseaudio/hdmi_hotplug.sh b/meta-digi-dey/recipes-multimedia/pulseaudio/pulseaudio/hdmi_hotplug.sh index 78a29786d..8c9726003 100644 --- a/meta-digi-dey/recipes-multimedia/pulseaudio/pulseaudio/hdmi_hotplug.sh +++ b/meta-digi-dey/recipes-multimedia/pulseaudio/pulseaudio/hdmi_hotplug.sh @@ -27,15 +27,7 @@ done # HDMI audio sink from ALSA if [ "${EVENT}" = "plugin" ]; then if ! pactl list sinks | grep -qs "imx-hdmi-soc"; then - if which aplay; then - # Run a command that always fails but loads - # pulseaudio HDMI sink/card as a side effect - aplay / -D "hw:${HDMI_CARD}" - else - # Unload and reload the detection module - pactl unload-module module-udev-detect - pactl load-module module-udev-detect tsched=0 - fi + card-detect "${HDMI_CARD}" # Set HDMI as default sink pactl set-default-sink "$(pactl list sinks | grep -i 'Name:.*hdmi' | cut -d ' ' -f2)" diff --git a/meta-digi-dey/recipes-multimedia/pulseaudio/pulseaudio_%.bbappend b/meta-digi-dey/recipes-multimedia/pulseaudio/pulseaudio_%.bbappend index f83abe9dd..cdbab483f 100644 --- a/meta-digi-dey/recipes-multimedia/pulseaudio/pulseaudio_%.bbappend +++ b/meta-digi-dey/recipes-multimedia/pulseaudio/pulseaudio_%.bbappend @@ -16,3 +16,6 @@ do_install_append_ccimx6sbc() { } PACKAGE_ARCH = "${MACHINE_ARCH}" + +# The card-detect binary is only necessary for the HDMI hotplug to work on the ccimx6sbc +RDEPENDS_${PN}_append_ccimx6sbc = " card-detect"