From ac78e831f4f6ef8eeda6d3c63d9a3f367c06df6d Mon Sep 17 00:00:00 2001 From: Matthias Reichl Date: Fri, 23 Jun 2023 13:38:31 +0200 Subject: [PATCH 1/3] linux (RPi): update to 6.1.35-4b60cbf Signed-off-by: Matthias Reichl --- packages/linux/package.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/linux/package.mk b/packages/linux/package.mk index b72c6d55fe..87b341aecd 100644 --- a/packages/linux/package.mk +++ b/packages/linux/package.mk @@ -23,8 +23,8 @@ case "${LINUX}" in PKG_PATCH_DIRS="default" ;; raspberrypi) - PKG_VERSION="a72a720bfd4d2093ce9e51239cd7067dd060ff81" # 6.1.34 - PKG_SHA256="3acaf74f06c04c5727e8d917251b40e5378303b9e2fc62eca81f362857c1db70" + PKG_VERSION="4b60cbf0149f5b5fa5eb9149bd35c750cbc02b25" # 6.1.35 + PKG_SHA256="74793a0d0c5cbec213913ea921384c00cf9112e0ce39d8215cda7a9048208d44" PKG_URL="https://github.com/raspberrypi/linux/archive/${PKG_VERSION}.tar.gz" PKG_SOURCE_NAME="linux-${LINUX}-${PKG_VERSION}.tar.gz" ;; From c6f29b27aaf6d201766961b48a21ea8505490849 Mon Sep 17 00:00:00 2001 From: Matthias Reichl Date: Fri, 30 Jun 2023 19:34:58 +0200 Subject: [PATCH 2/3] linux (RPi): update to 6.1.36-dc41960 drop ALSA ELD and hdmi-codec patches which are now in RPi kernel Signed-off-by: Matthias Reichl --- packages/linux/package.mk | 4 +- ...-constraints-for-E-AC3-DTS-HD-and-ML.patch | 138 ------------------ ...don-t-set-channel-and-speaker-info-f.patch | 89 ----------- 3 files changed, 2 insertions(+), 229 deletions(-) delete mode 100644 packages/linux/patches/raspberrypi/linux-020-ALSA-pcm-fix-ELD-constraints-for-E-AC3-DTS-HD-and-ML.patch delete mode 100644 packages/linux/patches/raspberrypi/linux-021-ASoC-hdmi-codec-don-t-set-channel-and-speaker-info-f.patch diff --git a/packages/linux/package.mk b/packages/linux/package.mk index 87b341aecd..ce0aaf1582 100644 --- a/packages/linux/package.mk +++ b/packages/linux/package.mk @@ -23,8 +23,8 @@ case "${LINUX}" in PKG_PATCH_DIRS="default" ;; raspberrypi) - PKG_VERSION="4b60cbf0149f5b5fa5eb9149bd35c750cbc02b25" # 6.1.35 - PKG_SHA256="74793a0d0c5cbec213913ea921384c00cf9112e0ce39d8215cda7a9048208d44" + PKG_VERSION="dc419608fb4e13bf1e33e6add31860730dd953fa" # 6.1.36 + PKG_SHA256="4a5dd4657f517dc5bc91f9c2f65d63867632f158fc9926b3234f877948107c4a" PKG_URL="https://github.com/raspberrypi/linux/archive/${PKG_VERSION}.tar.gz" PKG_SOURCE_NAME="linux-${LINUX}-${PKG_VERSION}.tar.gz" ;; diff --git a/packages/linux/patches/raspberrypi/linux-020-ALSA-pcm-fix-ELD-constraints-for-E-AC3-DTS-HD-and-ML.patch b/packages/linux/patches/raspberrypi/linux-020-ALSA-pcm-fix-ELD-constraints-for-E-AC3-DTS-HD-and-ML.patch deleted file mode 100644 index 3478eb7e09..0000000000 --- a/packages/linux/patches/raspberrypi/linux-020-ALSA-pcm-fix-ELD-constraints-for-E-AC3-DTS-HD-and-ML.patch +++ /dev/null @@ -1,138 +0,0 @@ -From 94d0a9815c99385e57a17fb20448e47a1f229bcf Mon Sep 17 00:00:00 2001 -From: Matthias Reichl -Date: Sat, 3 Jun 2023 12:00:28 +0200 -Subject: [PATCH 1/2] ALSA: pcm: fix ELD constraints for (E)AC3, DTS(-HD) and - MLP formats - -The SADs of compressed formats contain the channel and sample rate -info of the audio data inside the compressed stream, but when -building constraints we must use the rates and channels used to -transport the compressed streams. - -eg 48kHz 6ch EAC3 needs to be transmitted as a 2ch 192kHz stream. - -This patch fixes the constraints for the common AC3 and DTS formats, -the constraints for the less common MPEG, DSD etc formats are copied -directly from the info in the SADs as before as I don't have the specs -and equipment to test those. - -Signed-off-by: Matthias Reichl ---- - sound/core/pcm_drm_eld.c | 73 ++++++++++++++++++++++++++++++++++++++-- - 1 file changed, 70 insertions(+), 3 deletions(-) - -diff --git a/sound/core/pcm_drm_eld.c b/sound/core/pcm_drm_eld.c -index 4b5faae5d16e5..07075071972dd 100644 ---- a/sound/core/pcm_drm_eld.c -+++ b/sound/core/pcm_drm_eld.c -@@ -2,11 +2,25 @@ - /* - * PCM DRM helpers - */ -+#include - #include -+#include - #include - #include - #include - -+#define SAD0_CHANNELS_MASK GENMASK(2, 0) /* max number of channels - 1 */ -+#define SAD0_FORMAT_MASK GENMASK(6, 3) /* audio format */ -+ -+#define SAD1_RATE_MASK GENMASK(6, 0) /* bitfield of supported rates */ -+#define SAD1_RATE_32000_MASK BIT(0) -+#define SAD1_RATE_44100_MASK BIT(1) -+#define SAD1_RATE_48000_MASK BIT(2) -+#define SAD1_RATE_88200_MASK BIT(3) -+#define SAD1_RATE_96000_MASK BIT(4) -+#define SAD1_RATE_176400_MASK BIT(5) -+#define SAD1_RATE_192000_MASK BIT(6) -+ - static const unsigned int eld_rates[] = { - 32000, - 44100, -@@ -17,9 +31,62 @@ static const unsigned int eld_rates[] = { - 192000, - }; - -+static unsigned int map_rate_families(const u8 *sad, -+ unsigned int mask_32000, -+ unsigned int mask_44100, -+ unsigned int mask_48000) -+{ -+ unsigned int rate_mask = 0; -+ -+ if (sad[1] & SAD1_RATE_32000_MASK) -+ rate_mask |= mask_32000; -+ if (sad[1] & (SAD1_RATE_44100_MASK | SAD1_RATE_88200_MASK | SAD1_RATE_176400_MASK)) -+ rate_mask |= mask_44100; -+ if (sad[1] & (SAD1_RATE_48000_MASK | SAD1_RATE_96000_MASK | SAD1_RATE_192000_MASK)) -+ rate_mask |= mask_48000; -+ return rate_mask; -+} -+ -+static unsigned int sad_rate_mask(const u8 *sad) -+{ -+ switch (FIELD_GET(SAD0_FORMAT_MASK, sad[0])) { -+ case HDMI_AUDIO_CODING_TYPE_PCM: -+ return sad[1] & SAD1_RATE_MASK; -+ case HDMI_AUDIO_CODING_TYPE_AC3: -+ case HDMI_AUDIO_CODING_TYPE_DTS: -+ return map_rate_families(sad, -+ SAD1_RATE_32000_MASK, -+ SAD1_RATE_44100_MASK, -+ SAD1_RATE_48000_MASK); -+ case HDMI_AUDIO_CODING_TYPE_EAC3: -+ case HDMI_AUDIO_CODING_TYPE_DTS_HD: -+ case HDMI_AUDIO_CODING_TYPE_MLP: -+ return map_rate_families(sad, -+ 0, -+ SAD1_RATE_176400_MASK, -+ SAD1_RATE_192000_MASK); -+ default: -+ /* TODO adjust for other compressed formats as well */ -+ return sad[1] & SAD1_RATE_MASK; -+ } -+} -+ - static unsigned int sad_max_channels(const u8 *sad) - { -- return 1 + (sad[0] & 7); -+ switch (FIELD_GET(SAD0_FORMAT_MASK, sad[0])) { -+ case HDMI_AUDIO_CODING_TYPE_PCM: -+ return 1 + FIELD_GET(SAD0_CHANNELS_MASK, sad[0]); -+ case HDMI_AUDIO_CODING_TYPE_AC3: -+ case HDMI_AUDIO_CODING_TYPE_DTS: -+ case HDMI_AUDIO_CODING_TYPE_EAC3: -+ return 2; -+ case HDMI_AUDIO_CODING_TYPE_DTS_HD: -+ case HDMI_AUDIO_CODING_TYPE_MLP: -+ return 8; -+ default: -+ /* TODO adjust for other compressed formats as well */ -+ return 1 + FIELD_GET(SAD0_CHANNELS_MASK, sad[0]); -+ } - } - - static int eld_limit_rates(struct snd_pcm_hw_params *params, -@@ -42,7 +109,7 @@ static int eld_limit_rates(struct snd_pcm_hw_params *params, - * requested number of channels. - */ - if (c->min <= max_channels) -- rate_mask |= sad[1]; -+ rate_mask |= sad_rate_mask(sad); - } - } - -@@ -70,7 +137,7 @@ static int eld_limit_channels(struct snd_pcm_hw_params *params, - rate_mask |= BIT(i); - - for (i = drm_eld_sad_count(eld); i > 0; i--, sad += 3) -- if (rate_mask & sad[1]) -+ if (rate_mask & sad_rate_mask(sad)) - t.max = max(t.max, sad_max_channels(sad)); - } - --- -2.39.2 - diff --git a/packages/linux/patches/raspberrypi/linux-021-ASoC-hdmi-codec-don-t-set-channel-and-speaker-info-f.patch b/packages/linux/patches/raspberrypi/linux-021-ASoC-hdmi-codec-don-t-set-channel-and-speaker-info-f.patch deleted file mode 100644 index d63c347e5a..0000000000 --- a/packages/linux/patches/raspberrypi/linux-021-ASoC-hdmi-codec-don-t-set-channel-and-speaker-info-f.patch +++ /dev/null @@ -1,89 +0,0 @@ -From 99586e3f502fcc4fdd21b621f3c87ae7a8f7c170 Mon Sep 17 00:00:00 2001 -From: Matthias Reichl -Date: Sat, 3 Jun 2023 12:12:28 +0200 -Subject: [PATCH 2/2] ASoC: hdmi-codec: don't set channel and speaker info for - compressed formats - -CTA 861 only mandates that the speaker allocation in the audio info frame -is set for multichannel PCM formats. Likewise the number of channels in the -audio infoframe is only relevant for PCM. - -Some TVs won't decode compressed formats if the number of channels isn't -set to 0 (refer to stream header) and the speaker allocation is set to the -default 0 (FL and FR). - -So fill in this info only for PCM audio and set it to 0 for compressed -audio formats. - -This also prevents hdmi_codec_prepare failing with an error when trying to -play back DTS-HD or MLP (which is passed through as 8ch) if the sink only -supports 2ch PCM and announces only FL/FR speaker support in the EDID. - -Signed-off-by: Matthias Reichl ---- - sound/soc/codecs/hdmi-codec.c | 36 +++++++++++++++++++++++------------ - 1 file changed, 24 insertions(+), 12 deletions(-) - -diff --git a/sound/soc/codecs/hdmi-codec.c b/sound/soc/codecs/hdmi-codec.c -index 0b1cdb2d60498..a192d985c5f18 100644 ---- a/sound/soc/codecs/hdmi-codec.c -+++ b/sound/soc/codecs/hdmi-codec.c -@@ -484,31 +484,43 @@ static int hdmi_codec_fill_codec_params(struct snd_soc_dai *dai, - struct hdmi_codec_params *hp) - { - struct hdmi_codec_priv *hcp = snd_soc_dai_get_drvdata(dai); -- int idx; -- -- /* Select a channel allocation that matches with ELD and pcm channels */ -- idx = hdmi_codec_get_ch_alloc_table_idx(hcp, channels); -- if (idx < 0) { -- dev_err(dai->dev, "Not able to map channels to speakers (%d)\n", -- idx); -- hcp->chmap_idx = HDMI_CODEC_CHMAP_IDX_UNKNOWN; -- return idx; -+ int idx = HDMI_CODEC_CHMAP_IDX_UNKNOWN; -+ u8 ca_id = 0; -+ bool pcm_audio = !(hcp->iec_status[0] & IEC958_AES0_NONAUDIO); -+ -+ if (pcm_audio) { -+ /* Select a channel allocation that matches with ELD and pcm channels */ -+ idx = hdmi_codec_get_ch_alloc_table_idx(hcp, channels); -+ -+ if (idx < 0) { -+ dev_err(dai->dev, "Not able to map channels to speakers (%d)\n", -+ idx); -+ hcp->chmap_idx = HDMI_CODEC_CHMAP_IDX_UNKNOWN; -+ return idx; -+ } -+ -+ ca_id = hdmi_codec_channel_alloc[idx].ca_id; - } - - memset(hp, 0, sizeof(*hp)); - - hdmi_audio_infoframe_init(&hp->cea); -- hp->cea.channels = channels; -+ -+ if (pcm_audio) -+ hp->cea.channels = channels; -+ else -+ hp->cea.channels = 0; -+ - hp->cea.coding_type = HDMI_AUDIO_CODING_TYPE_STREAM; - hp->cea.sample_size = HDMI_AUDIO_SAMPLE_SIZE_STREAM; - hp->cea.sample_frequency = HDMI_AUDIO_SAMPLE_FREQUENCY_STREAM; -- hp->cea.channel_allocation = hdmi_codec_channel_alloc[idx].ca_id; -+ hp->cea.channel_allocation = ca_id; - - hp->sample_width = sample_width; - hp->sample_rate = sample_rate; - hp->channels = channels; - -- hcp->chmap_idx = hdmi_codec_channel_alloc[idx].ca_id; -+ hcp->chmap_idx = idx; - - return 0; - } --- -2.39.2 - From 6edb7fb1ca2e12052b7100495402cf36c82deb5f Mon Sep 17 00:00:00 2001 From: Matthias Reichl Date: Fri, 30 Jun 2023 19:34:58 +0200 Subject: [PATCH 3/3] linux (RPi): config options for 6.1.36-dc41960 Signed-off-by: Matthias Reichl --- projects/RPi/devices/RPi/linux/linux.arm.conf | 4 ++-- projects/RPi/devices/RPi2/linux/linux.arm.conf | 4 ++-- projects/RPi/devices/RPi4/linux/linux.aarch64.conf | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/projects/RPi/devices/RPi/linux/linux.arm.conf b/projects/RPi/devices/RPi/linux/linux.arm.conf index f453f345ff..da18633ed1 100644 --- a/projects/RPi/devices/RPi/linux/linux.arm.conf +++ b/projects/RPi/devices/RPi/linux/linux.arm.conf @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm 6.1.27 Kernel Configuration +# Linux/arm 6.1.36 Kernel Configuration # CONFIG_CC_VERSION_TEXT="arm-linux-gnueabihf-gcc (GCC) 13.0.0 20220604 (experimental) [master revision aec868578d8515763d75693c1fdfbc30ff0a1e68]" CONFIG_CC_IS_GCC=y @@ -5330,7 +5330,7 @@ CONFIG_CIFS_DEBUG=y CONFIG_CIFS_FSCACHE=y # CONFIG_CIFS_ROOT is not set # CONFIG_SMB_SERVER is not set -CONFIG_SMBFS_COMMON=y +CONFIG_SMBFS=y # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set CONFIG_NLS=y diff --git a/projects/RPi/devices/RPi2/linux/linux.arm.conf b/projects/RPi/devices/RPi2/linux/linux.arm.conf index 50cf215635..b7a56c28ca 100644 --- a/projects/RPi/devices/RPi2/linux/linux.arm.conf +++ b/projects/RPi/devices/RPi2/linux/linux.arm.conf @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm 6.1.27 Kernel Configuration +# Linux/arm 6.1.36 Kernel Configuration # CONFIG_CC_VERSION_TEXT="arm-linux-gnueabihf-gcc (GCC) 13.0.0 20220604 (experimental) [master revision aec868578d8515763d75693c1fdfbc30ff0a1e68]" CONFIG_CC_IS_GCC=y @@ -5573,7 +5573,7 @@ CONFIG_CIFS_DEBUG=y CONFIG_CIFS_FSCACHE=y # CONFIG_CIFS_ROOT is not set # CONFIG_SMB_SERVER is not set -CONFIG_SMBFS_COMMON=y +CONFIG_SMBFS=y # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set CONFIG_NLS=y diff --git a/projects/RPi/devices/RPi4/linux/linux.aarch64.conf b/projects/RPi/devices/RPi4/linux/linux.aarch64.conf index e91921de2a..77d1980be4 100644 --- a/projects/RPi/devices/RPi4/linux/linux.aarch64.conf +++ b/projects/RPi/devices/RPi4/linux/linux.aarch64.conf @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm64 6.1.27 Kernel Configuration +# Linux/arm64 6.1.36 Kernel Configuration # CONFIG_CC_VERSION_TEXT="aarch64-linux-gnu-gcc (GCC) 13.0.0 20220604 (experimental) [master revision aec868578d8515763d75693c1fdfbc30ff0a1e68]" CONFIG_CC_IS_GCC=y @@ -6315,7 +6315,7 @@ CONFIG_CIFS_DEBUG=y CONFIG_CIFS_FSCACHE=y # CONFIG_CIFS_ROOT is not set # CONFIG_SMB_SERVER is not set -CONFIG_SMBFS_COMMON=y +CONFIG_SMBFS=y # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set CONFIG_NLS=y