On Mon, 22 Feb 2016 09:00:39 +0100, Subhransu S. Prusty wrote: > > Copy the channel map helpers to core. The exported channel map > API names are prefixed with snd_hdmi for namespace management. > Arguments of the helpers are modified to take hdac_device object > argument instead of hda_codec specific object. With this it can > be used by other hdac devices. > > Next patch removes the local channel map helpers from > patch_hdmi.c and uses these common helpers. > > Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@xxxxxxxxx> > Signed-off-by: Vinod Koul <vinod.koul@xxxxxxxxx> > --- > include/sound/hdmi_chmap.h | 45 +++ > sound/hda/Makefile | 2 +- > sound/hda/hdmi_chmap.c | 763 +++++++++++++++++++++++++++++++++++++++++++++ > sound/pci/hda/patch_hdmi.c | 10 - > 4 files changed, 809 insertions(+), 11 deletions(-) > create mode 100644 sound/hda/hdmi_chmap.c > > diff --git a/include/sound/hdmi_chmap.h b/include/sound/hdmi_chmap.h > index e5ea02a..8e9ddb1 100644 > --- a/include/sound/hdmi_chmap.h > +++ b/include/sound/hdmi_chmap.h > @@ -5,10 +5,22 @@ > #ifndef __SOUND_HDMI_CHMAP_H > #define __SOUND_HDMI_CHMAP_H > > +#include <sound/pcm.h> > #include <sound/hdaudio.h> > > struct cea_channel_speaker_allocation; > > +#define SND_PRINT_CHANNEL_ALLOCATION_ADVISED_BUFSIZE 80 > + > +struct cea_channel_speaker_allocation { > + int ca_index; > + int speakers[8]; > + > + /* derived values, just for convenience */ > + int channels; > + int spk_mask; > +}; > + > struct hdmi_chmap_ops { > /* > * Helpers for producing the channel map TLVs. These can be overridden > @@ -28,6 +40,11 @@ struct hdmi_chmap_ops { > void (*set_chmap)(struct hdac_device *hdac, int pcm_idx, > unsigned char *chmap, int prepared); > bool (*is_monitor_connected)(struct hdac_device *hdac, int pcm_idx); > + /* get and set channel assigned to each HDMI ASP (audio sample packet) slot */ > + int (*pin_get_slot_channel)(struct hdac_device *codec, > + hda_nid_t pin_nid, int asp_slot); > + int (*pin_set_slot_channel)(struct hdac_device *codec, > + hda_nid_t pin_nid, int asp_slot, int channel); > }; > > struct hdmi_chmap { > @@ -36,4 +53,32 @@ struct hdmi_chmap { > struct hdac_device *hdac; > }; > > +void snd_hdmi_init_channel_allocations(void); > +int snd_hdmi_get_channel_allocation_order(int ca); > +int snd_hdmi_get_active_channels(int ca); > +struct cea_channel_speaker_allocation *snd_hdmi_get_ch_alloc_from_ca(int ca); > +void snd_hdmi_print_channel_allocation(int spk_alloc, char *buf, int buflen); > +int snd_hdmi_channel_allocation(struct hdac_device *codec, > + int spk_alloc, int channels); > +int snd_hdmi_to_spk_mask(unsigned char c); > +int snd_hdmi_spk_to_chmap(int spk); > +int snd_hdmi_manual_channel_allocation(int chs, unsigned char *map); > +void snd_hdmi_setup_channel_mapping(struct hdmi_chmap *chmap, > + hda_nid_t pin_nid, bool non_pcm, int ca, > + int channels, unsigned char *map, > + bool chmap_set); > +int snd_hdmi_pin_set_slot_channel(struct hdac_device *codec, hda_nid_t pin_nid, > + int asp_slot, int channel); > +int snd_hdmi_pin_get_slot_channel(struct hdac_device *codec, hda_nid_t pin_nid, > + int asp_slot); > +void snd_hdmi_set_channel_count(struct hdac_device *codec, > + hda_nid_t cvt_nid, int chs); > +int snd_hdmi_chmap_cea_alloc_validate_get_type( > + struct cea_channel_speaker_allocation *cap, > + int channels); > +void snd_hdmi_cea_alloc_to_tlv_chmap( > + struct cea_channel_speaker_allocation *cap, > + unsigned int *chmap, int channels); > +int snd_hdmi_add_chmap_ctls(struct snd_pcm *pcm, int pcm_idx, > + struct hdmi_chmap *chmap); Do we really need to export all these? Can't be they somehow self-contained? Takashi _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel