2016-09-10 12:54:26 +00:00
|
|
|
From f3e1f2d9d34ab1cfafc4df7d67b7c65619b69ce0 Mon Sep 17 00:00:00 2001
|
2016-04-24 11:03:39 +00:00
|
|
|
From: wm4 <wm4@nowhere>
|
|
|
|
Date: Tue, 19 Apr 2016 16:29:41 +0200
|
2016-09-10 12:54:26 +00:00
|
|
|
Subject: [PATCH] bcm2835: add fallback channel layouts if channel map API is
|
|
|
|
not used
|
2016-04-24 11:03:39 +00:00
|
|
|
|
|
|
|
Should be more useful than just forcing stereo.
|
|
|
|
|
|
|
|
We can't match the exact legacy ALSA channel layouts, so this is a
|
|
|
|
"best effort" hack.
|
|
|
|
|
|
|
|
I'm not sure what happens if the application requests channel counts
|
|
|
|
that are not power-of-2s. The channel map API hopefully forces
|
|
|
|
applications which use the channel map API to request the correct
|
|
|
|
count by adding padding channels, but the bare API enforces
|
|
|
|
nothing. Possibly this could be added to rate_hw_constraint_channels
|
|
|
|
at a later point.
|
|
|
|
---
|
|
|
|
sound/arm/bcm2835-vchiq.c | 11 ++++++++++-
|
|
|
|
1 file changed, 10 insertions(+), 1 deletion(-)
|
|
|
|
|
|
|
|
--- a/sound/arm/bcm2835-vchiq.c
|
|
|
|
+++ b/sound/arm/bcm2835-vchiq.c
|
|
|
|
@@ -598,7 +598,16 @@ int bcm2835_audio_set_params(bcm2835_als
|
|
|
|
if (alsa_stream->chip->cea_chmap >= 0) {
|
|
|
|
chmap_value = (unsigned)alsa_stream->chip->cea_chmap << 24;
|
|
|
|
} else {
|
|
|
|
- chmap_value = 0; /* force stereo */
|
|
|
|
+ /* fallback layouts for applications which do not use chmap API */
|
|
|
|
+ chmap_value = 0x00;
|
|
|
|
+ switch (channels) {
|
|
|
|
+ case 3: chmap_value = 0x01; break;
|
|
|
|
+ case 4: chmap_value = 0x03; break;
|
|
|
|
+ case 5: chmap_value = 0x07; break;
|
|
|
|
+ case 6: chmap_value = 0x0b; break;
|
|
|
|
+ case 7: chmap_value = 0x0f; break;
|
|
|
|
+ case 8: chmap_value = 0x13; break;
|
|
|
|
+ }
|
|
|
|
for (i = 0; i < 8; i++)
|
|
|
|
alsa_stream->chip->map_channels[i] = i;
|
|
|
|
}
|