@@ -185,84 +185,97 @@ static const struct snd_pcm_chmap_elem hdmi_codec_8ch_chmaps[] = {
185185/*
186186 * hdmi_codec_channel_alloc: speaker configuration available for CEA
187187 *
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
189189 * The preceding ones have better chances to be selected by
190190 * hdmi_codec_get_ch_alloc_table_idx().
191191 */
192192static const struct hdmi_codec_cea_spk_alloc hdmi_codec_channel_alloc [] = {
193193 { .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 },
199197 { .ca_id = 0x02 , .n_ch = 4 ,
200198 .mask = FL | FR | FC },
201- /* surround51 */
199+ { .ca_id = 0x01 , .n_ch = 4 ,
200+ .mask = FL | FR | LFE },
202201 { .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 },
211203 { .ca_id = 0x0a , .n_ch = 6 ,
212204 .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 },
217217 { .ca_id = 0x13 , .n_ch = 8 ,
218218 .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 },
240221 { .ca_id = 0x12 , .n_ch = 8 ,
241222 .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 },
262223 { .ca_id = 0x1e , .n_ch = 8 ,
263224 .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 },
266279};
267280
268281struct hdmi_codec_priv {
@@ -371,7 +384,8 @@ static int hdmi_codec_chmap_ctl_get(struct snd_kcontrol *kcontrol,
371384 struct snd_pcm_chmap * info = snd_kcontrol_chip (kcontrol );
372385 struct hdmi_codec_priv * hcp = info -> private_data ;
373386
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 ;
375389
376390 for (i = 0 ; i < info -> max_channels ; i ++ ) {
377391 if (hcp -> chmap_idx == HDMI_CODEC_CHMAP_IDX_UNKNOWN )
0 commit comments