brcm2708: update linux 4.4 patches to latest version
[oweals/openwrt.git] / target / linux / brcm2708 / patches-4.4 / 0315-Revert-bcm2835-implement-channel-map-API.patch
1 From 321cf99bd2206e741a89b5ac350dfe3f182a00a3 Mon Sep 17 00:00:00 2001
2 From: popcornmix <popcornmix@gmail.com>
3 Date: Fri, 29 Apr 2016 17:29:03 +0100
4 Subject: [PATCH] Revert "bcm2835: implement channel map API"
5
6 This reverts commit 5efba3f8c180c39609a8d40033ef92046ef0de75.
7 ---
8  sound/arm/bcm2835-ctl.c   | 299 ----------------------------------------------
9  sound/arm/bcm2835-pcm.c   |  69 ++---------
10  sound/arm/bcm2835-vchiq.c |  13 --
11  sound/arm/bcm2835.h       |   4 -
12  4 files changed, 7 insertions(+), 378 deletions(-)
13
14 --- a/sound/arm/bcm2835-ctl.c
15 +++ b/sound/arm/bcm2835-ctl.c
16 @@ -327,304 +327,6 @@ static struct snd_kcontrol_new snd_bcm28
17         },
18  };
19  
20 -struct cea_channel_speaker_allocation {
21 -       int ca_index;
22 -       int speakers[8];
23 -};
24 -
25 -#define FL     SNDRV_CHMAP_FL
26 -#define FR     SNDRV_CHMAP_FR
27 -#define RL     SNDRV_CHMAP_RL
28 -#define RR     SNDRV_CHMAP_RR
29 -#define LFE    SNDRV_CHMAP_LFE
30 -#define FC     SNDRV_CHMAP_FC
31 -#define RLC    SNDRV_CHMAP_RLC
32 -#define RRC    SNDRV_CHMAP_RRC
33 -#define RC     SNDRV_CHMAP_RC
34 -#define FLC    SNDRV_CHMAP_FLC
35 -#define FRC    SNDRV_CHMAP_FRC
36 -#define FLH    SNDRV_CHMAP_TFL
37 -#define FRH    SNDRV_CHMAP_TFR
38 -#define FLW    SNDRV_CHMAP_FLW
39 -#define FRW    SNDRV_CHMAP_FRW
40 -#define TC     SNDRV_CHMAP_TC
41 -#define FCH    SNDRV_CHMAP_TFC
42 -
43 -/*
44 - * CEA-861 channel maps
45 - *
46 - * Stolen from sound/pci/hda/patch_hdmi.c
47 - * (unlike the source, this uses SNDRV_* constants directly, as by the
48 - *  map_tables array in patch_hdmi.c)
49 - * Unknown entries use 0, which unfortunately is SNDRV_CHMAP_UNKNOWN instead
50 - * of SNDRV_CHMAP_NA.
51 - */
52 -static struct cea_channel_speaker_allocation channel_allocations[] = {
53 -/*                       channel:   7     6    5    4    3     2    1    0  */
54 -{ .ca_index = 0x00,  .speakers = {   0,    0,   0,   0,   0,    0,  FR,  FL } },
55 -                                /* 2.1 */
56 -{ .ca_index = 0x01,  .speakers = {   0,    0,   0,   0,   0,  LFE,  FR,  FL } },
57 -                                /* Dolby Surround */
58 -{ .ca_index = 0x02,  .speakers = {   0,    0,   0,   0,  FC,    0,  FR,  FL } },
59 -                                /* surround40 */
60 -{ .ca_index = 0x08,  .speakers = {   0,    0,  RR,  RL,   0,    0,  FR,  FL } },
61 -                                /* surround41 */
62 -{ .ca_index = 0x09,  .speakers = {   0,    0,  RR,  RL,   0,  LFE,  FR,  FL } },
63 -                                /* surround50 */
64 -{ .ca_index = 0x0a,  .speakers = {   0,    0,  RR,  RL,  FC,    0,  FR,  FL } },
65 -                                /* surround51 */
66 -{ .ca_index = 0x0b,  .speakers = {   0,    0,  RR,  RL,  FC,  LFE,  FR,  FL } },
67 -                                /* 6.1 */
68 -{ .ca_index = 0x0f,  .speakers = {   0,   RC,  RR,  RL,  FC,  LFE,  FR,  FL } },
69 -                                /* surround71 */
70 -{ .ca_index = 0x13,  .speakers = { RRC,  RLC,  RR,  RL,  FC,  LFE,  FR,  FL } },
71 -
72 -{ .ca_index = 0x03,  .speakers = {   0,    0,   0,   0,  FC,  LFE,  FR,  FL } },
73 -{ .ca_index = 0x04,  .speakers = {   0,    0,   0,  RC,   0,    0,  FR,  FL } },
74 -{ .ca_index = 0x05,  .speakers = {   0,    0,   0,  RC,   0,  LFE,  FR,  FL } },
75 -{ .ca_index = 0x06,  .speakers = {   0,    0,   0,  RC,  FC,    0,  FR,  FL } },
76 -{ .ca_index = 0x07,  .speakers = {   0,    0,   0,  RC,  FC,  LFE,  FR,  FL } },
77 -{ .ca_index = 0x0c,  .speakers = {   0,   RC,  RR,  RL,   0,    0,  FR,  FL } },
78 -{ .ca_index = 0x0d,  .speakers = {   0,   RC,  RR,  RL,   0,  LFE,  FR,  FL } },
79 -{ .ca_index = 0x0e,  .speakers = {   0,   RC,  RR,  RL,  FC,    0,  FR,  FL } },
80 -{ .ca_index = 0x10,  .speakers = { RRC,  RLC,  RR,  RL,   0,    0,  FR,  FL } },
81 -{ .ca_index = 0x11,  .speakers = { RRC,  RLC,  RR,  RL,   0,  LFE,  FR,  FL } },
82 -{ .ca_index = 0x12,  .speakers = { RRC,  RLC,  RR,  RL,  FC,    0,  FR,  FL } },
83 -{ .ca_index = 0x14,  .speakers = { FRC,  FLC,   0,   0,   0,    0,  FR,  FL } },
84 -{ .ca_index = 0x15,  .speakers = { FRC,  FLC,   0,   0,   0,  LFE,  FR,  FL } },
85 -{ .ca_index = 0x16,  .speakers = { FRC,  FLC,   0,   0,  FC,    0,  FR,  FL } },
86 -{ .ca_index = 0x17,  .speakers = { FRC,  FLC,   0,   0,  FC,  LFE,  FR,  FL } },
87 -{ .ca_index = 0x18,  .speakers = { FRC,  FLC,   0,  RC,   0,    0,  FR,  FL } },
88 -{ .ca_index = 0x19,  .speakers = { FRC,  FLC,   0,  RC,   0,  LFE,  FR,  FL } },
89 -{ .ca_index = 0x1a,  .speakers = { FRC,  FLC,   0,  RC,  FC,    0,  FR,  FL } },
90 -{ .ca_index = 0x1b,  .speakers = { FRC,  FLC,   0,  RC,  FC,  LFE,  FR,  FL } },
91 -{ .ca_index = 0x1c,  .speakers = { FRC,  FLC,  RR,  RL,   0,    0,  FR,  FL } },
92 -{ .ca_index = 0x1d,  .speakers = { FRC,  FLC,  RR,  RL,   0,  LFE,  FR,  FL } },
93 -{ .ca_index = 0x1e,  .speakers = { FRC,  FLC,  RR,  RL,  FC,    0,  FR,  FL } },
94 -{ .ca_index = 0x1f,  .speakers = { FRC,  FLC,  RR,  RL,  FC,  LFE,  FR,  FL } },
95 -{ .ca_index = 0x20,  .speakers = {   0,  FCH,  RR,  RL,  FC,    0,  FR,  FL } },
96 -{ .ca_index = 0x21,  .speakers = {   0,  FCH,  RR,  RL,  FC,  LFE,  FR,  FL } },
97 -{ .ca_index = 0x22,  .speakers = {  TC,    0,  RR,  RL,  FC,    0,  FR,  FL } },
98 -{ .ca_index = 0x23,  .speakers = {  TC,    0,  RR,  RL,  FC,  LFE,  FR,  FL } },
99 -{ .ca_index = 0x24,  .speakers = { FRH,  FLH,  RR,  RL,   0,    0,  FR,  FL } },
100 -{ .ca_index = 0x25,  .speakers = { FRH,  FLH,  RR,  RL,   0,  LFE,  FR,  FL } },
101 -{ .ca_index = 0x26,  .speakers = { FRW,  FLW,  RR,  RL,   0,    0,  FR,  FL } },
102 -{ .ca_index = 0x27,  .speakers = { FRW,  FLW,  RR,  RL,   0,  LFE,  FR,  FL } },
103 -{ .ca_index = 0x28,  .speakers = {  TC,   RC,  RR,  RL,  FC,    0,  FR,  FL } },
104 -{ .ca_index = 0x29,  .speakers = {  TC,   RC,  RR,  RL,  FC,  LFE,  FR,  FL } },
105 -{ .ca_index = 0x2a,  .speakers = { FCH,   RC,  RR,  RL,  FC,    0,  FR,  FL } },
106 -{ .ca_index = 0x2b,  .speakers = { FCH,   RC,  RR,  RL,  FC,  LFE,  FR,  FL } },
107 -{ .ca_index = 0x2c,  .speakers = {  TC,  FCH,  RR,  RL,  FC,    0,  FR,  FL } },
108 -{ .ca_index = 0x2d,  .speakers = {  TC,  FCH,  RR,  RL,  FC,  LFE,  FR,  FL } },
109 -{ .ca_index = 0x2e,  .speakers = { FRH,  FLH,  RR,  RL,  FC,    0,  FR,  FL } },
110 -{ .ca_index = 0x2f,  .speakers = { FRH,  FLH,  RR,  RL,  FC,  LFE,  FR,  FL } },
111 -{ .ca_index = 0x30,  .speakers = { FRW,  FLW,  RR,  RL,  FC,    0,  FR,  FL } },
112 -{ .ca_index = 0x31,  .speakers = { FRW,  FLW,  RR,  RL,  FC,  LFE,  FR,  FL } },
113 -};
114 -
115 -static int snd_bcm2835_chmap_ctl_tlv(struct snd_kcontrol *kcontrol, int op_flag,
116 -                                    unsigned int size, unsigned int __user *tlv)
117 -{
118 -       unsigned int __user *dst;
119 -       int count = 0;
120 -       int i;
121 -
122 -       if (size < 8)
123 -               return -ENOMEM;
124 -       if (put_user(SNDRV_CTL_TLVT_CONTAINER, tlv))
125 -               return -EFAULT;
126 -       size -= 8;
127 -       dst = tlv + 2;
128 -       for (i = 0; i < ARRAY_SIZE(channel_allocations); i++) {
129 -               struct cea_channel_speaker_allocation *ch = &channel_allocations[i];
130 -               int num_chs = 0;
131 -               int chs_bytes;
132 -               int c;
133 -
134 -               for (c = 0; c < 8; c++) {
135 -                       if (ch->speakers[c])
136 -                               num_chs++;
137 -               }
138 -
139 -               chs_bytes = num_chs * 4;
140 -               if (size < 8)
141 -                       return -ENOMEM;
142 -               if (put_user(SNDRV_CTL_TLVT_CHMAP_FIXED, dst) ||
143 -                   put_user(chs_bytes, dst + 1))
144 -                       return -EFAULT;
145 -               dst += 2;
146 -               size -= 8;
147 -               count += 8;
148 -               if (size < chs_bytes)
149 -                       return -ENOMEM;
150 -               size -= chs_bytes;
151 -               count += chs_bytes;
152 -               for (c = 0; c < 8; c++) {
153 -                       int sp = ch->speakers[7 - c];
154 -                       if (sp) {
155 -                               if (put_user(sp, dst))
156 -                                       return -EFAULT;
157 -                               dst++;
158 -                       }
159 -               }
160 -       }
161 -       if (put_user(count, tlv + 1))
162 -               return -EFAULT;
163 -       return 0;
164 -}
165 -
166 -static int snd_bcm2835_chmap_ctl_get(struct snd_kcontrol *kcontrol,
167 -                                    struct snd_ctl_elem_value *ucontrol)
168 -{
169 -       struct snd_pcm_chmap *info = snd_kcontrol_chip(kcontrol);
170 -       bcm2835_chip_t *chip = info->private_data;
171 -       unsigned int idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
172 -       struct snd_pcm_substream *substream = snd_pcm_chmap_substream(info, idx);
173 -       struct cea_channel_speaker_allocation *ch = NULL;
174 -       int res = 0;
175 -       int cur = 0;
176 -       int i;
177 -
178 -       if (mutex_lock_interruptible(&chip->audio_mutex))
179 -               return -EINTR;
180 -
181 -       if (!substream || !substream->runtime) {
182 -               res = -ENODEV;
183 -               goto unlock;
184 -       }
185 -
186 -       for (i = 0; i < ARRAY_SIZE(channel_allocations); i++) {
187 -               if (channel_allocations[i].ca_index == chip->cea_chmap)
188 -                       ch = &channel_allocations[i];
189 -       }
190 -
191 -       /* If no layout was set yet, return a dummy. Apparently the userspace
192 -        * API will be confused if we don't. */
193 -       if (!ch)
194 -               ch = &channel_allocations[0];
195 -
196 -       for (i = 0; i < 8; i++) {
197 -               if (ch->speakers[7 - i])
198 -                       ucontrol->value.integer.value[cur++] = ch->speakers[7 - i];
199 -       }
200 -       while (cur < 8)
201 -               ucontrol->value.integer.value[cur++] = SNDRV_CHMAP_NA;
202 -
203 -unlock:
204 -       mutex_unlock(&chip->audio_mutex);
205 -       return res;
206 -}
207 -
208 -static int snd_bcm2835_chmap_ctl_put(struct snd_kcontrol *kcontrol,
209 -                                    struct snd_ctl_elem_value *ucontrol)
210 -{
211 -       struct snd_pcm_chmap *info = snd_kcontrol_chip(kcontrol);
212 -       bcm2835_chip_t *chip = info->private_data;
213 -       unsigned int idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
214 -       struct snd_pcm_substream *substream = snd_pcm_chmap_substream(info, idx);
215 -       int i, prepared = 0, cea_chmap = -1;
216 -       int res = 0;
217 -       int remap[8];
218 -
219 -       if (mutex_lock_interruptible(&chip->audio_mutex))
220 -               return -EINTR;
221 -
222 -       if (!substream || !substream->runtime) {
223 -               res = -ENODEV;
224 -               goto unlock;
225 -       }
226 -
227 -       switch (substream->runtime->status->state) {
228 -       case SNDRV_PCM_STATE_OPEN:
229 -       case SNDRV_PCM_STATE_SETUP:
230 -               break;
231 -       case SNDRV_PCM_STATE_PREPARED:
232 -               prepared = 1;
233 -               break;
234 -       default:
235 -               res = -EBUSY;
236 -               goto unlock;
237 -       }
238 -
239 -       for (i = 0; i < ARRAY_SIZE(channel_allocations); i++) {
240 -               struct cea_channel_speaker_allocation *ch = &channel_allocations[i];
241 -               int matches = 1;
242 -               int cur = 0;
243 -               int x;
244 -               memset(remap, 0, sizeof(remap));
245 -               for (x = 0; x < substream->runtime->channels; x++) {
246 -                       int sp = ucontrol->value.integer.value[x];
247 -                       while (cur < 8 && !ch->speakers[7 - cur])
248 -                               cur++;
249 -                       if (cur >= 8) {
250 -                               /* user has more channels than ch */
251 -                               matches = 0;
252 -                               break;
253 -                       }
254 -                       if (ch->speakers[7 - cur] != sp) {
255 -                               matches = 0;
256 -                               break;
257 -                       }
258 -                       remap[x] = cur;
259 -                       cur++;
260 -               }
261 -               for (x = cur; x < 8; x++) {
262 -                       if (ch->speakers[7 - x]) {
263 -                               /* ch has more channels than user */
264 -                               matches = 0;
265 -                               break;
266 -                       }
267 -               }
268 -               if (matches) {
269 -                       cea_chmap = ch->ca_index;
270 -                       break;
271 -               }
272 -       }
273 -
274 -       if (cea_chmap < 0) {
275 -               res = -EINVAL;
276 -               goto unlock;
277 -       }
278 -
279 -       /* don't change the layout if another substream is active */
280 -       if (chip->opened != (1 << substream->number) && chip->cea_chmap != cea_chmap) {
281 -               res = -EBUSY; /* unsure whether this is a good error code */
282 -               goto unlock;
283 -       }
284 -
285 -       chip->cea_chmap = cea_chmap;
286 -       for (i = 0; i < 8; i++)
287 -               chip->map_channels[i] = remap[i];
288 -       if (prepared)
289 -               snd_bcm2835_pcm_prepare_again(substream);
290 -
291 -unlock:
292 -       mutex_unlock(&chip->audio_mutex);
293 -       return res;
294 -}
295 -
296 -static int snd_bcm2835_add_chmap_ctl(bcm2835_chip_t * chip)
297 -{
298 -       struct snd_pcm_chmap *chmap;
299 -       struct snd_kcontrol *kctl;
300 -       int err, i;
301 -
302 -       err = snd_pcm_add_chmap_ctls(chip->pcm,
303 -                                    SNDRV_PCM_STREAM_PLAYBACK,
304 -                                    NULL, 8, 0, &chmap);
305 -       if (err < 0)
306 -               return err;
307 -       /* override handlers */
308 -       chmap->private_data = chip;
309 -       kctl = chmap->kctl;
310 -       for (i = 0; i < kctl->count; i++)
311 -               kctl->vd[i].access |= SNDRV_CTL_ELEM_ACCESS_WRITE;
312 -       kctl->get = snd_bcm2835_chmap_ctl_get;
313 -       kctl->put = snd_bcm2835_chmap_ctl_put;
314 -       kctl->tlv.c = snd_bcm2835_chmap_ctl_tlv;
315 -       return 0;
316 -}
317 -
318  int snd_bcm2835_new_ctl(bcm2835_chip_t * chip)
319  {
320         int err;
321 @@ -638,7 +340,6 @@ int snd_bcm2835_new_ctl(bcm2835_chip_t *
322                 if (err < 0)
323                         return err;
324         }
325 -       snd_bcm2835_add_chmap_ctl(chip);
326         for (idx = 0; idx < ARRAY_SIZE(snd_bcm2835_spdif); idx++) {
327                 err = snd_ctl_add(chip->card,
328                                 snd_ctl_new1(&snd_bcm2835_spdif[idx], chip));
329 --- a/sound/arm/bcm2835-pcm.c
330 +++ b/sound/arm/bcm2835-pcm.c
331 @@ -19,9 +19,6 @@
332  
333  #include "bcm2835.h"
334  
335 -/* The hardware can not do much more num_channels*samplerate then this value */
336 -#define MAX_COMBINED_RATE 768000
337 -
338  /* hardware definition */
339  static struct snd_pcm_hardware snd_bcm2835_playback_hw = {
340         .info = (SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_BLOCK_TRANSFER |
341 @@ -110,31 +107,6 @@ static irqreturn_t bcm2835_playback_fifo
342         return IRQ_HANDLED;
343  }
344  
345 -
346 -static int rate_hw_constraint_rate(struct snd_pcm_hw_params *params,
347 -                                  struct snd_pcm_hw_rule *rule)
348 -{
349 -       struct snd_interval *channels = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
350 -       struct snd_interval rates = {
351 -               .min = 8000,
352 -               .max = min(192000u, MAX_COMBINED_RATE / max(channels->min, 1u)),
353 -       };
354 -       struct snd_interval *rate = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
355 -       return snd_interval_refine(rate, &rates);
356 -}
357 -
358 -static int rate_hw_constraint_channels(struct snd_pcm_hw_params *params,
359 -                                      struct snd_pcm_hw_rule *rule)
360 -{
361 -       struct snd_interval *rate = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
362 -       struct snd_interval channels_interval = {
363 -               .min = 1,
364 -               .max = min(8u, MAX_COMBINED_RATE / max(rate->min, 1u)),
365 -       };
366 -       struct snd_interval *channels = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
367 -       return snd_interval_refine(channels, &channels_interval);
368 -}
369 -
370  /* open callback */
371  static int snd_bcm2835_playback_open_generic(
372                 struct snd_pcm_substream *substream, int spdif)
373 @@ -216,24 +188,8 @@ static int snd_bcm2835_playback_open_gen
374         snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES,
375                                    16);
376  
377 -       /* When playing PCM, pretend that we support the full range of channels
378 -        * and sample rates. The GPU can't output it, but is able to resample
379 -        * the data to a rate the hardware can handle it. This won't work with
380 -        * compressed data; the resampler would just destroy it. */
381 -       if (spdif) {
382 -               err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_RATE,
383 -                                         rate_hw_constraint_rate, NULL,
384 -                                         SNDRV_PCM_HW_PARAM_CHANNELS, -1);
385 -               err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
386 -                                         rate_hw_constraint_channels, NULL,
387 -                                         SNDRV_PCM_HW_PARAM_RATE, -1);
388 -       }
389 -
390         chip->alsa_stream[idx] = alsa_stream;
391  
392 -       if (!chip->opened)
393 -               chip->cea_chmap = -1;
394 -
395         chip->opened |= (1 << idx);
396         alsa_stream->open = 1;
397         alsa_stream->draining = 1;
398 @@ -344,7 +300,8 @@ static int snd_bcm2835_pcm_hw_free(struc
399         return snd_pcm_lib_free_pages(substream);
400  }
401  
402 -int snd_bcm2835_pcm_prepare_again(struct snd_pcm_substream *substream)
403 +/* prepare callback */
404 +static int snd_bcm2835_pcm_prepare(struct snd_pcm_substream *substream)
405  {
406         bcm2835_chip_t *chip = snd_pcm_substream_chip(substream);
407         struct snd_pcm_runtime *runtime = substream->runtime;
408 @@ -352,6 +309,11 @@ int snd_bcm2835_pcm_prepare_again(struct
409         int channels;
410         int err;
411  
412 +       audio_info(" .. IN\n");
413 +
414 +       if (mutex_lock_interruptible(&chip->audio_mutex))
415 +               return -EINTR;
416 +
417         /* notify the vchiq that it should enter spdif passthrough mode by
418          * setting channels=0 (see
419          * https://github.com/raspberrypi/linux/issues/528) */
420 @@ -367,23 +329,6 @@ int snd_bcm2835_pcm_prepare_again(struct
421                 audio_error(" error setting hw params\n");
422         }
423  
424 -       return err;
425 -}
426 -
427 -/* prepare callback */
428 -static int snd_bcm2835_pcm_prepare(struct snd_pcm_substream *substream)
429 -{
430 -       bcm2835_chip_t *chip = snd_pcm_substream_chip(substream);
431 -       struct snd_pcm_runtime *runtime = substream->runtime;
432 -       bcm2835_alsa_stream_t *alsa_stream = runtime->private_data;
433 -
434 -       audio_info(" .. IN\n");
435 -
436 -       if (mutex_lock_interruptible(&chip->audio_mutex))
437 -               return -EINTR;
438 -
439 -       snd_bcm2835_pcm_prepare_again(substream);
440 -
441         bcm2835_audio_setup(alsa_stream);
442  
443         /* in preparation of the stream, set the controls (volume level) of the stream */
444 --- a/sound/arm/bcm2835-vchiq.c
445 +++ b/sound/arm/bcm2835-vchiq.c
446 @@ -570,8 +570,6 @@ int bcm2835_audio_set_params(bcm2835_als
447         VC_AUDIO_MSG_T m;
448         AUDIO_INSTANCE_T *instance = alsa_stream->instance;
449         int32_t success;
450 -       uint32_t chmap_value;
451 -       int i;
452         int ret;
453         LOG_DBG(" .. IN\n");
454  
455 @@ -595,21 +593,10 @@ int bcm2835_audio_set_params(bcm2835_als
456  
457         instance->result = -1;
458  
459 -       if (alsa_stream->chip->cea_chmap >= 0) {
460 -               chmap_value = (unsigned)alsa_stream->chip->cea_chmap << 24;
461 -       } else {
462 -               chmap_value = 0; /* force stereo */
463 -               for (i = 0; i < 8; i++)
464 -                       alsa_stream->chip->map_channels[i] = i;
465 -       }
466 -       for (i = 0; i < 8; i++)
467 -               chmap_value |= alsa_stream->chip->map_channels[i] << (i * 3);
468 -
469         m.type = VC_AUDIO_MSG_TYPE_CONFIG;
470         m.u.config.channels = channels;
471         m.u.config.samplerate = samplerate;
472         m.u.config.bps = bps;
473 -       m.u.config.channelmap = chmap_value;
474  
475         /* Create the message available completion */
476         init_completion(&instance->msg_avail_comp);
477 --- a/sound/arm/bcm2835.h
478 +++ b/sound/arm/bcm2835.h
479 @@ -107,8 +107,6 @@ typedef struct bcm2835_chip {
480         int old_volume; /* stores the volume value whist muted */
481         int dest;
482         int mute;
483 -       int cea_chmap; /* currently requested Audio InfoFrame Data Byte 4 */
484 -       int map_channels[8];
485  
486         unsigned int opened;
487         unsigned int spdif_status;
488 @@ -151,8 +149,6 @@ int snd_bcm2835_new_ctl(bcm2835_chip_t *
489  int snd_bcm2835_new_pcm(bcm2835_chip_t * chip);
490  int snd_bcm2835_new_spdif_pcm(bcm2835_chip_t * chip);
491  
492 -int snd_bcm2835_pcm_prepare_again(struct snd_pcm_substream *substream);
493 -
494  int bcm2835_audio_open(bcm2835_alsa_stream_t * alsa_stream);
495  int bcm2835_audio_close(bcm2835_alsa_stream_t * alsa_stream);
496  int bcm2835_audio_set_params(bcm2835_alsa_stream_t * alsa_stream,