xref: /linux/include/sound/hda_chmap.h (revision 9b3dc8aa)
1 /*
2  * For multichannel support
3  */
4 
5 #ifndef __SOUND_HDA_CHMAP_H
6 #define __SOUND_HDA_CHMAP_H
7 
8 #include <sound/hdaudio.h>
9 
10 struct cea_channel_speaker_allocation {
11 	int ca_index;
12 	int speakers[8];
13 
14 	/* derived values, just for convenience */
15 	int channels;
16 	int spk_mask;
17 };
18 struct hdac_chmap;
19 
20 struct hdac_chmap_ops {
21 	/*
22 	 * Helpers for producing the channel map TLVs. These can be overridden
23 	 * for devices that have non-standard mapping requirements.
24 	 */
25 	int (*chmap_cea_alloc_validate_get_type)(struct hdac_chmap *chmap,
26 		struct cea_channel_speaker_allocation *cap, int channels);
27 	void (*cea_alloc_to_tlv_chmap)
28 		(struct cea_channel_speaker_allocation *cap,
29 		unsigned int *chmap, int channels);
30 
31 	/* check that the user-given chmap is supported */
32 	int (*chmap_validate)(int ca, int channels, unsigned char *chmap);
33 
34 	void (*get_chmap)(struct hdac_device *hdac, int pcm_idx,
35 					unsigned char *chmap);
36 	void (*set_chmap)(struct hdac_device *hdac, int pcm_idx,
37 			unsigned char *chmap, int prepared);
38 	bool (*is_pcm_attached)(struct hdac_device *hdac, int pcm_idx);
39 };
40 
41 struct hdac_chmap {
42 	unsigned int channels_max; /* max over all cvts */
43 	struct hdac_chmap_ops ops;
44 	struct hdac_device *hdac;
45 };
46 
47 #endif /* __SOUND_HDA_CHMAP_H */
48