aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/bcm27xx/patches-5.4/950-0891-vc4_hdmi-Set-HDMI_MAI_FMT.patch
diff options
context:
space:
mode:
authorÁlvaro Fernández Rojas <noltari@gmail.com>2021-02-18 18:04:33 +0100
committerÁlvaro Fernández Rojas <noltari@gmail.com>2021-02-18 23:42:32 +0100
commitf07e572f6447465d8938679533d604e402b0f066 (patch)
treecb333bd2a67e59e7c07659514850a0fd55fc825e /target/linux/bcm27xx/patches-5.4/950-0891-vc4_hdmi-Set-HDMI_MAI_FMT.patch
parent5d3a6fd970619dfc55f8259035c3027d7613a2a6 (diff)
downloadupstream-f07e572f6447465d8938679533d604e402b0f066.tar.gz
upstream-f07e572f6447465d8938679533d604e402b0f066.tar.bz2
upstream-f07e572f6447465d8938679533d604e402b0f066.zip
bcm27xx: import latest patches from the RPi foundation
bcm2708: boot tested on RPi B+ v1.2 bcm2709: boot tested on RPi 3B v1.2 and RPi 4B v1.1 4G bcm2710: boot tested on RPi 3B v1.2 bcm2711: boot tested on RPi 4B v1.1 4G Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
Diffstat (limited to 'target/linux/bcm27xx/patches-5.4/950-0891-vc4_hdmi-Set-HDMI_MAI_FMT.patch')
-rw-r--r--target/linux/bcm27xx/patches-5.4/950-0891-vc4_hdmi-Set-HDMI_MAI_FMT.patch124
1 files changed, 124 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.4/950-0891-vc4_hdmi-Set-HDMI_MAI_FMT.patch b/target/linux/bcm27xx/patches-5.4/950-0891-vc4_hdmi-Set-HDMI_MAI_FMT.patch
new file mode 100644
index 0000000000..2c305a0bff
--- /dev/null
+++ b/target/linux/bcm27xx/patches-5.4/950-0891-vc4_hdmi-Set-HDMI_MAI_FMT.patch
@@ -0,0 +1,124 @@
+From c9ba62745ba17d21542db28bf7dc28a39e19f7c2 Mon Sep 17 00:00:00 2001
+From: popcornmix <popcornmix@gmail.com>
+Date: Tue, 10 Mar 2020 22:21:15 +0000
+Subject: [PATCH] vc4_hdmi: Set HDMI_MAI_FMT
+
+The hardware uses this for generating the right audio
+data island packets when using formats other than PCM
+
+Signed-off-by: Dom Cobley <popcornmix@gmail.com>
+---
+ drivers/gpu/drm/vc4/vc4_hdmi.c | 47 ++++++++++++++++++++++++++++++++++
+ drivers/gpu/drm/vc4/vc4_regs.h | 31 ++++++++++++++++++++++
+ 2 files changed, 78 insertions(+)
+
+--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
++++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
+@@ -917,6 +917,45 @@ static void vc4_hdmi_audio_shutdown(stru
+ vc4_hdmi->audio.substream = NULL;
+ }
+
++static int sample_rate_to_mai_fmt(int samplerate)
++{
++ switch(samplerate)
++ {
++ case 8000:
++ return VC4_HDMI_MAI_SAMPLE_RATE_8000;
++ case 11025:
++ return VC4_HDMI_MAI_SAMPLE_RATE_11025;
++ case 12000:
++ return VC4_HDMI_MAI_SAMPLE_RATE_12000;
++ case 16000:
++ return VC4_HDMI_MAI_SAMPLE_RATE_16000;
++ case 22050:
++ return VC4_HDMI_MAI_SAMPLE_RATE_22050;
++ case 24000:
++ return VC4_HDMI_MAI_SAMPLE_RATE_24000;
++ case 32000:
++ return VC4_HDMI_MAI_SAMPLE_RATE_32000;
++ case 44100:
++ return VC4_HDMI_MAI_SAMPLE_RATE_44100;
++ case 48000:
++ return VC4_HDMI_MAI_SAMPLE_RATE_48000;
++ case 64000:
++ return VC4_HDMI_MAI_SAMPLE_RATE_64000;
++ case 88200:
++ return VC4_HDMI_MAI_SAMPLE_RATE_88200;
++ case 96000:
++ return VC4_HDMI_MAI_SAMPLE_RATE_96000;
++ case 128000:
++ return VC4_HDMI_MAI_SAMPLE_RATE_128000;
++ case 176400:
++ return VC4_HDMI_MAI_SAMPLE_RATE_176400;
++ case 192000:
++ return VC4_HDMI_MAI_SAMPLE_RATE_192000;
++ default:
++ return VC4_HDMI_MAI_SAMPLE_RATE_NOT_INDICATED;
++ }
++}
++
+ /* HDMI audio codec callbacks */
+ static int vc4_hdmi_audio_hw_params(struct snd_pcm_substream *substream,
+ struct snd_pcm_hw_params *params,
+@@ -926,6 +965,8 @@ static int vc4_hdmi_audio_hw_params(stru
+ struct device *dev = &vc4_hdmi->pdev->dev;
+ u32 audio_packet_config, channel_mask;
+ u32 channel_map;
++ u32 mai_audio_format;
++ u32 mai_sample_rate;
+
+ if (substream != vc4_hdmi->audio.substream)
+ return -EINVAL;
+@@ -946,6 +987,12 @@ static int vc4_hdmi_audio_hw_params(stru
+
+ vc4_hdmi_audio_set_mai_clock(vc4_hdmi);
+
++ mai_sample_rate = sample_rate_to_mai_fmt(vc4_hdmi->audio.samplerate);
++ mai_audio_format = VC4_HDMI_MAI_FORMAT_PCM;
++ HDMI_WRITE(HDMI_MAI_FMT,
++ VC4_SET_FIELD(mai_sample_rate, VC4_HDMI_MAI_FORMAT_SAMPLE_RATE) |
++ VC4_SET_FIELD(mai_audio_format, VC4_HDMI_MAI_FORMAT_AUDIO_FORMAT));
++
+ /* The B frame identifier should match the value used by alsa-lib (8) */
+ audio_packet_config =
+ VC4_HDMI_AUDIO_PACKET_ZERO_DATA_ON_SAMPLE_FLAT |
+--- a/drivers/gpu/drm/vc4/vc4_regs.h
++++ b/drivers/gpu/drm/vc4/vc4_regs.h
+@@ -516,6 +516,37 @@
+ # define VC4_HDMI_AUDIO_PACKET_CEA_MASK_MASK VC4_MASK(7, 0)
+ # define VC4_HDMI_AUDIO_PACKET_CEA_MASK_SHIFT 0
+
++
++# define VC4_HDMI_MAI_FORMAT_AUDIO_FORMAT_MASK VC4_MASK(23, 16)
++# define VC4_HDMI_MAI_FORMAT_AUDIO_FORMAT_SHIFT 16
++
++enum {
++ VC4_HDMI_MAI_FORMAT_PCM = 2,
++ VC4_HDMI_MAI_FORMAT_HBR = 200,
++};
++
++# define VC4_HDMI_MAI_FORMAT_SAMPLE_RATE_MASK VC4_MASK(15, 8)
++# define VC4_HDMI_MAI_FORMAT_SAMPLE_RATE_SHIFT 8
++
++enum {
++ VC4_HDMI_MAI_SAMPLE_RATE_NOT_INDICATED = 0,
++ VC4_HDMI_MAI_SAMPLE_RATE_8000 = 1,
++ VC4_HDMI_MAI_SAMPLE_RATE_11025 = 2,
++ VC4_HDMI_MAI_SAMPLE_RATE_12000 = 3,
++ VC4_HDMI_MAI_SAMPLE_RATE_16000 = 4,
++ VC4_HDMI_MAI_SAMPLE_RATE_22050 = 5,
++ VC4_HDMI_MAI_SAMPLE_RATE_24000 = 6,
++ VC4_HDMI_MAI_SAMPLE_RATE_32000 = 7,
++ VC4_HDMI_MAI_SAMPLE_RATE_44100 = 8,
++ VC4_HDMI_MAI_SAMPLE_RATE_48000 = 9,
++ VC4_HDMI_MAI_SAMPLE_RATE_64000 = 10,
++ VC4_HDMI_MAI_SAMPLE_RATE_88200 = 11,
++ VC4_HDMI_MAI_SAMPLE_RATE_96000 = 12,
++ VC4_HDMI_MAI_SAMPLE_RATE_128000 = 13,
++ VC4_HDMI_MAI_SAMPLE_RATE_176400 = 14,
++ VC4_HDMI_MAI_SAMPLE_RATE_192000 = 15,
++};
++
+ # define VC4_HDMI_RAM_PACKET_ENABLE BIT(16)
+
+ /* When set, the CTS_PERIOD counts based on MAI bus sync pulse instead