@@ -185,84 +185,97 @@ static const struct snd_pcm_chmap_elem hdmi_codec_8ch_chmaps[] = {
185
185
/*
186
186
* hdmi_codec_channel_alloc: speaker configuration available for CEA
187
187
*
188
- * This is an ordered list that must match with hdmi_codec_8ch_chmaps struct
188
+ * This is an ordered list where ca_id must exist in hdmi_codec_8ch_chmaps
189
189
* The preceding ones have better chances to be selected by
190
190
* hdmi_codec_get_ch_alloc_table_idx().
191
191
*/
192
192
static const struct hdmi_codec_cea_spk_alloc hdmi_codec_channel_alloc [] = {
193
193
{ .ca_id = 0x00 , .n_ch = 2 ,
194
- .mask = FL | FR },
195
- /* 2.1 */
196
- { .ca_id = 0x01 , .n_ch = 4 ,
197
- .mask = FL | FR | LFE },
198
- /* Dolby Surround */
194
+ .mask = FL | FR },
195
+ { .ca_id = 0x03 , .n_ch = 4 ,
196
+ .mask = FL | FR | LFE | FC },
199
197
{ .ca_id = 0x02 , .n_ch = 4 ,
200
198
.mask = FL | FR | FC },
201
- /* surround51 */
199
+ { .ca_id = 0x01 , .n_ch = 4 ,
200
+ .mask = FL | FR | LFE },
202
201
{ .ca_id = 0x0b , .n_ch = 6 ,
203
- .mask = FL | FR | LFE | FC | RL | RR },
204
- /* surround40 */
205
- { .ca_id = 0x08 , .n_ch = 6 ,
206
- .mask = FL | FR | RL | RR },
207
- /* surround41 */
208
- { .ca_id = 0x09 , .n_ch = 6 ,
209
- .mask = FL | FR | LFE | RL | RR },
210
- /* surround50 */
202
+ .mask = FL | FR | LFE | FC | RL | RR },
211
203
{ .ca_id = 0x0a , .n_ch = 6 ,
212
204
.mask = FL | FR | FC | RL | RR },
213
- /* 6.1 */
214
- { .ca_id = 0x0f , .n_ch = 8 ,
215
- .mask = FL | FR | LFE | FC | RL | RR | RC },
216
- /* surround71 */
205
+ { .ca_id = 0x09 , .n_ch = 6 ,
206
+ .mask = FL | FR | LFE | RL | RR },
207
+ { .ca_id = 0x08 , .n_ch = 6 ,
208
+ .mask = FL | FR | RL | RR },
209
+ { .ca_id = 0x07 , .n_ch = 6 ,
210
+ .mask = FL | FR | LFE | FC | RC },
211
+ { .ca_id = 0x06 , .n_ch = 6 ,
212
+ .mask = FL | FR | FC | RC },
213
+ { .ca_id = 0x05 , .n_ch = 6 ,
214
+ .mask = FL | FR | LFE | RC },
215
+ { .ca_id = 0x04 , .n_ch = 6 ,
216
+ .mask = FL | FR | RC },
217
217
{ .ca_id = 0x13 , .n_ch = 8 ,
218
218
.mask = FL | FR | LFE | FC | RL | RR | RLC | RRC },
219
- /* others */
220
- { .ca_id = 0x03 , .n_ch = 8 ,
221
- .mask = FL | FR | LFE | FC },
222
- { .ca_id = 0x04 , .n_ch = 8 ,
223
- .mask = FL | FR | RC },
224
- { .ca_id = 0x05 , .n_ch = 8 ,
225
- .mask = FL | FR | LFE | RC },
226
- { .ca_id = 0x06 , .n_ch = 8 ,
227
- .mask = FL | FR | FC | RC },
228
- { .ca_id = 0x07 , .n_ch = 8 ,
229
- .mask = FL | FR | LFE | FC | RC },
230
- { .ca_id = 0x0c , .n_ch = 8 ,
231
- .mask = FL | FR | RC | RL | RR },
232
- { .ca_id = 0x0d , .n_ch = 8 ,
233
- .mask = FL | FR | LFE | RL | RR | RC },
234
- { .ca_id = 0x0e , .n_ch = 8 ,
235
- .mask = FL | FR | FC | RL | RR | RC },
236
- { .ca_id = 0x10 , .n_ch = 8 ,
237
- .mask = FL | FR | RL | RR | RLC | RRC },
238
- { .ca_id = 0x11 , .n_ch = 8 ,
239
- .mask = FL | FR | LFE | RL | RR | RLC | RRC },
219
+ { .ca_id = 0x1f , .n_ch = 8 ,
220
+ .mask = FL | FR | LFE | FC | RL | RR | FLC | FRC },
240
221
{ .ca_id = 0x12 , .n_ch = 8 ,
241
222
.mask = FL | FR | FC | RL | RR | RLC | RRC },
242
- { .ca_id = 0x14 , .n_ch = 8 ,
243
- .mask = FL | FR | FLC | FRC },
244
- { .ca_id = 0x15 , .n_ch = 8 ,
245
- .mask = FL | FR | LFE | FLC | FRC },
246
- { .ca_id = 0x16 , .n_ch = 8 ,
247
- .mask = FL | FR | FC | FLC | FRC },
248
- { .ca_id = 0x17 , .n_ch = 8 ,
249
- .mask = FL | FR | LFE | FC | FLC | FRC },
250
- { .ca_id = 0x18 , .n_ch = 8 ,
251
- .mask = FL | FR | RC | FLC | FRC },
252
- { .ca_id = 0x19 , .n_ch = 8 ,
253
- .mask = FL | FR | LFE | RC | FLC | FRC },
254
- { .ca_id = 0x1a , .n_ch = 8 ,
255
- .mask = FL | FR | RC | FC | FLC | FRC },
256
- { .ca_id = 0x1b , .n_ch = 8 ,
257
- .mask = FL | FR | LFE | RC | FC | FLC | FRC },
258
- { .ca_id = 0x1c , .n_ch = 8 ,
259
- .mask = FL | FR | RL | RR | FLC | FRC },
260
- { .ca_id = 0x1d , .n_ch = 8 ,
261
- .mask = FL | FR | LFE | RL | RR | FLC | FRC },
262
223
{ .ca_id = 0x1e , .n_ch = 8 ,
263
224
.mask = FL | FR | FC | RL | RR | FLC | FRC },
264
- { .ca_id = 0x1f , .n_ch = 8 ,
265
- .mask = FL | FR | LFE | FC | RL | RR | FLC | FRC },
225
+ { .ca_id = 0x11 , .n_ch = 8 ,
226
+ .mask = FL | FR | LFE | RL | RR | RLC | RRC },
227
+ { .ca_id = 0x1d , .n_ch = 8 ,
228
+ .mask = FL | FR | LFE | RL | RR | FLC | FRC },
229
+ { .ca_id = 0x10 , .n_ch = 8 ,
230
+ .mask = FL | FR | RL | RR | RLC | RRC },
231
+ { .ca_id = 0x1c , .n_ch = 8 ,
232
+ .mask = FL | FR | RL | RR | FLC | FRC },
233
+ { .ca_id = 0x0f , .n_ch = 8 ,
234
+ .mask = FL | FR | LFE | FC | RL | RR | RC },
235
+ { .ca_id = 0x1b , .n_ch = 8 ,
236
+ .mask = FL | FR | LFE | RC | FC | FLC | FRC },
237
+ { .ca_id = 0x0e , .n_ch = 8 ,
238
+ .mask = FL | FR | FC | RL | RR | RC },
239
+ { .ca_id = 0x1a , .n_ch = 8 ,
240
+ .mask = FL | FR | RC | FC | FLC | FRC },
241
+ { .ca_id = 0x0d , .n_ch = 8 ,
242
+ .mask = FL | FR | LFE | RL | RR | RC },
243
+ { .ca_id = 0x19 , .n_ch = 8 ,
244
+ .mask = FL | FR | LFE | RC | FLC | FRC },
245
+ { .ca_id = 0x0c , .n_ch = 8 ,
246
+ .mask = FL | FR | RC | RL | RR },
247
+ { .ca_id = 0x18 , .n_ch = 8 ,
248
+ .mask = FL | FR | RC | FLC | FRC },
249
+ { .ca_id = 0x17 , .n_ch = 8 ,
250
+ .mask = FL | FR | LFE | FC | FLC | FRC },
251
+ { .ca_id = 0x16 , .n_ch = 8 ,
252
+ .mask = FL | FR | FC | FLC | FRC },
253
+ { .ca_id = 0x15 , .n_ch = 8 ,
254
+ .mask = FL | FR | LFE | FLC | FRC },
255
+ { .ca_id = 0x14 , .n_ch = 8 ,
256
+ .mask = FL | FR | FLC | FRC },
257
+ { .ca_id = 0x0b , .n_ch = 8 ,
258
+ .mask = FL | FR | LFE | FC | RL | RR },
259
+ { .ca_id = 0x0a , .n_ch = 8 ,
260
+ .mask = FL | FR | FC | RL | RR },
261
+ { .ca_id = 0x09 , .n_ch = 8 ,
262
+ .mask = FL | FR | LFE | RL | RR },
263
+ { .ca_id = 0x08 , .n_ch = 8 ,
264
+ .mask = FL | FR | RL | RR },
265
+ { .ca_id = 0x07 , .n_ch = 8 ,
266
+ .mask = FL | FR | LFE | FC | RC },
267
+ { .ca_id = 0x06 , .n_ch = 8 ,
268
+ .mask = FL | FR | FC | RC },
269
+ { .ca_id = 0x05 , .n_ch = 8 ,
270
+ .mask = FL | FR | LFE | RC },
271
+ { .ca_id = 0x04 , .n_ch = 8 ,
272
+ .mask = FL | FR | RC },
273
+ { .ca_id = 0x03 , .n_ch = 8 ,
274
+ .mask = FL | FR | LFE | FC },
275
+ { .ca_id = 0x02 , .n_ch = 8 ,
276
+ .mask = FL | FR | FC },
277
+ { .ca_id = 0x01 , .n_ch = 8 ,
278
+ .mask = FL | FR | LFE },
266
279
};
267
280
268
281
struct hdmi_codec_priv {
@@ -371,7 +384,8 @@ static int hdmi_codec_chmap_ctl_get(struct snd_kcontrol *kcontrol,
371
384
struct snd_pcm_chmap * info = snd_kcontrol_chip (kcontrol );
372
385
struct hdmi_codec_priv * hcp = info -> private_data ;
373
386
374
- map = info -> chmap [hcp -> chmap_idx ].map ;
387
+ if (hcp -> chmap_idx != HDMI_CODEC_CHMAP_IDX_UNKNOWN )
388
+ map = info -> chmap [hcp -> chmap_idx ].map ;
375
389
376
390
for (i = 0 ; i < info -> max_channels ; i ++ ) {
377
391
if (hcp -> chmap_idx == HDMI_CODEC_CHMAP_IDX_UNKNOWN )
0 commit comments