From 0d59423263be43f22cf8d597a6da4ec5f2d7f142 Mon Sep 17 00:00:00 2001 From: Scott Murray Date: Mon, 9 May 2022 17:53:46 -0400 Subject: meta-agl-bsp: update virtio-aarch64 Updates to get the virtio-aarch64 machine building after the upgrade to Yocto Project 4.0 / kirkstone: - Switch to the 5.15 linux-yocto kernel and drop the local backport of the 5.10 recipe. - Fix override syntax in the machine-specific linux-yocto bbappend. - Remove all the patches applied for the virtio and virtio-snd configuration fragments, they seem to have all been applied upstream. Bug-AGL: SPEC-4356 Signed-off-by: Scott Murray Change-Id: I96d4bb9b04d74280d1a3767fe17284fe6049fcba Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/meta-agl/+/27465 Reviewed-by: Vasyl Vavrychuk Tested-by: Jenkins Job builder account ci-image-build: Jenkins Job builder account ci-image-boot-test: Jenkins Job builder account --- .../0007-ALSA-virtio-introduce-jack-support.patch | 351 --------------------- 1 file changed, 351 deletions(-) delete mode 100644 meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0007-ALSA-virtio-introduce-jack-support.patch (limited to 'meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0007-ALSA-virtio-introduce-jack-support.patch') diff --git a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0007-ALSA-virtio-introduce-jack-support.patch b/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0007-ALSA-virtio-introduce-jack-support.patch deleted file mode 100644 index af30421e0..000000000 --- a/meta-agl-bsp/virtualization-layer/recipes-kernel/linux/linux-yocto/virtio-kmeta/bsp/virtio/virtio-snd/0007-ALSA-virtio-introduce-jack-support.patch +++ /dev/null @@ -1,351 +0,0 @@ -From 07692f250a96382b38daa2b7e2b96689f64d7a40 Mon Sep 17 00:00:00 2001 -From: Anton Yakovlev -Date: Tue, 2 Mar 2021 17:47:07 +0100 -Subject: [PATCH] ALSA: virtio: introduce jack support - -Enumerate all available jacks and create ALSA controls. - -At the moment jacks have a simple implementation and can only be used -to receive notifications about a plugged in/out device. - -Signed-off-by: Anton Yakovlev -Link: https://lore.kernel.org/r/20210302164709.3142702-8-anton.yakovlev@opensynergy.com -Signed-off-by: Takashi Iwai -Signed-off-by: Vasyl Vavrychuk ---- - sound/virtio/Makefile | 1 + - sound/virtio/virtio_card.c | 14 +++ - sound/virtio/virtio_card.h | 12 ++ - sound/virtio/virtio_jack.c | 233 +++++++++++++++++++++++++++++++++++++ - 4 files changed, 260 insertions(+) - create mode 100644 sound/virtio/virtio_jack.c - -diff --git a/sound/virtio/Makefile b/sound/virtio/Makefile -index 34493226793f..09f485291285 100644 ---- a/sound/virtio/Makefile -+++ b/sound/virtio/Makefile -@@ -5,6 +5,7 @@ obj-$(CONFIG_SND_VIRTIO) += virtio_snd.o - virtio_snd-objs := \ - virtio_card.o \ - virtio_ctl_msg.o \ -+ virtio_jack.o \ - virtio_pcm.o \ - virtio_pcm_msg.o \ - virtio_pcm_ops.o -diff --git a/sound/virtio/virtio_card.c b/sound/virtio/virtio_card.c -index 57b9b7f3a9c0..89bd66c1256e 100644 ---- a/sound/virtio/virtio_card.c -+++ b/sound/virtio/virtio_card.c -@@ -56,6 +56,10 @@ static void virtsnd_event_dispatch(struct virtio_snd *snd, - struct virtio_snd_event *event) - { - switch (le32_to_cpu(event->hdr.code)) { -+ case VIRTIO_SND_EVT_JACK_CONNECTED: -+ case VIRTIO_SND_EVT_JACK_DISCONNECTED: -+ virtsnd_jack_event(snd, event); -+ break; - case VIRTIO_SND_EVT_PCM_PERIOD_ELAPSED: - case VIRTIO_SND_EVT_PCM_XRUN: - virtsnd_pcm_event(snd, event); -@@ -219,10 +223,20 @@ static int virtsnd_build_devs(struct virtio_snd *snd) - VIRTIO_SND_CARD_NAME " at %s/%s", - dev_name(dev->parent), dev_name(dev)); - -+ rc = virtsnd_jack_parse_cfg(snd); -+ if (rc) -+ return rc; -+ - rc = virtsnd_pcm_parse_cfg(snd); - if (rc) - return rc; - -+ if (snd->njacks) { -+ rc = virtsnd_jack_build_devs(snd); -+ if (rc) -+ return rc; -+ } -+ - if (snd->nsubstreams) { - rc = virtsnd_pcm_build_devs(snd); - if (rc) -diff --git a/sound/virtio/virtio_card.h b/sound/virtio/virtio_card.h -index c43f9744d362..f154313c79fd 100644 ---- a/sound/virtio/virtio_card.h -+++ b/sound/virtio/virtio_card.h -@@ -18,6 +18,7 @@ - #define VIRTIO_SND_CARD_NAME "VirtIO SoundCard" - #define VIRTIO_SND_PCM_NAME "VirtIO PCM" - -+struct virtio_jack; - struct virtio_pcm_substream; - - /** -@@ -38,6 +39,8 @@ struct virtio_snd_queue { - * @ctl_msgs: Pending control request list. - * @event_msgs: Device events. - * @pcm_list: VirtIO PCM device list. -+ * @jacks: VirtIO jacks. -+ * @njacks: Number of jacks. - * @substreams: VirtIO PCM substreams. - * @nsubstreams: Number of PCM substreams. - */ -@@ -48,6 +51,8 @@ struct virtio_snd { - struct list_head ctl_msgs; - struct virtio_snd_event *event_msgs; - struct list_head pcm_list; -+ struct virtio_jack *jacks; -+ u32 njacks; - struct virtio_pcm_substream *substreams; - u32 nsubstreams; - }; -@@ -88,4 +93,11 @@ virtsnd_pcm_queue(struct virtio_pcm_substream *vss) - return virtsnd_rx_queue(vss->snd); - } - -+int virtsnd_jack_parse_cfg(struct virtio_snd *snd); -+ -+int virtsnd_jack_build_devs(struct virtio_snd *snd); -+ -+void virtsnd_jack_event(struct virtio_snd *snd, -+ struct virtio_snd_event *event); -+ - #endif /* VIRTIO_SND_CARD_H */ -diff --git a/sound/virtio/virtio_jack.c b/sound/virtio/virtio_jack.c -new file mode 100644 -index 000000000000..c69f1dcdcc84 ---- /dev/null -+++ b/sound/virtio/virtio_jack.c -@@ -0,0 +1,233 @@ -+// SPDX-License-Identifier: GPL-2.0+ -+/* -+ * virtio-snd: Virtio sound device -+ * Copyright (C) 2021 OpenSynergy GmbH -+ */ -+#include -+#include -+#include -+ -+#include "virtio_card.h" -+ -+/** -+ * DOC: Implementation Status -+ * -+ * At the moment jacks have a simple implementation and can only be used to -+ * receive notifications about a plugged in/out device. -+ * -+ * VIRTIO_SND_R_JACK_REMAP -+ * is not supported -+ */ -+ -+/** -+ * struct virtio_jack - VirtIO jack. -+ * @jack: Kernel jack control. -+ * @nid: Functional group node identifier. -+ * @features: Jack virtio feature bit map (1 << VIRTIO_SND_JACK_F_XXX). -+ * @defconf: Pin default configuration value. -+ * @caps: Pin capabilities value. -+ * @connected: Current jack connection status. -+ * @type: Kernel jack type (SND_JACK_XXX). -+ */ -+struct virtio_jack { -+ struct snd_jack *jack; -+ u32 nid; -+ u32 features; -+ u32 defconf; -+ u32 caps; -+ bool connected; -+ int type; -+}; -+ -+/** -+ * virtsnd_jack_get_label() - Get the name string for the jack. -+ * @vjack: VirtIO jack. -+ * -+ * Returns the jack name based on the default pin configuration value (see HDA -+ * specification). -+ * -+ * Context: Any context. -+ * Return: Name string. -+ */ -+static const char *virtsnd_jack_get_label(struct virtio_jack *vjack) -+{ -+ unsigned int defconf = vjack->defconf; -+ unsigned int device = -+ (defconf & AC_DEFCFG_DEVICE) >> AC_DEFCFG_DEVICE_SHIFT; -+ unsigned int location = -+ (defconf & AC_DEFCFG_LOCATION) >> AC_DEFCFG_LOCATION_SHIFT; -+ -+ switch (device) { -+ case AC_JACK_LINE_OUT: -+ return "Line Out"; -+ case AC_JACK_SPEAKER: -+ return "Speaker"; -+ case AC_JACK_HP_OUT: -+ return "Headphone"; -+ case AC_JACK_CD: -+ return "CD"; -+ case AC_JACK_SPDIF_OUT: -+ case AC_JACK_DIG_OTHER_OUT: -+ if (location == AC_JACK_LOC_HDMI) -+ return "HDMI Out"; -+ else -+ return "SPDIF Out"; -+ case AC_JACK_LINE_IN: -+ return "Line"; -+ case AC_JACK_AUX: -+ return "Aux"; -+ case AC_JACK_MIC_IN: -+ return "Mic"; -+ case AC_JACK_SPDIF_IN: -+ return "SPDIF In"; -+ case AC_JACK_DIG_OTHER_IN: -+ return "Digital In"; -+ default: -+ return "Misc"; -+ } -+} -+ -+/** -+ * virtsnd_jack_get_type() - Get the type for the jack. -+ * @vjack: VirtIO jack. -+ * -+ * Returns the jack type based on the default pin configuration value (see HDA -+ * specification). -+ * -+ * Context: Any context. -+ * Return: SND_JACK_XXX value. -+ */ -+static int virtsnd_jack_get_type(struct virtio_jack *vjack) -+{ -+ unsigned int defconf = vjack->defconf; -+ unsigned int device = -+ (defconf & AC_DEFCFG_DEVICE) >> AC_DEFCFG_DEVICE_SHIFT; -+ -+ switch (device) { -+ case AC_JACK_LINE_OUT: -+ case AC_JACK_SPEAKER: -+ return SND_JACK_LINEOUT; -+ case AC_JACK_HP_OUT: -+ return SND_JACK_HEADPHONE; -+ case AC_JACK_SPDIF_OUT: -+ case AC_JACK_DIG_OTHER_OUT: -+ return SND_JACK_AVOUT; -+ case AC_JACK_MIC_IN: -+ return SND_JACK_MICROPHONE; -+ default: -+ return SND_JACK_LINEIN; -+ } -+} -+ -+/** -+ * virtsnd_jack_parse_cfg() - Parse the jack configuration. -+ * @snd: VirtIO sound device. -+ * -+ * This function is called during initial device initialization. -+ * -+ * Context: Any context that permits to sleep. -+ * Return: 0 on success, -errno on failure. -+ */ -+int virtsnd_jack_parse_cfg(struct virtio_snd *snd) -+{ -+ struct virtio_device *vdev = snd->vdev; -+ struct virtio_snd_jack_info *info; -+ u32 i; -+ int rc; -+ -+ virtio_cread_le(vdev, struct virtio_snd_config, jacks, &snd->njacks); -+ if (!snd->njacks) -+ return 0; -+ -+ snd->jacks = devm_kcalloc(&vdev->dev, snd->njacks, sizeof(*snd->jacks), -+ GFP_KERNEL); -+ if (!snd->jacks) -+ return -ENOMEM; -+ -+ info = kcalloc(snd->njacks, sizeof(*info), GFP_KERNEL); -+ if (!info) -+ return -ENOMEM; -+ -+ rc = virtsnd_ctl_query_info(snd, VIRTIO_SND_R_JACK_INFO, 0, snd->njacks, -+ sizeof(*info), info); -+ if (rc) -+ goto on_exit; -+ -+ for (i = 0; i < snd->njacks; ++i) { -+ struct virtio_jack *vjack = &snd->jacks[i]; -+ -+ vjack->nid = le32_to_cpu(info[i].hdr.hda_fn_nid); -+ vjack->features = le32_to_cpu(info[i].features); -+ vjack->defconf = le32_to_cpu(info[i].hda_reg_defconf); -+ vjack->caps = le32_to_cpu(info[i].hda_reg_caps); -+ vjack->connected = info[i].connected; -+ } -+ -+on_exit: -+ kfree(info); -+ -+ return rc; -+} -+ -+/** -+ * virtsnd_jack_build_devs() - Build ALSA controls for jacks. -+ * @snd: VirtIO sound device. -+ * -+ * Context: Any context that permits to sleep. -+ * Return: 0 on success, -errno on failure. -+ */ -+int virtsnd_jack_build_devs(struct virtio_snd *snd) -+{ -+ u32 i; -+ int rc; -+ -+ for (i = 0; i < snd->njacks; ++i) { -+ struct virtio_jack *vjack = &snd->jacks[i]; -+ -+ vjack->type = virtsnd_jack_get_type(vjack); -+ -+ rc = snd_jack_new(snd->card, virtsnd_jack_get_label(vjack), -+ vjack->type, &vjack->jack, true, true); -+ if (rc) -+ return rc; -+ -+ if (vjack->jack) -+ vjack->jack->private_data = vjack; -+ -+ snd_jack_report(vjack->jack, -+ vjack->connected ? vjack->type : 0); -+ } -+ -+ return 0; -+} -+ -+/** -+ * virtsnd_jack_event() - Handle the jack event notification. -+ * @snd: VirtIO sound device. -+ * @event: VirtIO sound event. -+ * -+ * Context: Interrupt context. -+ */ -+void virtsnd_jack_event(struct virtio_snd *snd, struct virtio_snd_event *event) -+{ -+ u32 jack_id = le32_to_cpu(event->data); -+ struct virtio_jack *vjack; -+ -+ if (jack_id >= snd->njacks) -+ return; -+ -+ vjack = &snd->jacks[jack_id]; -+ -+ switch (le32_to_cpu(event->hdr.code)) { -+ case VIRTIO_SND_EVT_JACK_CONNECTED: -+ vjack->connected = true; -+ break; -+ case VIRTIO_SND_EVT_JACK_DISCONNECTED: -+ vjack->connected = false; -+ break; -+ default: -+ return; -+ } -+ -+ snd_jack_report(vjack->jack, vjack->connected ? vjack->type : 0); -+} -- cgit 1.2.3-korg